Загрузка изображений из поиска изображений Google с использованием Java

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

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.


person Anurag Mishra    schedule 15.03.2016    source источник


Ответы (2)


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

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

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

person user6540251    schedule 18.02.2017

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

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

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

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

person Verzlo    schedule 15.03.2016
comment
Но приведенный выше API возвращает результат только в формате JSON. Кроме того, есть ли альтернативы для поиска изображений? - person Anurag Mishra; 15.03.2016
comment
Ваш компилятор говорит, что ваша ошибка заключается в том, что ответ не является json (например, отсутствует закрывающая скобка или что-то в этом роде). Я не занимаюсь этой стороной API Google, поэтому я не могу вам помочь. - person Verzlo; 15.03.2016