我创建了一个 Facebook 画布应用程序。这个画布应用程序本质上是一个图像库,用户可以通过单击“下一步”按钮来查看图像——非常简单。
当用户“查看”图像时,我正在使用 Graph API 发布到自定义对象。我这样做(PHP SDK):
$this->data['facebook']->api('/me/myapp:look_at', 'post', array(
'picture' => current_url()
));
current_url() 是 Facebook 画布的当前 URL (https://apps.facebook.com/myapp/image/id)。此页面有一系列 og 元标记:
<meta property="og:title" content="<?=$image->title?>" />
<meta property="og:description" content="Pic of <?=$image->title?>" />
<meta property="og:image" content="https://www.***.com/***/images/<?=$image->src?>" />
<meta property="fb:app_id" content="<?=FB_APP_ID?>" />
<meta property="og:url" content="<?=current_url();?>" />
<meta property="og:type" content="myapp:picture" />
我已经读过,在将图像添加到库时,我需要让 Facebook 为 og:tags 抓取页面。我使用以下方法执行此操作:
file_get_contents('https://graph.facebook.com?id=https://apps.facebook.com/myapp/image/'.url_title($_POST['title']).'/'.$data['image_id'].'&scrape=true');
但是,我很确定这是行不通的,在应用程序中调用 mail() 后,访问该 URL 并等待什么都没有通过,这表明它没有被抓取。
运行第一个代码块(调用 Graph API myapp:look_at)时,我从 Facebook 收到以下异常:
Fatal error: Uncaught OAuthException: (#3502) Object at URL https://apps.facebook.com/myapp/image/img/id has og:type of 'website'. The property 'picture' requires an object of og:type 'myapp:picture'. thrown in /****/application/libraries/base_facebook.php on line 1106
如果我使用 Facebook 的调试器工具来抓取页面,我会得到所有信息。如果我然后重新访问进行 FB Graph API 调用的画布页面,那么一切都会顺利进行。我在其他 SO 帖子上读到这是一个常见问题,我需要在调用 Graph API 之前让 Facebook 抓取页面,这正是我在上面的第三个代码块(file_get_contents)中尝试做的事情没有运气。
我想我的问题是:我是否以正确的方式处理这件事?当以这种方式使用该过程时,我正在努力寻找有关该过程的任何明确文档。
如果我以正确的方式进行操作,为什么在调用 file_get_contents('https://app....) 时我的页面没有被抓取?
抱歉,帖子太长了,我试图给你完整的图片。
谢谢