12

我在使用 Facebook 的图形 API 时遇到问题。我得到一个“'og:type'属性是必需的,但不存在。” 此 URL 上的错误:http: //thatnewjoint.com/posts/logic-driving-ms-daisy-feat-childish-gambino(以及我博客上的所有其他 URL)。

og:type 元标记在 HTML 中,所以我不确定 Facebook 为何无法识别它。这是他们的图形 api 调用返回的内容:

{
   "id": "561280430667026",
   "created_time": "2014-08-28T20:35:18+0000",
   "is_scraped": false,
   "type": "website",
   "updated_time": "2014-08-28T20:35:18+0000",
   "url": "http://thatnewjoint.com/posts/eminem-superman-throwback-thursdays"
}

好像当我使用他们的 api(通过 koala ruby​​ gem)发布时,链接没有被刮掉?我会假设 og:type 错误导致了这种情况,但这里是该页面的元标记:

<meta property="og:url" content="http://thatnewjoint.com/posts/eminem-superman-throwback-thursdays" />
<meta property="og:title" content="Eminem - &quot;Superman&quot; [Throwback Thursdays] | ThatNewJoint | Premier Hip Hop Blog" />
<meta property="og:description" content="Classic from The Eminem Show. I&#39;ll be honest - the video is very strange, but the song is great."
<meta property="og:type" content="video">
<meta property="og:image" content="http://i3.ytimg.com/vi/8kYkciD9VjU/hqdefault.jpg" />
<meta property="og:video" content="http://www.youtube.com/v/8kYkciD9VjU?version=3&amp;autohide=1">
<meta property="og:video:type" content="application/x-shockwave-flash">
<meta property="og:video:width" content="1920">
<meta property="og:video:height" content="1080">

编辑更多信息:

好像如果我将 URL 放入FB Debugger中,我最初会得到这个“'og:type' 属性是必需的,但不存在。” 错误但是如果我然后单击“获取新的抓取信息”按钮,它将找到所有正确的信息。FB 是否有可能过早地尝试抓取 URL?似乎在他们的第一次通过时,他们只是没有正确地抓取 URL,但我不知道为什么。

4

2 回答 2

7

您需要使用 your-app-id(唯一的 Facebook 应用程序 ID)将此 HTML 元标记添加到您的 HEAD。只要确保换出“your-app-id”:

<meta property="fb:app_id" content="your-app-id">

要创建 FB 应用程序 ID,请访问此处:https ://developers.facebook.com/apps

并将您相同的唯一 Facebook 应用程序 ID 添加到 Facebook JS 并将其放置在尽可能靠近 HTML 正文标记的顶部。只要确保换出“your-app-id”:

<script>
  window.fbAsyncInit = function() {
    FB.init({
      appId      : '{your-app-id}',
      xfbml      : true,
      version    : 'v2.0'
    });
  };

  (function(d, s, id){
     var js, fjs = d.getElementsByTagName(s)[0];
     if (d.getElementById(id)) {return;}
     js = d.createElement(s); js.id = id;
     js.src = "//connect.facebook.net/en_US/sdk.js";
     fjs.parentNode.insertBefore(js, fjs);
  }(document, 'script', 'facebook-jssdk'));
</script>

还要放置您的网站 Facebook 按钮,并添加此代码。一定要换掉“你的唯一页面被喜欢”:

<div class="fb-like" data-href="your-unique-page-to-be-liked" data-layout="button_count" data-action="like" data-show-faces="true" data-share="false"></div>

最后在 Facebook Developers Dashboard 中,将您的 FB 应用程序从“开发人员模式”中取出,并将其置于“公共”模式。

有关 FB Open Graph 和元标记的更多信息,这里有 2 个有用的链接: 1. https://developers.facebook.com/docs/opengraph/using-objects 2. https://developers.facebook.com/docs/sharing /最佳实践

这应该够了吧。如果您需要更多帮助,请告诉我。

我更新了这个答案,感谢 kitdesai 指出 Facebook 对其 Graph API 版本有新的要求,目前最高为 v2.1

于 2014-08-29T21:43:00.470 回答
2

我遇到了同样的问题,我的问题是我为 og:url 设置的 URL 末尾有一个“/”,而我在 facebook 上发布的页面的 url 没有。

调试器刚刚告诉我 og:type 尚未设置。我认为问题在于 facebook 的解析器将不匹配视为重定向并感到困惑。

无论如何,让它们匹配解决了我的问题。

于 2015-05-19T01:53:34.483 回答