是否有可能专门收集提及国家名称的推文?我只收集来自美国的推文。
我知道Twitter允许我们从有效载荷中访问context_annotations
,并且context_annotations
识别推文是否提到了一个国家。这里,https://developer.twitter.com/en/docs/twitter-api/annotations/overview,他们提到countries
是context annotations
中的domain number 160。
我想知道是否有可能专门收集提到国家名称的推文。我不熟悉Tweepy,所以我终于设法获得来自美国的推文,但仍然无法指定代码,仅获取提及国家的推文。
这是我当前的代码:
client = tweepy.Client(bearer_token=bearer_token)
# Specify Query
query = ' "favorite country" place_country:US'
start_time = '2022-03-05T00:00:00Z'
end_time = '2022-03-11T00:00:00Z'
tweets = client.search_all_tweets(query=query, tweet_fields=['context_annotations', 'created_at', 'geo'],
place_fields = ['place_type','geo'], expansions='geo.place_id',
start_time=start_time,
end_time=end_time, max_results=10000)
# Prepare to write to csv file
f = open('tweetSheet.csv','w')
writer = csv.writer(f)
# Write to csv file
for tweet in tweets.data:
print(tweet.text)
print(tweet.created_at)
writer.writerow(['0', tweet.id, tweet.created_at, tweet.text])
# Close csv file
f.close()
has:geo:
一种方法是过滤具有国家属性的推文。
你可以在你的查询中使用has:geo:
运算符,而不是Twitter文档中看到的place_country:
运算符。这样你就得到了所有地理标记的推文,每个地理标记的推文都有一个国家属性。
包括
另一种方法是检查tweet是否有includes
属性,如果没有地理属性则为空:response.includes != {}
。如果需要的话,要获得国家代码,那么response.includes['places'][0].country
就可以了。在推特文档中没有很好的记录,所以这里是推特文档中找到的所有地理属性:
twt_geo = 1602695447298162689
twt_no_geo = 1602719044645408768
response = client.get_tweet(
twt_geo, place_fields=['country', 'country_code', 'place_type', 'name'], expansions=['geo.place_id'])
if(response.includes != {}):
print(response.includes)
print(response.includes['places'][0].country)
print(response.includes['places'][0].country_code)
print(response.includes['places'][0].place_type)
print(response.includes['places'][0].name)
print(response.includes['places'][0].full_name)
print(response.includes['places'][0])
print(response.data.geo)
print(response.data.geo['place_id'])
else:
print(response.data.id)
标签
如果您暗示在推文中过滤国家名称作为国家提及的标签,您可以使用response.data.text
提取推文文本并比较您想要过滤的国家名称。