昨日、Facebook の「いいね!」数は全記事で共有できる? - Life like a clown と言う記事を投稿したところ、Twitter で以下のようなリプライを頂きました。
@tt_clown API経由で取得しても同じとのことですので、ヒントを差し上げます。OGP
— simplestyle (@simplestyle) 2013, 11月 18
OGP の設定に依存すると言う事だったので、まず、OGP のメタ情報を含めて内容のまったく同じ HTML(コピペ) main.html、sub.html、および og:url のメタ情報のみ異なる sub2.html の 3 ページを作成し、次に、main.html にだけ 自分で「いいね!」ボタンを押してみました。その結果が以下になります。
このように og:url のメタ情報が同一である main.html、sub.html はともに「いいね!」数が 1 となり、og:url の異なる sub2.html はゼロのままである事が分かります。og:url は、canonical 属性のようなものでしょうか。
これは、API 経由でも同様の動作を示すようです。ただ、API からのレスポンスを見ると *_count に関しては og:url に指定された URL (main.html) に対する値が返ってくるのですが、url、normalized_url に関してはともに sub.html への URL が記載されており、Facebook の API からだけでは正規化された URL(og:url に指定されている URL)を知る事はできないようです。
[{ "url":"http:\/\/cielquis.net\/trash\/ogptest\/sub.html", "normalized_url":"http:\/\/www.cielquis.net\/trash\/ogptest\/sub.html", "share_count":0, "like_count":1, "comment_count":0, "total_count":1, "click_count":0, "comments_fbid":null, "commentsbox_count":0 }]
そんな訳で、正規化された URL の情報を取得するには、実際に該当 URL の HTML を取得するしかないのかなぁと言う感触です。ただ、Facebook の API は「いいね!」数の取得方法一つを取ってみても何通りかの方法があるようなので何か方法があるのかもしれません(上記は restserver.php 経由ですが、fql.query からだと何か取得できるかも?)。
Facebook 難しい。