2016-03-15 4 views
0

Я пытаюсь написать код Java, который должен отображать результаты поиска изображений Google. Позже я также хочу загрузить все изображения из поиска Google Image с учетом запроса. Прямо сейчас, я написал этот код, но когда я запускаю его, он дает ошибку, что «JSONObject [» responseData «] не JSONObject.»Загрузка изображений из поиска изображений Google с использованием Java

import java.awt.image.BufferedImage; 
import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.net.URL; 
import java.net.URLConnection; 

import javax.imageio.ImageIO; 
import javax.swing.ImageIcon; 
import javax.swing.JOptionPane; 

import com.fasterxml.jackson.core.JsonParser; 

import twitter4j.JSONObject; 

public class TestImage { 

public static void main(String[] args) 
{ 
    try 
    { 
     URL url = new URL("https://ajax.googleapis.com/ajax/services/search/images?" + 
       "v=1.0&q=barack%20obama&userip=INSERT-USER-IP"); 
     URLConnection connection = url.openConnection(); 
     connection.addRequestProperty("Referer", ""); 

     String line; 
     StringBuilder builder = new StringBuilder(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
     while((line = reader.readLine()) != null) 
     { 
      builder.append(line); 
     } 

     JSONObject json = new JSONObject(builder.toString()); 
     String imageUrl = json.getJSONObject("responseData").getJSONArray("results").getJSONObject(0).getString("url"); 
     // JsonParser jsonParser = new JsonParser(); 
     //((Object) jsonParser).parse(json).getAsJsonObject(); 
     BufferedImage image = ImageIO.read(new URL(imageUrl)); 
     JOptionPane.showMessageDialog(null, "", "", JOptionPane.INFORMATION_MESSAGE, new ImageIcon(image)); 
    } 
    catch(Exception e) 
    { 
     JOptionPane.showMessageDialog(null, e.getMessage(), "Failure", JOptionPane.ERROR_MESSAGE); 
     e.printStackTrace(); 
    } 
} 

} `

Пожалуйста, помогите я с какой ошибкой, поскольку я очень новичок в Java.

ответ

0

Отвечая на ваш вопрос, это довольно просто. Ответ, который вы возвращаете с вашего

String imageUrl = json.getJSONObject("responseData").getJSONArray("results").getJSONObject(0).getString("url"); 

не является действительным JSONObject. Дважды проверьте свой источник и убедитесь, что это ответ json.

Также обратите внимание, что API, который вы используете, устарел.

+0

Но вышеприведенный api возвращает результат только в формате JSON. Кроме того, есть ли альтернативы для поиска изображений? –

+0

Ваш компилятор говорит, что ваша ошибка заключается в том, что ответ не json (например, отсутствует закрывающая скобка или что-то еще). Я не делаю эту сторону API Google, поэтому я не могу вам помочь. – Verzlo

0

Это потому, что API устарел, поэтому JSONObject ["resultData"] возвращает нулевое значение.

Чтобы подтвердить это, просто введите поисковый URL (https://ajax.googleapis.com/ajax/services/search/images? "+ " v = 1,0 & д = барак% 20obama & userip = ВСТАВИТЬ-USER-IP) в верхней строке браузера и Google его. Вы увидите, что Google больше не предоставляет данные для изображений.

Насколько мне известно, еще не очень хорошая замена, хотя я слышал, что Google Custom Search (https://developers.google.com/custom-search/json-api/v1/reference/cse/list) может работать (хотя вы получаете только 100 бесплатных запросов в день и должны платить после этого).

Смежные вопросы