我正在从特定区域获取推文,但我的结果集非常不同。第一种方法是给定半径内的经度和纬度。这些是城市内的经度和纬度(拉合尔,PK)和半径5公里。 5公里是这个城市的一小部分。通过这个,我获得了大约60,000条推文。
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/上绘制这些以进行验证。是的,这些是拉合尔市的准确多边形。
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如何在后台工作以收集特定区域的推文,但我没有找到任何有用的材料。
答案 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, 确保引用任何包含空格或标点符号的名称。