Facebook Graph API,内容未被正确删除

时间:2012-04-10 11:36:05

标签: facebook facebook-graph-api facebook-php-sdk

我创建了一个Facebook Canvas应用程序。这个画布应用程序本质上是一个图像库,用户可以通过单击“下一步”按钮来查看图像 - 非常简单。

当用户“查看”图片时,我使用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标签:

   <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:标签的页面。我使用以下方法执行此操作:

file_get_contents('https://graph.facebook.com?id=https://apps.facebook.com/myapp/image/'.url_title($_POST['title']).'/'.$data['image_id'].'&scrape=true');

但是,我非常肯定这不起作用,在app中发出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帖子上看到这是一个常见问题,我需要让Facebook在调用Graph API之前抓取页面,这正是我在上面第三段代码中尝试做的事情(file_get_contents)没有运气。

我想我的问题是:我是否以正确的方式解决这个问题?当以这种方式使用时,我很难找到有关该过程的任何明确文档。

如果我以正确的方式解决这个问题,为什么在调用file_get_contents('https:// app ....)时我的页面没有被删除?

很抱歉这篇长篇文章,我试图全面了解你的情况。

由于

2 个答案:

答案 0 :(得分:1)

您不需要进行手动刮擦即可​​使对象注册。 根据Facebook文档:

  

当您的应用尝试在用户和用户之间建立连接时   对象通过Open Graph上的动作,Facebook将刮掉对象   网页并读取元标记以将用户与对象相关联。   对象刮擦发生在:

     
      
  • 用户第一次对对象执行操作(例如:喜欢,监听,读取或对象上的任何自定义操作)。了解更多
      关于如何发布行动。
  •   
  • 列表项
  •   
  • 通过对象调试器
  • 设置对象URL   
  • 第一次刮刮后每7天通过Linter API输入对象URL
  •   

如果调用发布代码,则首次引用连接对象时将自动删除该对象。 否则,使用调试器,正如您所提到的那样,将产生相同的效果。

编辑 - &GT;但是,有一些不一致(如你所提到的)和开发人员注意到他们的“新鲜”对象没有被正确刮擦。 Facebook不是这个错误,希望很快能解决它。解决方法似乎是使用调试器强制linting项目。

https://developers.beta.facebook.com/bugs/141650809281976/?browse=search_4f488911648042f90826189

文档:https://developers.facebook.com/docs/opengraph/objects/#connect

希望这有帮助:)祝你好运

答案 1 :(得分:0)

修正了它。我需要对发布Graph API的代码进行用户代理检查,以防止在FB命中时发布:

if(strpos($_SERVER['HTTP_USER_AGENT'], 'facebookexternalhit') === false)