【问题标题】:TwitterClient.__init__() missing 3 required positional arguments: 'noTweets', 'startDate', and 'endDate'TwitterClient.__init__() 缺少 3 个必需的位置参数:\'noTweets\'、\'startDate\' 和 \'endDate\'
【发布时间】:2022-08-14 22:09:44
【问题描述】:

我正在尝试进行 Twitter 情绪分析,该分析允许用户根据输入的持续时间输入要分析的推文数量。所以我创建了一个 HTML 来提示用户输入(query, noTweets, startDate, endDate)。但是,它无法定义noTweetsstartDateendDate 参数。

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\') 处设置其他参数?你能帮我解决这个问题吗?

标签: python html flask tweepy


【解决方案1】:

如果运行以下代码会发生什么?

def add(a, b):
    return a + b
    
add(5)

显然,它引发了一个异常,因为缺少第二个参数。

您的代码也会发生同样的事情。

创建对象时,Python 会调用其类的__init__ 方法。

所以你的api = TwitterClient('@XXX') 只用一个参数调用__init__(self, query, noTweets, startDate, endDate, retweets_only=False, with_sentiment=False)

所以首先得到你的论点,然后然后创建对象。

retweets_only = request.args.get('retweets_only')
with_sentiment = request.args.get('with_sentiment')
query = request.args.get('query')
noTweets = request.args.get('noTweets')
startDate = request.args.get('startDate')
endDate = request.args.get('endDate')

api = TwitterClient('@XXX', noTweets, startDate, endDate, retweets_only, with_sentiment)

您可能应该阅读更多关于 __init__ 和 Python 中的 OOP(例如在 official Python documentation 中)的信息,并且附带说明一下,您使用的命名约定不一致。

【讨论】:

    猜你喜欢
    • 2023-03-27
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    • 2021-02-08
    • 2020-06-13
    • 2021-07-25
    相关资源
    最近更新 更多