Twitter宝石得到推文的位置

时间:2017-04-20 03:30:27

标签: ruby-on-rails ruby twitter

我一直在搞乱使用twitter rails API而且我在收到推文的位置时遇到了麻烦。这似乎总是失败而且不会返回任何东西。我也试过做tweet.coordinates,但它似乎没有用。

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

编辑:

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.location,但这不是很准确。输出只有很多纽约,但也有很多来自其他城市,所以当其他城市不存在/远离纽约时,我真的不知道Twitter如何获得这些查询。我错过了另一个位置字段吗?我还注意到输出的数量不等于推文数组的大小。

https://pastebin.com/eW18Ri2S

这是一个示例输出

1 个答案:

答案 0 :(得分:0)

正如twitter gem文档中所述,您应该使用place?geo?方法。

  

空对象

     

在版本4中,您希望返回Twitter对象的方法   如果该对象丢失,则返回nil。这可能导致了   一个NoMethodError。为了防止此类错误,您可能已经介绍过了   检查响应的真实性,例如:

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
  

在第5版中,所有这些   方法将返回Twitter::NullObject而不是nil。这应该   阻止NoMethodError,但如果您可能会导致意外行为   有正确的检查,因为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