使用区域设置刮掉的Facebook元标记无效

Alo*_*Net 13 locale facebook scraper facebook-like

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

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

谁有同样的问题?

Aar*_*ams 18

我得到了这个工作.文件不是很详细; 这是细节.

以下是我的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" />
Run Code Online (Sandbox Code Playgroud)

非常重要: 文档似乎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
Run Code Online (Sandbox Code Playgroud)

这是回复:

{
   "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"
   }
}
Run Code Online (Sandbox Code Playgroud)

刮刀正确返回默认语言环境的数据,但根据文档,刮板似乎也应该刮掉备用语言环境; 不是这种情况.显然,从上面的响应中可以看到备用语言环境,但它不会处理它们.

所以,这是我特意要求Facebook刮刀处理我的页面enfrançais:

curl -d "id=https://apps.facebook.com/everydaybarilla/&scrape=true&locale=fr_CA" https://graph.facebook.com
Run Code Online (Sandbox Code Playgroud)

这一次,我正确地从刮刀中看到了对我的服务器的两个请求.第二个请求将X-Facebook-Locale标头和fb_localeURL参数都正确设置为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"
   }
}
Run Code Online (Sandbox Code Playgroud)

成功!

当然,经过所有这些努力,当我去法国Facebook.com并发布此URL时,状态框将填充...与英文数据.似乎Facebook自己的接口未配置为请求正确的区域设置.

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

它仍然回答了这个问题.也许其他人可以确定为什么Facebook.com界面似乎没有请求正确的区域设置.

  • 嗨,我和你有同样的问题.**经过所有这些努力,当我访问法国Facebook.com并发布此URL时,状态框将填充...带有英文数据.**您是否找到任何提示来破解它? (3认同)
  • 更新了文档,使您的重点更加清晰 (2认同)

DMC*_*MCS 0

加载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>
Run Code Online (Sandbox Code Playgroud)