2016-03-15 46 views
0

我正在尝试编写一段Java代码,该代码应该能够获取Google图像搜索的结果。稍后,我还希望从Google图片搜索中下载所有图片并提供查询。现在,我写了这个代码,但是当我运行它,它给了错误“的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的一面,所以我不能帮你。 – Verzlo

0

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

为了证实这一点,只需输入搜索URL(https://ajax.googleapis.com/ajax/services/search/images? “+ ” V = 1.0 & Q =巴拉克%20obama & USERIP = INSERT-USER-IP)到您的浏览器顶部的酒吧和google一下。您会看到Google不再提供图片的数据。

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