2017-04-20 11 views
0

私はtwitter rails APIを使いこなしていて、ツイートの場所を知りません。これは常に失敗して何も返さないようです。私もtweet.coordinatesをやってみましたが、うまくいきません。twitterの場所を取得する

tweets = client.user_timeline("gems") 
puts "size : #{tweets.size}" 
tweets.each do |tweet| 
    if(tweet.place) 
     puts tweet.place.attributes 
    end 
end 

私は次のtwitter gemを使用しています。 https://github.com/sferik/twitter

EDIT:

tweets = client.search("a", geocode: "40.7128,-74.0059,50mi").take(100) 
tweets.each do |tweet| 
    if tweet.place? 
     puts tweet.place.full_name 
    elsif tweet.geo? 
     puts "geofound" 
    elsif tweet.user.location? 
     puts tweet.user.location 
    end 

だから私はジオコードを持っているツイートを探して上記のコードを試してみましたが、それらのどれもが、場所や地理フィールドを持っていないようだと、それは常にtweet.userを返します。非常に正確ではありません。出力にはニューヨークの多くがあるだけでなく、他の都市からの集まりもあるので、他の都市が存在しない/ニューヨークから遠く離れているときに、Twitterがこれらのクエリをどのように受け取ったかはわかりません。別の場所フィールドがありませんか?私はまた、出力の数がツイート配列のサイズと等しくないことに注意しました。

https://pastebin.com/eW18Ri2S

ユーザーplace?またはgeo?方法、twitter宝石のドキュメントにすべきで述べたようにここでの出力例

+0

を、あなたの出力は何ですか?サイズが正しく表示されていますか?ループ本体の最初の行に 'puts tweet.inspect'を入れて、ツイートがあるかどうかを調べることができます。 – mahemoff

+0

サイズは20です。私はテキストを出力しようとしましたが、それらはすべて問題ありません。 –

+0

つぶやきに実際に地理メタデータが含まれていますか?すべてのつぶやきがそうでない - 適切なアカウントを選択する必要があります。 Twitterの出力例でも、場所はnullです。https://dev.twitter.com/rest/reference/get/statuses/user_timeline – mahemoff

答えて

0

です。ヌルは、バージョン4では

オブジェクト、そのオブジェクトが欠落していた場合、あなたはTwitterのオブジェクト を返すことを期待するメソッドはnilを返します

。これにより、 がNoMethodErrorになっている可能性があります。このようなエラーを防ぐために、あなたは例えば、応答のtruthinessため チェックを導入していることがあります。バージョン5では

status = client.status(55709764298092545) 
if status.place 
    # Do something with the Twitter::Place object 
elsif status.geo 
    # Do something with the Twitter::Geo object 
end 

を、そのようなすべての 方法はTwitter::NullObject代わりのnilを返します。これにより、NoMethodErrorを防ぐことができますが、 に真偽チェックがあると、予期しない動作が発生する可能性があります。偽とnilを除いてRuby では真実です。このような場合のために、今 方法が述語されています

status = client.status(55709764298092545) 
if status.place? 
    # Do something with the Twitter::Place object 
elsif status.geo? 
    # Do something with the Twitter::Geo object 
end 
+0

私はあなたが提案したことを試しましたが、私はまだいくつかの問題を抱えています。私は検査を行い、彼らはすべてツイッターIDを持っているようだ。 –

関連する問題