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界面似乎没有请求正确的区域设置.
加载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)
| 归档时间: |
|
| 查看次数: |
5364 次 |
| 最近记录: |