使用Java从Google Image搜索下载图像

时间:2016-03-15 04:50:53

标签: java api google-image-search

我正在尝试编写一个Java代码,该代码应该向我提取google图像搜索的结果。稍后,我还想从查询中下载Google Image搜索中的所有图像。现在,我编写了这段代码,但是当我运行它时,它会给出错误“ 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的新手。

2 个答案:

答案 0 :(得分:0)

回答你的问题,很简单。您从

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

不是有效的JSONObject。仔细检查你的来源并确保它是一个json响应。

另请注意,您使用的API已经过时了。

答案 1 :(得分:0)

这是因为不推荐使用API​​,因此JSONObject [" resultData"]返回空值。

要确认这一点,只需输入您的搜索网址(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次免费查询并且必须在之后付款)这一点)。