【发布时间】:2022-08-14 22:09:44
【问题描述】:
我正在尝试进行 Twitter 情绪分析,该分析允许用户根据输入的持续时间输入要分析的推文数量。所以我创建了一个 HTML 来提示用户输入(query, noTweets, startDate, endDate)。但是,它无法定义noTweets、startDate 和endDate 参数。
class TwitterClient(object):
\'\'\'
Generic Twitter Class for the App
\'\'\'
def __init__(self, query, noTweets, startDate, endDate, retweets_only=False, with_sentiment=False):
# Attempt authentication
try:
self.auth = OAuthHandler(consumerKey, consumerSecret)
self.auth.set_access_token(accessToken, accessTokenSecret)
self.query = query
self.noTweets = noTweets
self.startDate = startDate
self.endDate = endDate
self.retweets_only = retweets_only
self.with_sentiment = with_sentiment
self.api = tweepy.API(self.auth)
except:
print(\"Error: Authentication Failed\")
def set_query(self, query=\'\'):
self.query = query
def set_noTweets(self, noTweets=\'\'):
self.noTweets = noTweets
def set_startDate(self, startDate=\'\'):
self.startDate = startDate
def set_endDate(self, endDate=\'\'):
self.endDate = endDate
def set_retweet_checking(self, retweets_only=\'false\'):
self.retweets_only = retweets_only
def set_with_sentiment(self, with_sentiment=\'false\'):
self.with_sentiment = with_sentiment
def clean_tweet(self, tweet):
return \' \'.join(re.sub(\"(@[A-Za-z0-9]+)|([^0-9A-Za-z \\t])|(\\w+:\\/\\/\\S+)\", \" \", tweet).split())
def get_tweet_sentiment(self, tweet):
analysis = TextBlob(self.clean_tweet(tweet))
if analysis.sentiment.polarity > 0:
return \'positive\'
elif analysis.sentiment.polarity == 0:
return \'neutral\'
else:
return \'negative\'
def get_tweets(self):
tweets = []
try:
recd_tweets = self.api.search_tweets(q=self.query,
count=self.noTweets)
if not recd_tweets:
pass
if (self.startDate < tweet.created_at < self.endDate):
for tweet in recd_tweets:
parsed_tweet = {}
parsed_tweet[\'text\'] = tweet.text
parsed_tweet[\'user\'] = tweet.user.screen_name
if self.with_sentiment == 1:
parsed_tweet[\'sentiment\'] = self.get_tweet_sentiment(tweet.text)
else:
parsed_tweet[\'sentiment\'] = \'unavailable\'
if tweet.retweet_count > 0 and self.retweets_only == 1:
if parsed_tweet not in tweets:
tweets.append(parsed_tweet)
elif not self.retweets_only:
if parsed_tweet not in tweets:
tweets.append(parsed_tweet)
return tweets
except tweepy.TweepyException as e:
print(\"Error : \" + str(e))
下面是从 HTML 调用 val 的函数:
@views.route(\'/tweets\')
def tweets():
api = TwitterClient(\'@XXX\')
retweets_only = request.args.get(\'retweets_only\')
api.set_retweet_checking(strtobool(retweets_only.lower()))
with_sentiment = request.args.get(\'with_sentiment\')
api.set_with_sentiment(strtobool(with_sentiment.lower()))
query = request.args.get(\'query\')
api.set_query(query)
noTweets = request.args.get(\'noTweets\')
api.set_noTweets(noTweets)
startDate = request.args.get(\'startDate\')
api.set_startDate(startDate)
endDate = request.args.get(\'endDate\')
api.set_endDate(endDate)
tweets = api.get_tweets()
return jsonify({\'data\': tweets, \'count\': len(tweets)})
-
TwitterClient(\'@XXX\')确实只传递了四个必需的位置参数之一 - 你是什么期待即将发生? -
@jonrsharpe 我期待从用户那里获得输入,包括从 Twitter 抓取数据以分析情绪的持续时间。如果我将 <TwitterClient(\'@XXX\')> 更改为 <TwitterClient(\'@XXX\', \' \', \' \', \' \')>,是否可以定义用户输入?
-
我的意思是当你打电话给那条线时,你期望其他论点来自哪里?
-
首先@jonrsharpe,感谢您的回复。我期望它可以从 TwitterClient 的类中调用,它应该从那里的视图路由。但它没有捕捉到我希望输出显示的内容。那么我需要做的是在
api.TwitterClient(\'@XXX\')处设置其他参数?你能帮我解决这个问题吗?