【问题标题】:how do save image from google images using google API?如何使用谷歌 API 从谷歌图像中保存图像?
【发布时间】:2012-07-14 16:49:04
【问题描述】:

我正在尝试在 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)

10 倍

【问题讨论】:

    标签: java image google-image-search


    【解决方案1】:

    JSON 接口在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();
            }
        }
    }
    

    【讨论】:

    • 嘿,谢谢您的回答,但我的问题是我在 url 字段中输入了包含图像的网站,而不是图像本身的链接。例如:如果我搜索教父,我会得到imdb.com/title/tt0068646
    • @user1383845 请看看我的编辑是否可以帮助你。我包含了一个小样本,它可以进行搜索并显示第一张图片。
    • @Aqua 谢谢。我遇到了这个库,但我认为它是用来使用自定义搜索引擎在特定网站列表中搜索的,是否可以不限制搜索?
    • @Aqua 非常感谢。我设法添加了诸如*.com*.org 等通配符域......现在应该这样做。
    • @Aqua 谢谢。我遇到了您的解决方案,它对我有很大帮助。但是,我尝试修改代码以尝试打印出搜索返回的每个图像的 url,但它似乎最多只会返回 3 个 url。为什么会这样?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    相关资源
    最近更新 更多