我使用Python的facebook模块自动在会员的facebook页面上发布人们的工作广告。我已经申请并获得了 Facebook 的授权来执行此操作。现在,当我发布到大多数人的页面时,图像和描述不会被抓取,但是当我使用与应用程序关联的业务站点的 FB 站点所有者的访问令牌进行发布时,它们会被抓取。 我用来发布页面的代码:
import facebook
graph = facebook.GraphAPI(access_token)
# record the id of the wall post so we can like it
fbWallPost = graph.put_wall_post(message=fbmsg, attachment=fbpost, profile_id=pageID)
在 python shell 中运行它会发布一个被抓取的 URL,但从应用程序中运行它通常不会。该页面具有以下元标记:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Fair Work</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="author" content="Fair Work">
<!-- Facebook crawler uses these JRT -->
<meta property="og:site_name" content="Fair Work"/>
<meta property="fb:app_id" content="322643981237986" />
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />
<meta property="og:url" content="http://fairwork.com.au/job/final-job-on-thursday-april-30th/" />
<meta property="og:description" content="My last test today"/>
<meta property="og:type" content="article"/>
<meta property="og:image" content="http://fairwork.com.au/media/cache/cd/b0/cdb05f8dd8885351925bf43076870937.jpg"/>
<meta property="og:image:width" content="400" />
<meta property="og:image:height" content="400" />
申请ID正确。我进入 Facebook 的调试器,然后输入 URL
我单击“调试”,然后收到一条错误,指出缺少“og:type”元标记,但事实并非如此:
然后我点击“获取新的抓取信息”......
...图像和描述加载得很好。从此时起,如果我在网站上发布链接,则会显示图像和说明,但是所有以前发布的链接都不会删除信息。下图中同一链接的两个连续帖子是在运行前面提到的调试过程之前(底部)和之后(顶部)完成的:
链接到的页面是公开可用的,并由 Django 提供服务。我希望能够自动发布广告(当 FB 页面所有者请求时),并在发布时由 FB 抓取图像和描述。有什么想法吗?
NGINX 似乎导致对 Facebook 图形 API 的 http 调用无法正常工作。当
fbWallPost = graph.put_wall_post(message=fbmsg, attachment=fbpost, profile_id=pageID)
通过 Celery(它独立于 django 运行,而不是通过 Web 服务器运行)运行,facebook 抓取发布的链接并显示 OG 元标记链接到的图像和描述。当 django 运行 put_wall_post 时,会发生帖子,但 facebook 不会抓取链接。从 Django 视图运行时,对 API 的其他调用也不起作用。我只能认为 NGINX 以某种方式干扰了 HTTP 请求。