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

2024-01-04

我正在尝试在 Google 图像中搜索一些不同的内容,并使用 java Google API 保存每个查询的第一个结果。

我设法在 Google 中搜索并获取包含搜索结果的 json 对象。该对象包含包含图像的网站,而不是图像地址

code:

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 接口描述于JSON 开发人员指南 https://developers.google.com/image-search/v1/jsondevguide。尤其,JSON 参考 https://developers.google.com/image-search/v1/jsondevguide#json_reference部分概述了响应格式和保证字段。您可以使用以下值url财产。

给定 URL,您可以使用以下命令读取图像并将其写入磁盘ImageIO http://docs.oracle.com/javase/6/docs/api/javax/imageio/ImageIO.html。这是相关的tutorial http://docs.oracle.com/javase/tutorial/2d/images/index.html.

如果不需要图像处理和演示,那么您可以使用HttpURL连接 http://docs.oracle.com/javase/6/docs/api/java/net/HttpURLConnection.html只需下载文件即可。

编辑:示例

下面是一个基于问题中包含的代码的简单示例。它执行搜索并显示第一张图像。

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();
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用谷歌API保存谷歌图像中的图像? 的相关文章

随机推荐

  • Vaadin 和 Spring MVC 集成

    我正在考虑将 Spring MVC 与 Vaadin 框架一起使用的可能性 是否有任何记录在案的方法可以使它们很好地协同工作 另外 将它们一起使用是个好主意吗 与表现有关 我将在专用服务器上运行该应用程序 为了让我的问题更清楚一些 我如何从
  • SQL Server 中“描述表”的等效项是什么?

    我有一个 SQL Server 数据库 我想知道它有哪些列和类型 我更喜欢通过查询来完成此操作 而不是使用像企业管理器这样的 GUI 有没有办法做到这一点 您可以使用sp columns http msdn microsoft com en
  • 引用 google-play-services 库

    我正在使用 Google Maps Android API v2 开发一个项目 当我开始引用 google play services lib 时遇到问题 我的项目图标上出现一个红色感叹号 并且 问题 选项卡中出现一条错误消息 我使用的是
  • EF Code First 不生成表

    我正在开发 EF Code First 站点 并且编写了我的类和上下文类 其来源是 using System using System Collections Generic using System Linq using System T
  • 使子元素(带填充)为父元素的 100% 宽度和高度

    是否可以使子元素 带填充 具有其父元素的 100 宽度和高度 html div div div css child padding 15px 我尝试将子项设置为 100 宽度 高度 但这会使子项由于填充而大于父项 我还尝试使子位置绝对并将顶
  • 修复通过 REST API 上传文件时 Artifactory 中的校验和

    我使用下面的代码通过 Artifactory 的 REST API 上传文件 我的问题是 当我通过 GUI 查看文件时 我收到以下消息 客户端未发布校验和值 如果您信任上传的内容 您可以通过单击 修复 来接受实际的校验和 校验和按钮 如何修
  • 如何使用响应大小的图像来防止卡顿并减少布局偏移?

    我的网站托管了大量各种尺寸的图像 这些图像具有响应能力 并且可以在从桌面到移动设备的所有浏览器宽度上更改大小 我在 Google Search Console 中看到我的 CLS 累积布局偏移 很差 为 0 25 秒 我的网站布局随着图像加
  • 如何用C实现动态调度表

    首先 我了解如何使用函数指针和字符串或其他查找来实现调度表 这不是挑战 我正在寻找的是一种动态向该表添加条目的方法在编译时 我希望的代码结构类型是这样的 Strategy h 包含调度程序的函数定义和调度表定义 Strategy c 包含调
  • 如何在iPhone OS上通过编程发送usd请求

    如何在iPhone OS上通过编程发送usd请求 例如 100 CTCallDialWithID 100 1 并与 CoreTelephony 链接
  • Pycharm 中的多个右边距

    我正在学习 Pycharm Community Edition 3 4 我想知道除了其余代码的常规边距之外 是否可以仅为注释和文档字符串设置正确的边距 我问这个问题是因为我试图遵守 PEP8 指南 即每个注释 72 个字符 常规代码 79
  • 是否有用于创建特定大小的测试文件的Python模块?

    我有一台已上传文件的服务器 我需要分析到该服务器的各种文件大小的上传 响应时间 即上传 10kb 文件 100mb 文件和许多其他大小的文件需要多长时间 我想避免手动创建所有文件并存储它们 是否有一个 Python 模块可以让您创建任意大小
  • 如何从 java 检查 PATH 和 CLASSPATH 环境变量?

    我正在制作一个java程序来使用JMF读取audio wav文件 每次我的计算机重新启动时 我都必须从cmd设置路径 set CLASSPATH WINDIR java classes jmf jar WINDIR java classes
  • 当我关闭 Zope 服务器时,它显示 AttributeError

    我正在使用 Plone 4 3 3 创建我的 Plone 站点 但是当我关闭服务器时 它显示以下错误 Traceback most recent call last File Plone zinstance parts instance b
  • 如何从 Gradle 中的 JAR 中排除资源并通过 IntelliJ 运行

    我最近开始工作 7 年多旧项目 which 使用 Ant Ivy用于依赖关系和构建管理 我的任务是将其转换为 Gradle但结构有点不传统 projectRoot folderA folderB projectX conf file1 tx
  • 如何将数据集对象存储到数据类型对象的包变量中?

    如何将数据集对象存储到数据类型的包变量中Object并将其从脚本任务中分配回另一个数据集对象 这是我之前的答案中的代码示例 它展示了如何在脚本任务中从对象变量填充 OleDB 数据适配器 您可以使用数据流任务中的记录集目标将记录集存储到对象
  • 如何合并两个有序的对象列表?

    public class ListMerge public static void main String args Scanner input new Scanner System in System out println Input
  • 如何在 Entity Framework Core 中克隆实体?

    我尝试使用 SetValues 方法克隆实体 但出现以下错误 无法跟踪实体类型 TariffPeriod 的实例 因为已跟踪具有相同键值 Id 的另一个实例 附加现有实体时 请确保仅附加一个具有给定键值的实体实例 这是代码 var peri
  • 确保 MediaPlayer onCompletionListener 被调用并且线程没有死

    我有一个反复出现的警报 它会触发一个 BroadcastReceiver 启动一个 IntentService 该 IntentService 使用 MediaPlayer 播放声音 但是 我的 OnCompletionListener 用
  • 向 D3.js 轴添加特定刻度

    我创建了一个轴d3 svg axis和时间刻度 并对刻度生成器产生的刻度感到满意 但是 我想确保始终标记特定值 例如 如果生成器生成以下日期 2000年1月1日 2001年1月1日 2002年1月1日 2003年1月1日 我可能想让轴显示
  • 如何使用谷歌API保存谷歌图像中的图像?

    我正在尝试在 Google 图像中搜索一些不同的内容 并使用 java Google API 保存每个查询的第一个结果 我设法在 Google 中搜索并获取包含搜索结果的 json 对象 该对象包含包含图像的网站 而不是图像地址 code