私はこれを機能させました。ドキュメントはあまり詳細ではありません。ここに詳細があります。
これが私の 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" />
非常に重要: ドキュメント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"
}
}
スクレイパーはデフォルトのロケールのデータを正しく返しますが、ドキュメントによると、スクレイパーは代替ロケールもスクレイピングする必要があるようです。これはそうではありません。上記の応答から明らかなように、代替ロケールが表示されますが、それらは処理されません。
そこで、Facebook スクレイパーに私のページをen françaisで処理するよう具体的に依頼します。
curl -d "id=https://apps.facebook.com/everydaybarilla/&scrape=true&locale=fr_CA" https://graph.facebook.com
今回は、スクレイパーからサーバーへの 2 つのリクエストが正しく表示されます。2 番目の要求では、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 インターフェイスが正しいロケールを要求していないように見える理由を誰かが判断できるでしょう。