我试图在谷歌图像有些不同的搜索和保存的第一个结果与Java API谷歌每次查询。
我设法在谷歌搜索和获取其中包含搜索结果的JSON对象。 该对象包含网站包含图像,而不是像地址
码:
URL url = new URL("https://ajax.googleapis.com/ajax/services/search/images?" +
"v=1.0&q="+properties.getProperty(Integer.toString(i))+"&userip=IP");
URLConnection connection = url.openConnection();
connection.addRequestProperty("Referer", "images.google.com");
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())
我也知道如何保存图像,如果我有图片链接。
我的问题是如何获得第一(或第二或其他)图像正确的地址,而不是网址(例如www.yadayadayada.com/image.png)
10倍
JSON接口在描述JSON开发人员指南 。 特别地, JSON参考节概述响应格式和有保证的字段。 您可以使用的值url
属性。
考虑到URL,就可以读取图像,并将其写入到使用该磁盘的ImageIO 。 下面是相关教程 。
如果不需要的图像处理和演示,那么你可以使用HttpURLConnection类简单地下载文件。
编辑:例如
下面是基于包含在问题的代码一个简单的例子。 它执行搜索并显示第一图像。
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;
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=Godfather");
URLConnection connection = url.openConnection();
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");
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();
}
}
}