我正在尝试在twitter API中搜索具有给定文本的tweet。我只想在美国完成推文(认为bio_location不是地理编码,因为大多数人没有地理编码)。我真的很想如何使用Tweepy和twitter包来实现这一目标。
place = api.geo_search(query="USA", granularity="country")
place_id = place[0].id
for tweet in tweepy.Cursor(api.search,q= "place:%s" % place_id, count=100,
text = "SOME TEXT",
lang="en",
since="2018-2-21").items():
print (tweet.created_at, tweet.text, tweet.coordinates)
csvWriter.writerow([tweet.created_at, tweet.text.encode('utf-8'), tweet.place])
我希望我的输出是这样的:
tweet日期位置
一些推文2019年2月23日在阿拉巴马州
我该如何完成?我需要每个州的经/纬/半径清单吗?当然有人做过吗?
答案 0 :(得分:0)
在我的一个项目中,有一些我用来解决此问题的代码。这会尝试在tweet元数据内的几个不同位置中找到位置数据,如果找不到则返回None
。
states = {
'AL': 'Alabama',
'AK': 'Alaska',
'AZ': 'Arizona',
'AR': 'Arkansas',
'CA': 'California',
'CO': 'Colorado',
'CT': 'Connecticut',
'DE': 'Delaware',
'DC': 'District of Columbia',
'FL': 'Florida',
'GA': 'Georgia',
'HI': 'Hawaii',
'ID': 'Idaho',
'IL': 'Illinois',
'IN': 'Indiana',
'IA': 'Iowa',
'KS': 'Kansas',
'KY': 'Kentucky',
'LA': 'Louisiana',
'ME': 'Maine',
'MD': 'Maryland',
'MA': 'Massachusetts',
'MI': 'Michigan',
'MN': 'Minnesota',
'MS': 'Mississippi',
'MO': 'Missouri',
'MT': 'Montana',
'NE': 'Nebraska',
'NV': 'Nevada',
'NH': 'New Hampshire',
'NJ': 'New Jersey',
'NM': 'New Mexico',
'NY': 'New York',
'NC': 'North Carolina',
'ND': 'North Dakota',
'OH': 'Ohio',
'OK': 'Oklahoma',
'OR': 'Oregon',
'PA': 'Pennsylvania',
'RI': 'Rhode Island',
'SC': 'South Carolina',
'SD': 'South Dakota',
'TN': 'Tennessee',
'TX': 'Texas',
'UT': 'Utah',
'VT': 'Vermont',
'VA': 'Virginia',
'WA': 'Washington',
'WV': 'West Virginia',
'WI': 'Wisconsin',
'WY': 'Wyoming'
}
def extract_place(status):
if type(status) is tweepy.models.Status:
status = status.__dict__
#Try to get the place from the place data inside the status dict
if status['place'] is not None:
place = status['place']
if place['country'] != 'United States':
return place['country']
elif place['place_type'] == 'admin':
return place['name']
elif place['place_type'] == 'city':
return states.get(place['full_name'].split(', ')[-1])
#If the status dict has no place info, get the place from the user data
else:
place = status['user']['location']
try:
place = place.split(', ')[-1].upper()
except AttributeError:
return None
if place in states:
return states[place]
else:
return place