java - 如何使用谷歌API保存谷歌图像中的图像?

标签 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())

如果我有图像链接,我也知道如何保存图像。

我的问题是如何获取第一个(或第二个或其他)图像的正确地址而不是网址(例如www.yadayadayada.com/image.png)

10x

最佳答案

JSON 接口(interface)描述于 JSON Developer's Guide 。特别是JSON reference部分概述了响应格式和保证字段。您可以使用 url 属性的值。

给定 URL,您可以使用 ImageIO 读取图像并将其写入磁盘。这是相关的tutorial .

如果不需要图像处理和演示,那么您可以使用 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();
        }
    }
}

关于java - 如何使用谷歌API保存谷歌图像中的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11485578/

相关文章:

iphone - 如何使用 Google Custom Search 在 objective c 中进行图片搜索

html - 使用 CSS 设置 SVG 的背景颜色

java - org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException

html - Bootstrap 响应图像不会居中

java - 使用图像在 google 中搜索

python - 更改 matplotlib 按钮小部件的图像

javascript - 在javascript中将SVG(包含动画)保存为不带 Canvas 的PNG文件

java - 如何设置Scala/Java工作流以通过Jumpserver远程部署jar和进行远程调试?

java - Android:向 ListView 中显示的项目的数组列表添加日期格式和排序

java - 从 GCMBaseIntentService 调用异步任务?