2016-03-15 74 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個免費查詢,並且必須在此之後付費),但還沒有一個很好的替代品。