昨日導入した、jquery.neosmart.fb.wall ですが、2点ほど問題がありました。その1つはセキュリティ上の問題でもあります。

1つ目は、25人を超える「いいね!」がある投稿に対して、「いいね!」数が25までしか表示されないことです。これは、Graph API がデフォルトで25しか「いいね!」した人を表示しないのが原因とのことで、jquery.neosmart.fb.wall.js の61行目を、

url: graphURL+o.id+'/'+type+'?limit='+o.max+'&likes.limit=200&access_token='+o.accessToken',

のように、likes.limit=いいね!の上限数 というパラメータを追加することで解決しました。(参考:永遠少年症候群 | fb.wallメモ最終版

2つ目は、Facebook のアクセストークンを取得してこのスクリプトに設定するのですが、このアクセストークンを HTML か JavaScript に記述するため、誰にでもアクセストークンが見えてしまうこと。アクセストークンがあれば Facebook ページの非公開にしている情報までもが取得できてしまいます。

開発を終了した fb.wall のサイトにも「安全な方法でアクセストークンを提供することができなかった」といった内容の記述があります。これが開発終了の理由なんですね。

Since 2010 Facebook changed their Graph API a lot of times, they added server request limits and the need of access tokens. With a pure JavaScript solution it was not possible to provide access tokens in a safe way. Therefore we developed neosmart STREAM.

後継である neosmart STREAM を使用すればこの問題は解決しますが、先のブログ記事で書いたように今ひとつ使えないので、とりあえず fb.wall を使用しています。

何か解決方法がないものかとググってみたら、アクセストークンを CGI に格納して外部から見えなくするというカスタマイズをされた記事があり、早速この改造されたスクリプトを利用させていただきました。
facebookのウォールをサイトに表示する jquery.fb.wall in perl – BSDあれこれ

で、スクリプトを入れ替えたら、再び「いいね!」数の上限が25に戻ってしまいました。当然ですが。

改造された jquery.neosmart.fb.wall.js の該当部分の記述は、

url: graphURL+'?id='+o.id+'&type='+type+'&limit='+o.max,

ですが、これに &likes.limit=200 を追記しても変化はありません。

色々と書き替えたりしてみましたが、&likes.limit=200 を書き加えるべきファイルは、アクセストークンを格納している get_wall_data.cgi でした。19行目を、

$graphURL .= $id . '/' . $type . '?limit=' . $limit . '&likes.limit=200&access_token=' . $access_token . '&callback=' . $callback;

とすることで、再び25を超える「いいね!」数が表示できるようになりました。