Facebook 元标记与区域设置不工作

标签 facebook facebook-like locale scraper

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

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

有人遇到同样的问题吗?

最佳答案

我得到了这个工作。 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 应该始终反射(reflect)页面的“默认”区域设置。不是这种情况;这样做会阻止爬虫检索其他语言。 og_locale 必须反射(reflect)页面的当前区域设置。换句话说,如果抓取工具(或用户)请求 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 抓取工具处理我的页面en français:

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

这一次,我正确地看到了从爬虫到我的服务器的两个请求。第二个请求将 X-Facebook-Locale header 和 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 元标记与区域设置不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7614603/

相关文章:

ruby-on-rails - 需要在 Mailer View 中将语言环境添加到 link_to 语句

macos - 启动 vim 时的错误信息 : "Failed to set locale category LC_NUMERIC to en_CH" (or en_BR, en_RU & LC_TIME, LC_COLLATE, LC_MONETARY, LC_MESSAGES)

java - Spring Social Facebook - 单个 Facebook 实例

facebook - 有没有办法通过 Graph API 戳?

java - 使用 API(Java?)在 Facebook 粉丝页面上发布状态

html - 如何制作一个只是链接而不是 iFrame 的 Facebook "Like"按钮?

php - Facebook 连接 : unregister users with PHP library

mysql - 页面上显示相同计数的多个类似按钮,iFrame 问题?

facebook - 理解多个类似按钮/框和 Facebook 页面

django - 将 gettext 的 .mo 文件保存在 repo 中的好处