facebookの特定の緯度経度周辺のスポット情報を取りまくる方法

facebookのスポット情報(チェックイン出来る場所)を網羅的に取り出したいなーと思ったんですけども(しつこくてすみません)、どうやら一筋縄ではいかないようで。調べた結果と便利ツールを書いておきます。こちらの記事もご参考まで。

特定の場所周辺の検索

前の記事にも書いたように、以下のようにすることで特定の緯度経度周辺のスポット情報を取って来ることが出来ます。

この例だとサンシャイン通りスターバックスを中心に池袋西武や池袋駅コナミスポーツクラブ池袋などなど。

じゃあ、このAPIで半径をぐわっと広げればAPI一発で世界中のスポット取って来れるんじゃねーのと思ったんですけども、もちろんそんなことはなくて。半径を広げ過ぎると以下のようなエラーが出ます。(2012/5/1現在)

{
  "error": {
    "message": "(#606) Distance must be less than 50000m for place queries.", 
    "type": "OAuthException", 
    "code": 606
  }
}

distanceは50kmまでしかダメよ、と。ちなみにlimitの方はいくらでもいけるのかも。沖縄周辺で試したら498件までまとめてヒットしました。

と、調べていくうちに分かったんですが、以下のリクエストの結果はどちらも同じです。

ざっくり言って約2km以内のスポットまでしか検索には反映されないようです。恐らく緯度経度により違うと思います。

じゃあ、全部のスポットを取るには?

と、言うことは日本全国を網羅的に取るためには、約半径2kmの円で覆い尽くせば良いわけです。つまり、

  • 380,000 / (2^2 * 3.14) = 30,254
    • (日本の総面積 / 半径2kmの円の面積)

と言うことで、日本全部覆うのに3万回もリクエスト投げるのか。。ちなみに沖縄だけだと約1400km^2のようなので、円は112個でいいことになりますね。実際は円で埋め尽くすことは幾何学的に無理なので、多少オーバーラップさせるためにそれ以上必要だと思います。円なら市松模様的に配置するのが一番効率いいはずですね。

場所にもよるけど、大体1度が100kmなので、半径2kmってことは小数点第2位が1kmに相当するので

  • 35.6[0-9], 139.7[0-9]

的な感じでリクエストしまくれば、まぁ取れそう。ちょっとやってみるので出来たらどこかにアップします。

※ここまで書いてて思ったけど、searchのdistanceってほんとに円の半径なのかな?もしかすると四角形の辺の長さかも…検証する元気が無いので誰か知ってたら教えて下さい(四角だったら計算楽でいいなー。)

便利ツール

上のようなことを考えるのに以下のツールが便利でした。世の中色んなツールがあってすばらしい。