1. geoがnullなツイートがほとんど
検索結果に含まれるツイートは、ほとんど(95%以上)geo要素がnullで、位置情報が含まれていないものばかり。
では、どうやって位置情報がプロットできるツイート数を増やすか。
まずは、プロフィールに入力されている住所をジオコードしたり、「iPhone:35.xxx, 132.xxx」などの文字列を自分でパースして緯度経度を取得したりする方法が考えられる。手間だが、これを行えば、100件中10件ほどは位置情報がプロットできるツイートになる。
次に、検索結果は最大約1500件取得できるので、1ページあたり最大100件で、ページナンバーの値を1から15まで変えながら、つまり15回リクエストを発行すれば、位置情報がプロットできるツイート数を増やせるだろう。しかし、この場合はrate limiting(IPベースのリクエスト制限回数)をオーバーしないか、注意が必要だ。
2. 検索結果が必ずしも指定した条件に合致していない
検索条件にgeocode及び半径 N km と指定しても、指定条件に当てはまりそうにないツイートが検索結果に入ってくる。検索対象が日本のどこかの場合は、現住所に日本と書かれているユーザのツイートも検索結果に含むというのが、Twitter側の仕様のようだ。
3. 検索結果の並び順が指定できない
ツイート日の降順に検索結果は並んでいる。指定したgeocodeに近い順には並んでいないので、そのようなリストを作りたかったら自分でソートする必要がある。
4. 検索結果が安定しない
同じクエリーを投げても、検索するたびに検索結果が変わる。なぜだかは分からない。
結論としては、「TwitterのSearch APIで、指定した緯度経度から半径 N km内のツイートを全て取得する」 ことは、簡単ではないということだ。
rate limitingを上回らないように気をつけながら、独自のパーサーなども絡ませて位置情報をプロットできるツイート数を増やして、使っていくことになる。
rate limitingを気にしたくなければStreaming APIを使う手もあるが、それも決してバラ色の解決策ではないのだ。
明日に向かって昇龍拳: TwitterのStreaming APIでlocationsを指定する場合の注意点
あー。やっぱり結論としては
返信削除1. geo not nullなツイートのみの取得でよし!とする
2. Streaming APIを使う
3. ソートなど必要な拡張機能は独自実装
という感じですかね。
今のところはそういう結論ですねー。
返信削除