如何使用谷歌API从谷歌图像保存图像?

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)