2016-04-06 5 views
0

私は簡単に使用してつぶやきテキストとユーザー情報を取得することができますTwitterのAPIさえずる場所

var tweet = data.statuses[index]; 
tweet.text, tweet.user.screen_name etc 

しかし、私はつぶやき(すなわち、それはから送信された場所)の位置情報を取得するように見えることはできません。それはいつもヌルのようですか?

おかげ

答えて

1

まさにこの問題は、以下の論理であると私の解決策:そのロジックで

function setLocation(tweet){ 
     var location = null; 

     // Try coordinates first, as it gives the most concrete data. 
     if (tweet.coordinates) { 
      location = (tweet.coordinates.coordinates).toString(); 
     } 
     // Next up, try tweet.place, which could also have a full street address, and will have at least the full_name and country, if not null 
     else if (tweet.place) { 
      var street = ""; 
      if (tweet.place.attributes.street_address){ 
       street += tweet.place.attributes.street_address + ", "; 
       if (tweet.place.attributes['623:id']){ 
        street += tweet.place.attributes['623:id'] + ", "; 
       } 
      } 
      location = street + tweet.place.full_name + ", " + tweet.place.country; 
     // Lastly, if all else fails, grab the user location. This data is pretty poor, but is at least something. You may not want it, depending on your usage. 
     } else if (tweet.user && tweet.user.location){ 
      location = tweet.user.location;   
     } 
     return location; 
    } 

は、私が使用可能な場所のための3つの異なる場所で探しています:tweet.coordinatestweet.placeとそのサブフィールド、およびtweet.user.location。これらのフィールドのすべてがJSON形式の完全なツイートで表示されますが、Twitterは非常に明示的です。は必ずしもである必要はありません。したがって、フィールド/値の有無を確認する文はすべてifです。

まだ、約1/3~1/2の時間は、単にツイートの位置データがありません。あなたはそれについて何もできません。上記のコードでは、場所がない場合はnullを返します。あなたのロジックが、絶対にの位置データを持っていなければならない場合は、のツイートごとに&geocode=trueをクエリ文字列に入れることができます。これにより、Twitterは、応答していないツイートを除外します。私はこれを自分で使っていないので、それがどれほどうまくいっているか保証することはできません。上記の関数の経験に基づいて1%未満であると推定されるほとんどのつぶやきはジオコーディングを有効にしているため、geocode=trueを使用すると、応答データの量が大幅に削減されることがあります。

免責事項:tweet.coordinatesを自分のコードに優先順位付けしてから、ユーザーがプロファイルに記載しているものであればtweet.user.locationになるまで、次に信頼性の高いデータを提供するフィールドを確認し続けます。これは何でもよい。時には「In Outer $ paaaaaaace」のようなものがありますが、正確ではないかもしれませんが、ほとんどのアプリにとっては間違いありませんので、買い手はuser.locationと注意してください。あなたのロジックを満たすために厳しい制限を適用する必要があります。

最後に、クラリファイヤー:文字列を連結して文字列として返します。これは互換性のためです。 (「座標」と「タイプ」のプロパティを持つオブジェクト)、または他のオプションの1つを指定することもできますが、同じツイートから次のツイートまでの分散は大きいです。奇妙なもの、まったくないものは、ツイートに来る

を参照してくださいつぶやくの詳細については、を参照してください。場所がどこから得られるかを明確にするのに役立ちます。ここに別のサイトがあり、詳細tweet places.

関連する問題