【问题标题】:Facebook meta tags scraped with locale not working使用区域设置抓取的 Facebook 元标签不起作用
【发布时间】:2011-09-30 18:34:31
【问题描述】:

我的网站是多语言的,我有一个类似 FB 的按钮。我想要不同语言的类似帖子。

根据 Facebook 文档,如果我使用元标记 og:locale 和 og:locale:alternate,抓取工具会通过参数“locale”和标题“X-Facebook-Locale”获取我的站点信息,但它是也不发送。(https://developers.facebook.com/docs/beta/opengraph/internationalization/)。所以帖子总是以 en_US 结尾。

有人遇到同样的问题吗?

【问题讨论】:

  • 您找到解决此问题的方法了吗?

标签: facebook facebook-like locale scraper


【解决方案1】:

我得到了这个工作。 The documentation 不是很详细;这是详细信息。

这是我的 Open Graph 语言环境标签:

<meta property="og:locale" content="en_US" />
<meta property="og:locale:alternate" content="en_US" />
<meta property="og:locale:alternate" content="fr_CA" />

非常重要: The documentation 使og:locale 看起来应该始终反映页面的“默认”区域设置。不是这种情况;这样做会阻止爬虫检索其他语言。 og_locale 必须反映页面的当前区域设置。 换句话说,如果爬虫(或用户)请求fr_CA 内容,请确保将og_locale 设置为fr_CA 在回复中。

og:locale:alternate 指定所有可能的语言环境。这样,无论刮板请求en_US还是fr_CA,它仍然知道两者都存在。

这是我要求 Facebook 抓取工具重新处理我的页面:

curl -d "id=https://apps.facebook.com/everydaybarilla/&scrape=true" https://graph.facebook.com

回复如下:

{
   "url": "http://apps.facebook.com/everydaybarilla/",
   "type": "website",
   "title": "Barilla\u2019s Every Day, Every Way Contest",
   "locale": {
      "locale": "en_us",
      "alternate": [
         "fr_ca"
      ]
   },
   "image": [
      {
         "url": "http://everydaybarilla.ssl.spidermarketing.ca/assets/img/thumbnails/5.png"
      },
      {
         "url": "http://everydaybarilla.ssl.spidermarketing.ca/assets/img/thumbnails/4.png"
      },
      {
         "url": "http://everydaybarilla.ssl.spidermarketing.ca/assets/img/thumbnails/3.png"
      },
      {
         "url": "http://everydaybarilla.ssl.spidermarketing.ca/assets/img/thumbnails/en-2.png"
      },
      {
         "url": "http://everydaybarilla.ssl.spidermarketing.ca/assets/img/thumbnails/en-1.png"
      }
   ],
   "description": "Barilla Canada is whisking one lucky winner and a guest off to Italy on an 8-day Italian culinary adventure for 2 in the Barilla Every Day, Every Way Contest!",
   "site_name": "Barilla\u2019s Every Day, Every Way Contest",
   "updated_time": "2012-04-16T17:59:38+0000",
   "id": "10150594698421968",
   "application": {
      "id": "317271281656427",
      "name": "Barilla\u2019s Every Day, Every Way Contest",
      "url": "http://www.facebook.com/apps/application.php?id=317271281656427"
   }
}

刮板正确返回默认语言环境的数据,但根据the documentation,刮板似乎也应该刮掉备用语言环境;不是这种情况。从上面的响应中可以清楚地看出,它看到了备用语言环境,但它不处理它们。

所以,我特地要求 Facebook 抓取工具处理我的页面法语

curl -d "id=https://apps.facebook.com/everydaybarilla/&scrape=true&locale=fr_CA" https://graph.facebook.com

这一次,我正确地看到了从爬虫到我的服务器的两个请求。第二个请求将X-Facebook-Locale 标头和fb_locale URL 参数正确设置为fr_CA。并且 POST 正确返回法语响应:

{
   "url": "http://apps.facebook.com/everydaybarilla/?fb_locale=fr_CA",
   "type": "website",
   "title": "Concours Tous les jours, de toutes les fa\u00e7ons de Barilla",
   "locale": {
      "locale": "fr_ca",
      "alternate": [
         "en_us",
         "fr_ca"
      ]
   },
   "image": [
      {
         "url": "http://everydaybarilla.ssl.spidermarketing.ca/assets/img/thumbnails/5.png"
      },
      {
         "url": "http://everydaybarilla.ssl.spidermarketing.ca/assets/img/thumbnails/4.png"
      },
      {
         "url": "http://everydaybarilla.ssl.spidermarketing.ca/assets/img/thumbnails/3.png"
      },
      {
         "url": "http://everydaybarilla.ssl.spidermarketing.ca/assets/img/thumbnails/fr-2.png"
      },
      {
         "url": "http://everydaybarilla.ssl.spidermarketing.ca/assets/img/thumbnails/fr-1.png"
      }
   ],
   "description": "Un heureux gagnant et son invit\u00e9(e) partiront \u00e0 destination de l\u2019Italie pour une aventure culinaire de 8 jours pour 2 personnes (valeur au d\u00e9tail approximative de 15 000 $)!",
   "site_name": "Barilla\u2019s Every Day, Every Way Contest",
   "updated_time": "2012-04-16T18:11:27+0000",
   "id": "10150594698421968",
   "application": {
      "id": "317271281656427",
      "name": "Barilla\u2019s Every Day, Every Way Contest",
      "url": "http://www.facebook.com/apps/application.php?id=317271281656427"
   }
}

成功了!

当然,经过所有这些努力,当我访问法语 Facebook.com 并发布此 URL 时,状态框已填充... 英文数据。 Facebook 自己的界面似乎没有配置为请求正确的语言环境。

因此,即使付出了所有这些努力,似乎什么也没有完成(通过 Facebook 翻译应用程序翻译我的字符串也不起作用,所以我想我不应该感到惊讶)。

不过,它确实回答了这个问题。也许其他人可以确定为什么 Facebook.com 界面似乎没有请求正确的语言环境。

【讨论】:

  • 我遇到了和你基本相同的问题,但从来没有让 Facebook 在其他语言环境中抓取,然后是 en_US。我昨天在斯德哥尔摩的 Facebook Developer Garage 遇到了一位来自 Facebook 的开发人员。我解释了这个问题,他的回答是:你需要知道的一切都在文档页面中。你不需要做任何魔法。他在两个月前尝试为 OG 对象添加多语言支持并成功。他唯一的建议是再试一次并报告所有错误。他们会很快回复这些错误报告,但我没有时间或精力报告错误:(
  • 更新了文档,让您的重点更加清晰
  • 你好,我和你有同样的问题。 经过所有这些努力,当我访问法语 Facebook.com 并发布此 URL 时,状态框已填充... 英文数据。您是否找到任何破解它的提示?
  • 对不起,我好像记得当时放弃了!尽管公平地说,Facebook 多年来已经做了 的工作,以便在国际化方面做得很多 - 希望其他人可以帮助你。
  • 如何在 Facebook 中查看结果?如何将我的语言环境伪装成元配置语言环境以查看真实结果而不是 json 响应?我试图在浏览器中切换语言,但它似乎不起作用。
【解决方案2】:

Facebook 的区域设置处理完全不一致

在与开放图形语言环境搏斗数周后,我设法发布了基于用户语言环境更改文本的内容。但是对于链接,我仍然无法获得预期的结果。

以下是我的观察:

og:locale 在调试器中默认显示我实际的 facebook 语言环境。单击 og:locale:alternate 链接会更改对象属性以及界面语言。我认为这是设计使然。

“原始打开图形文档信息”部分(未将 fb_locale 附加到输入 URL)显示默认数据。如果设置了 fb_locale 并且大小写混合,则 Raw Open Graph 文档信息部分根据参数进行更改。 “对象属性”部分仍显示基于实际/选定区域设置的数据。 如果 fb_locale 为小写,则返回 'Error parsing input URL, no data was scraped.'

附加到调试器(不是输入)URL 的“locale”参数也是如此。如果它是混合大小写格式,则对象属性部分和界面语言会更改。但是,当我以小写形式传递它时它什么也不做(返回默认/当前语言环境)

令人惊讶的是,graph api 的作用相反:

  1. 当我请求使用 php sdk 重新抓取时

    1. 仅当 locale 以小写形式传递时,内容才会更新,但是(!)在这种情况下,返回的响应没有 locale:locale 参数,如果存在 X-Facebook 语言环境标头或 fb_locale 参数,则会设置该参数.

      响应中的所有数据都采用默认语言环境。但是,墙上的帖子已更新,并且根据我的 facebook 区域设置正确显示了文本。

    2. 如果语言环境以混合大小写格式传递 - 正如文档所定义的那样 - 请求返回“不支持的发布请求”错误。 当使用 php CURL 函数而不是 Facebook php SDK 的 api 调用时,en_GB 是一个例外,其中响应包含 fb_locale 和本地化(英语)内容,但是,对象属性/墙贴没有更新,en_GB 也没有。对于其他语言,返回“未支持的发布请求”。

  2. 当我使用对象的 id(在调试器页面底部找到的 id - 通过从 'link_stat' 表中查询 'cmets_fbid' 字段)而不是 URL 时:

    1. 对于混合大小写的语言环境,响应包含所有语言环境的正确文本和 fb_locale,但它们都没有更新。 og:updated_time 在调试器中没有改变,但在https://graph.facebook.com/[object ID 上更新]

    2. 使用小写语言环境,结果与 1.1 中描述的相同。

  3. 在图形查询中,行为再次与上述相反: 当我尝试查询https://graph.facebook.com/[objectID]?locale=en_GB, 使用混合大小写的语言环境,它返回预期的结果, 对于小写语言环境,它返回没有设置语言环境(仅语言环境:备用)标签的默认版本。 :-o

图形 API 端点和调试器是否有可能以不同的方式处理语言环境,从而无法从两者获得相同的响应?

顺便说一句,使用小写语言环境,我设法在提要上发布了本地化的帖子,其中文本根据用户的语言环境显示。

现在我的问题是所有链接都指向相同的规范 URL,没有任何特定于区域设置的信息,因为 - 正如萨尔瓦多所说 - 这样做会创建不同的对象。在这里查看我的帖子: how to get the locale of a facebook user clicking on a localised object's link?

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,直到最终通过将元标记(og:locale 和 og:locale:alternate)中的所有语言环境值设置为小写来让它工作。

    检查一下: http://developers.facebook.com/bugs/309825175774568?browse=search_5033cc14f42016961266549

    在这样做并重新抓取之后,转到 Facebook 并将语言设置更改为支持的区域设置将正确发送 X-Facebook-Locale 和 fb_locale,并为我触发所需的结果。

    顺便说一句:将用户区域设置为 og:locale:alternate 中未列出的区域不会发送 header/get 参数。

    【讨论】:

      【解决方案4】:

      您在加载 Javascript SDK 时指定了什么语言?很容易忽略这一点。'

      默认的是en_US,见js.src这一行

      <div id="fb-root"></div>
      <script>(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/all.js#xfbml=1&appId=127211380649475";
        fjs.parentNode.insertBefore(js, fjs);
      }(document, 'script', 'facebook-jssdk'));</script>
      

      【讨论】:

        【解决方案5】:

        我也有同样的问题。

        Like 按钮仅向 Facebook 发送他自己的属性 data-href="www.example.com/yourpage",而不是 og 元标记值。然后 Fb 将 og 元标记刮入您的页面,并从中创建 Wall 帖子。
        所以实际上帖子总是使用你的页面默认语言。

        以用户语言发布帖子的一种解决方案是:

        • ?lang=userlanguage 添加到Like 按钮的data-href url
        • 让您的页面能够获取userlanguage 并在适当的翻译中显示元标记 og:title 和 og:description (例如使用 php $_GET)

        因此,Facebook 会以用户语言抓取您的页面,并创建一个语言环境帖子。

        不幸 Fb 为每个不同的 url ?lang=userlanguage1userlanguage2...创建一个对象,每个对象都有自己的粉丝列表。
        因此,您页面的每一个翻译都会有他的语言环境粉丝。
        :-(


        类似问题:Open Graph Localization

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-28
          • 2011-07-20
          • 1970-01-01
          • 1970-01-01
          • 2018-12-05
          相关资源
          最近更新 更多