Мой партнер и я начали изучать Python в начале года. Я нахожусь в точке, где а) мой партнер и я почти закончили с нашим кодом, но б) выдернули наши волосы, пытаясь заставить его работать.
Задание: извлекать 250 твитов на основе определенных топик c, геокодирование местоположения твитов, анализ на основе настроений, а затем отображение их на веб-карте. Мы выполнили почти все это, кроме требования 250 твитов.
И я не знаю, как более эффективно использовать твиты. Код работает, но он записывает приблизительно семь-двенадцать строк информации в CSV до истечения времени ожидания.
Я попытался установить параметр отслеживания, но получил эту ошибку: TypeError: 'NoneType' object is not subscriptable'
Я попытался расширить параметр местоположения до stream.filter (location = [- 180, -90,180,90]) , но получил ту же проблему: TypeError: 'NoneType' object has no attribute 'latitude'
Я действительно не знаю, что мне не хватает, и мне было интересно, есть ли у кого-нибудь идеи.
КОД НИЖЕ:
from geopy import geocoders
from geopy.exc import GeocoderTimedOut
import tweepy
from tweepy.streaming import StreamListener
from tweepy import OAuthHandler
from tweepy import Stream
from textblob import TextBlob
import json
import csv
def geo(location):
g = geocoders.Nominatim(user_agent='USER')
if location is not None:
loc = g.geocode(location, timeout=None)
if loc.latitude and loc.longitude is not None:
return loc.latitude, loc.longitude
def WriteCSV(user, text, sentiment, lat, long):
f = open('D:/PATHWAY/TO/tweets.csv', 'a', encoding="utf-8")
write = csv.writer(f)
write.writerow([user, text, sentiment, lat, long])
f.close()
CK = ''
CS = ''
AK = ''
AS = ''
auth = tweepy.OAuthHandler(CK, CS)
auth.set_access_token(AK, AS)
#By setting these values to true, our code will automatically wait as it hits its limits
api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True)
#Now I'm going to set up a stream listener
#https://stackoverflow.com/questions/20863486/tweepy-streaming-stop-collecting-tweets-at-x-amount
#https://wafawaheedas.gitbooks.io/twitter-sentiment-analysis-visualization-tutorial/sentiment-analysis-using-textblob.html
class StdOutListener(tweepy.StreamListener):
def __init__(self, api=None):
super(StdOutListener, self).__init__()
self.num_tweets = 0
def on_data(self, data):
Data = json.loads(data)
Author = Data['user']['screen_name']
Text = Data['text']
Tweet = TextBlob(Data["text"])
Sentiment = Tweet.sentiment.polarity
x,y = geo(Data['place']['full_name'])
if "coronavirus" in Text:
WriteCSV(Author, Text, Sentiment, x,y)
self.num_tweets += 1
if self.num_tweets < 50:
return True
else:
return False
stream = tweepy.Stream(auth=api.auth, listener=StdOutListener())
stream.filter(locations=[-122.441, 47.255, -122.329, 47.603])