我有一个带有 Open Graph 图像标签的页面:
<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 是:
<img src="http://external.ak.fbcdn.net/safe_image.php?d=6b635a7f80252e93c6b28e2dbe4ad440&w=90&h=90&url=http%3A%2F%2Fchildhumor2.homeip.net%3A9009%2F_ah%2Fimg%2FRYCF7Ty7wODp9R-N_QIWYA%3D%3D%3Ds200" class="img">
第一次查看点赞用户的动态消息时,我看到 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?
- 我是否应该以某种方式对 Open Graph 标记中的 URL 进行编码? (我尝试使用 urllib.quote-ing 得到相同的结果。)
为了让事情更困惑,Facebook URL Linter正确检索图像。此外,如果在页面上进行 FB 分享,缩略图预览将正确显示。这让我相信这是 safe_image.php 脚本 FB 代理/缓存图像的错误。
最佳答案
Facebook 可能应该取消引用该值,以便它与您列出的原始 og:image 相匹配,您应该为此编写一个错误(如 Nathan 所建议的)。
但是,从技术上讲,%3D
和 =
在 URL 的路径部分中具有相同的含义,应该同等对待,因此在GAE方面的事情。在这种情况下,您可能希望在 GAE 上处理时 urllib.unquote()
路径。 (也许你可以简单地重定向到未转义的版本)
关于python - 如何为 Facebook 开放图标记正确编码带有等号的图像 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4179906/