【问题标题】:Downloading images from Google Image search using Java使用 Java 从 Google 图片搜索中下载图片
【发布时间】:2016-03-15 04:50:52
【问题描述】:

我正在尝试编写一个 Java 代码来获取我的 google 图片搜索结果。稍后,我还想在给定查询的情况下从 Google 图片搜索中下载所有图片。现在,我已经编写了这段代码,但是当我运行它时,它给出的错误是“JSONObject["responseData"] is not a 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 新手,请帮助我解决错误。

【问题讨论】:

    标签: java api google-image-search


    【解决方案1】:

    这是因为 API 已被弃用,所以 JSONObject["resultData"] 返回一个空值。

    要确认这一点,只需输入您的搜索网址 (https://ajax.googleapis.com/ajax/services/search/images?" + "v=1.0&q=barack%20obama&userip=INSERT-USER-IP) 进入浏览器的顶部栏并用谷歌搜索。你会看到谷歌不再提供图片的数据。

    据我所知,目前还没有很好的替代品,虽然我听说 Google 自定义搜索 (https://developers.google.com/custom-search/json-api/v1/reference/cse/list) 可以工作(尽管您每天只能获得 100 次免费查询,并且之后必须付费)。

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 但是上面的api只返回JSON格式的结果。另外,图片搜索有什么替代品吗?
      • 你的编译器说你的错误是响应不是 json (例如缺少右括号或其他东西)。我不做谷歌 API 的那一面,所以我不能帮助你。
      猜你喜欢
      • 2012-03-08
      • 1970-01-01
      • 2012-12-08
      • 2014-09-27
      • 2014-01-10
      • 2013-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多