如何为Facebook open graph标签正确编码带有等号的图像URL

2024-06-28 19:47:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带有Open Graph image标记的页面:

<meta property="og:image" content="http://childhumor2.homeip.net:9009/_ah/img/RYCF7Ty7wODp9R-N_QIWYA===s200"/>

图像是一个GAE blob,URL来自调用get_serving_url。URL正常工作。在

现在,如果有人喜欢这个页面,那么显示在新闻源中的缩略图图像将被破坏。只有一个空白的1x1图像返回到浏览器。在

检查FB页面,生成的HTML是:

^{pr2}$

当第一次查看喜欢的用户的新闻提要时,我看到FB点击了我的服务器上的图片:

INFO     2010-11-14 21:33:17,701 dev_appserver.py:3283] "GET /_ah/img/RYCF7Ty7wODp9R-N_QIWYA%3D%3D%3Ds200 HTTP/1.1" 500 -

很明显,在URL中有一个等号的URL编码问题,但我不知道是谁的错。在

  • FB在回我的服务器获取图像之前应该取消%3D吗?在
  • GAE没有正确处理编码的URL吗?在
  • 我应该在opengraph标记中对URL进行编码吗?(我试过了urllib.quote-同样的结果。)

{正确地检索图片}使图片更加混乱。此外,如果在页面上进行FB共享,缩略图预览将正确显示。这让我相信这是保险箱的问题_图像.php脚本FB正在使用代理/缓存图像。在


Tags: 标记图像image服务器url编码imgfb
3条回答

很可能Facebook应该不引用这个值,以便它与您列出的原始og:image相匹配,您应该为此编写一个bug(正如Nathan建议的那样)。在

然而,从技术上讲,%3D和{}在URL的path部分有相同的含义,应该同等对待,这样在GAE方面也可能是值得bug的。在这种情况下,您可能需要urllib.unquote()在GAE上处理时的路径。(也许您可以简单地重定向到未转义的版本)

作为一个解决办法,不要使用谷歌图像服务服务。相反,编写一个处理程序从数据存储中检索blob,对其进行转换,然后将其流式传输回客户机。这使得你可以构建一个更简单的URL,而不会被Facebook盗用。在

Example from GAE Docs

class Thumbnailer(webapp.RequestHandler):
    def get(self):
        blob_key = self.request.get("blob_key")
        if blob_key:
            blob_info = blobstore.get(blob_key)

            if blob_info:
                img = images.Image(blob_key=blob_key)
                img.resize(width=80, height=100)
                img.im_feeling_lucky()
                thumbnail = img.execute_transforms(output_encoding=images.JPEG)

                self.response.headers['Content-Type'] = 'image/jpeg'
                self.response.out.write(thumbnail)
                return

      # Either "blob_key" wasn't provided, or there was no value with that ID
      # in the Blobstore.
      self.error(404)

如果URL linter说一切正常,那么你很可能是对的,这是Facebook的一个bug。我建议搜索他们现有的错误,看看你是否能找到一个存在的,如果没有张贴一个新的错误。目前大约有4300个平台漏洞开放,所以肯定不是没有听说什么东西坏了。Facebook错误:http://bugs.developers.facebook.net/

相关问题 更多 >