use*_*845 2 java image google-image-search
我正在尝试在Google图片中搜索一些不同的图片,并使用java Google API保存每个查询的第一个结果.
我设法在Google中搜索并获取包含搜索结果的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())
Run Code Online (Sandbox Code Playgroud)
如果我有图像链接,我也知道如何保存图像.
我的问题是如何获得第一个(或第二个或其他)图像正确的地址而不是网址(例如www.yadayadayada.com/image.png)
10倍
ten*_*ica 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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10526 次 |
| 最近记录: |