为什么这两个API(twitter geo / search API)会返回不同的结果集?

时间:2018-06-09 22:46:54

标签: python twitter geolocation geocoding tweepy

我正在从特定区域获取推文,但我的结果集非常不同。第一种方法是给定半径内的经度和纬度。这些是城市内的经度和纬度(拉合尔,PK)和半径5公里。 5公里是这个城市的一小部分。通过这个,我获得了大约60,000条推文。

方法1

import tweepy
consumer_key= 'xxxxxxxxxxxxxx'
consumer_secret= 'xxxxxxxxxxxxx'
access_token='xxxxxxxxxxxxxxx'
access_token_secret='xxxxxxxxxxxxxxxxxxxx'
api = tweepy.API(auth,wait_on_rate_limit = Truewait_on_rate_limit_notify= True)
public_tweets = tweepy.Cursor(api.search, count=100, geocode="31.578871,74.305184,5km",since="2018-06-09",show_user = True,tweet_mode="extended").items()
for tweet in public_tweets:
    print(tweet.full_text)

第二种方法,我使用twitter geo search api,通过查询Lahore,粒度=" city"。现在我正在拿整个城市的推文。但现在我只收到1200条推文,只有一天。我也是在过去7天内获得的,只获得了15,000条推文。这是一个非常大的区别,整个城市只给了我1200条推文,同一个城市的一小部分给了我超过60,000条推文。我还打印地点ID以验证我获得了准确的多边形。这些是多边形( 74.4493870,31.4512220 74.4493870,31.6124170 74.2675860,31.6124170 74.2675860,31.4512220)我在https://www.keene.edu/上绘制这些以进行验证。是的,这些是拉合尔市的准确多边形。

方法2

import tweepy
consumer_key= 'xxxxxxxxxxxxxx'
consumer_secret= 'xxxxxxxxxxxxx'
access_token='xxxxxxxxxxxxxxx'
access_token_secret='xxxxxxxxxxxxxxxxxxxx'
api = tweepy.API(auth,wait_on_rate_limit = Truewait_on_rate_limit_notify= True)

places = api.geo_search(query="Lahore", granularity="city")

for place in places:    
    print("placeid:%s" % place)
public_tweets = tweepy.Cursor(api.search, count=100,q="place:%s" % place.id,since="2018-06-09",show_user = True,tweet_mode="extended").items()
for tweet in public_tweets:
    print(tweet.full_text)

现在先告诉我为什么结果会有很大差异。我正在使用标准的Api版本。

其次,请告诉我这些(api)如何获取推文。因为不到1%的推文被地理标记,并且并非每个用户在该配置文件中给出确切的城市和国家/地区。一些用户提到像火星和地球等。所以这些api如何工作来获取特定区域的推文。要么在半径范围内搜索,要么通过查询城市/国家。我研究了twitter api docs和tweepy docs来研究这些api如何在后台工作以收集特定区域的推文,但我没有找到任何有用的材料。

1 个答案:

答案 0 :(得分:3)

第一种方法有更多结果的原因是,如果推文没有任何地理信息,那么使用地理编码进行搜索将会回落到配置文件上(正如您已经猜到的那样),并尝试将其解析为lat / long。

请参阅此处的文档:

https://developer.twitter.com/en/docs/tweets/search/guides/standard-operators.html

  

地理定位:搜索运算符“near”不可用   API,但有一种更精确的方法来限制给定的查询   使用模板指定的geocode参数的位置   “纬度,经度,半径”,例如,“37.781157,-122.398720,1mi”。   进行地理位置搜索时,搜索API将首先尝试   在查询的地理编码中查找具有纬度/经度的推文   如果没有成功,它将尝试查找由创建的推文   用户的个人资料位置可以反向地理编码为纬度/经度   在查询的地理编码内,意味着可以接收推文   其中不包括纬度/经度信息。

另一方面,使用place_id搜索似乎正在寻找那个确切的位置。这是基本的api调用语法: https://developer.twitter.com/en/docs/tweets/search/guides/tweets-by-place

地方api的工作方式与地理编码中的lat / long非常不同。下面的页面将介绍两种类型的位置数据之间的差异,这两种位置数据可以与推文相关联:

https://developer.twitter.com/en/docs/tutorials/filtering-tweets-by-location

  

特定于推文的位置信息分为两大类:

Tweets with a specific latitude/longitude “Point” coordinate
Tweets with a Twitter “Place” (see our blog post on Twitter Places: More Context For Your Tweets and our documentation on Twitter
     

geo对象了解更多信息。)

     

...

     

Twitter推文“Place”包含一个多边形,由4组成   lon-lat坐标定义了一般区域(“Place”)   用户正在发布推文。此外,该地方将有   显示名称,类型(例如城市,社区)和国家/地区代码   对应于Place所在的国家/地区   字段。

此外,本节:注意复数用法Place IDs

  

位:

     

按名称或ID过滤特定地方。发现“地方”   与特定区域相关联,使用Twitter的reverse_geocode   REST API中的端点。然后使用您找到的地点ID   地点:运营商跟踪包含特定地点的推文   引用。如果您使用地名而不是数字ID,   确保引用任何包含空格或标点符号的名称。