3

我正在尝试使用 og 向我的网站添加自定义操作和对象。正如我之前搜索过的问题中所述,调试器正确地抓取了网站并确认它是它应该的方式,没有任何错误、警告或异常。

但是,当我使用 php sdk 发布到该对象时,我从 FB 收到此异常:

OAuthException: (#3502) URL //mypage.com/image/details 上的对象的 og:type 为“网站”。属性 'photo' 需要一个 og:type 'app_prod:photo' 的对象。

[注意我已经删除了所有的“http://”,这样 stackoverflow 就不会将它们呈现为链接]

php sdk 调用:

$ret_obj = $facebook->api('/me/app_prod:love', 'POST', array(
'photo' => '//mypage.com/image/details',
'access_token' => $token )) ;

页面的头部如下所示:

<head prefix="og: //ogp.me/ns# fb: //ogp.me/ns/fb# app_prod: //ogp.me/ns/fb/app_prod#">

<meta property="fb:app_id" content="APP_ID">
<meta property="og:type" content="app_prod:photo">
<meta property="og:url" content="http://mypage. com/image/details">
<meta property="og:title" content="我喜欢的图片">
<meta property="og:image" content="http://images.mypage.com/8f9117301e00dbfb.jpg ">
<meta property="og:description" content="这里是描述">

我仔细检查过的事情:

  1. 我有正确的应用程序 ID。

  2. 当我使用 facebook 提供的 curl 命令执行该操作时,它可以正常发布。

  3. 我的 head 和 meta 标签正是我从 facebook 提供的对象“代码”中复制的。

提前致谢!

4

1 回答 1

0

我在这里和 Stackoverflow 上找到解决方案。

该问题通常是由服务器竞争条件引起的——应用程序无法同时处理两个 HTTP 请求。有时当用户执行一个操作并且应用程序立即调用一个 FB 打开图形请求时,可能还没有生成新的对象页面。

var openGraphUrl = '/me/' + OG_NAMESPACE + ':' + OG_ACTION + '?' + OG_OBJECT + '=' + siteURL;
var scrapeUrl    = '/?ids='+siteURL+'&scrape=true';
_.setTimeout(function(){
  FB.api(scrapeUrl, 'post',
    function(response) {
      if (!response || response.error) {
        console.log('scrap: '+response.error.message);
      } else {
        FB.api(openGraphUrl, 'post',
          function(response) {
        if (!response || response.error) {
          console.log('OG: '+response.error.message);
        } else {
          console.log('Successful! Action ID: ' + response.id);
            }
          }
        );
      }
    });
}
, 5000);
于 2013-10-10T08:20:17.250 回答