【问题标题】:Google Custom Search API returning HTML documents instead of imagesGoogle 自定义搜索 API 返回 HTML 文档而不是图像
【发布时间】:2015-07-28 20:53:10
【问题描述】:

我开始在一个项目中使用 Google 自定义搜索 API,其想法是搜索图片,我想使用自定义搜索,因为 Google 图片 API 已被弃用。

我已经在 CSE 控制台上启用了图像搜索

我的查询是这样的:

https://www.googleapis.com/customsearch/v1?key=APIKEY&cx=CSECX&q=flower&alt=json&searchType=image&num=1&start=NUMBER

其中 NUMBER 是 1 到 20 之间的随机值

有时,它会返回如下结果:

{u'kind': u'customsearch#result', u'title': u'Flower Wallpaper Tumblr #6790199', u'displayLink': u'7-themes.com', u'htmlTitle': u'<b>Flower</b> Wallpaper Tumblr #6790199', u'snippet': u'Flower Wallpaper Tumblr', u'htmlSnippet': u'<b>Flower</b> Wallpaper Tumblr', u'link': u'http://7-themes.com/data_images/out/7/6790199-flower-wallpaper-tumblr.jpg', u'mime': u'image/jpeg', u'image': {u'thumbnailWidth': 150, u'byteSize': 808360, u'height': 1200, u'width': 1920, u'contextLink': u'http://7-themes.com/6790199-flower-wallpaper-tumblr.html', u'thumbnailLink': u'https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcSad0z_Wla0nRHAcQrjO5jLQkFjcoqnNHhejjuGmdA1AW2BqIVEpLARAk0s', u'thumbnailHeight': 94}}

突出有趣的部分:

u'link': u'http://7-themes.com/data_images/out/7/6790199-flower-wallpaper-tumblr.jpg', u'mime': u'image/jpeg'

所以看起来 URL 是http://7-themes.com/data_images/out/7/6790199-flower-wallpaper-tumblr.jpg,mimetype 是 image/jpeg,但是如果你去 URL,你会发现它不是一个图像,而是一个 HTML 文档

当然,我可以将此捕获为异常,但我不想浪费每日 API 请求(每天 100 个限制),因为当我明确表示时 API 没有给我图像。

所以,问题是:这是正常行为,还是我的错误配置/滥用?如果是这样,我该如何解决?

感谢您的关注

【问题讨论】:

  • 虽然我没有足够的信心将此作为答案发布,但我猜测托管图像的网站对其 mimetypes 做了一些可疑的事情。如果服务器要对其托管的内容撒谎,这可能不在谷歌的控制范围内。
  • 是的......我也想过这种可能性......我真的希望这是我的错,而不是我无法解决的问题
  • 经过一番阅读,看起来服务器正在使用类似于this 的技术,因此外部客户端(包括谷歌爬虫)无法直接访问图像。不过,我不知道如何确认这种情况。这意味着该文件被宣传为图像,但尝试打开它会导致服务器提供 html 文件。
  • 是的,即使我从谷歌图片页面执行此操作也会发生...好吧,大概就是这样,将其作为答案发布,以便我接受:)
  • 完成了,尽管我们仍然希望有人出现并证明我错了。祝你好运。

标签: google-api google-custom-search


【解决方案1】:

经过一点阅读,我最好的猜测是某些服务器正在执行资源重定向以防止外部资源直接热链接到资源。有问题的文件被宣传为图像,但从外部服务器访问它会提供一个 HTML 文档。这不是 URL 重定向,因此在下载资源之前,客户端(包括 Google 抓取工具)不会检测到它。

这种资源重定向是在 Apache 服务器上使用.htaccess 文件和RewriteEngine 完成的,其技术类似于here 所描述的技术,尽管该特定技术不能用于诱饵-和- 切换 HTML 文档的图像。

简而言之,如果服务器谎报其托管的文件类型,Google 对此无能为力。您可以通过在普通 Web 搜索界面上执行相同的查询来确认这不是自定义搜索 API 的问题 - 请注意,单击图像会加载 HTML 文档而不是图像本身。

【讨论】:

    猜你喜欢
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多