我的网站是多语言的,我有一个类似 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/