Python 类(如果类型为"无")



我是Python的新手,我正在创建一个小项目。但是,每次我尝试创建类TwitterClient的实例并将其分配给变量api时,尝试从api调用方法都会返回"NoneType对象没有属性(函数名("。我已经研究了其他人对这个主题所做的工作,但到目前为止,更改TwitterClient类的参数还没有奏效。也许我的理解是错误的,但为什么一个类被认为是NoneType对象?在我运行main((之后,我得到了这个错误。这是我的代码:

def TwitterClient():
def __init__(self):

api_key = '-------'
api_key_secret = '----------'
bearer_token = '--------------'
access_token = '---------------'
access_token_secret = '-----------------'

try:
self.auth = OAuthHandler(consumer_key, consumer_secret)
self.auth.set_access_token(access_token, access_token_secret)
self.api = tweepy.API(self.auth)
except:
print("Error: Authentication Failed")



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 '+'
elif analysis.sentiment.polarity == 0:
return 'n'
else:
return '-'

def get_tweets(self, query, count=10):

tweets = []

try:
fetched_tweets = self.api.search(q = query, count = count)

for tweet in fetched_tweets:
parsed_tweets = {}
parsed_tweets['text'] = tweet.text
parsed_tweet['sentiemnt'] = tweet.sentiment

if tweet.retweet_count > 0:
if parsed_tweet not in tweets:
tweets.append(parsed_tweet)
else:
tweets.append(parsed_tweet)

return parsed_tweets

except tweepy.TweepError as e:
print("Error : " + str(e))

def main():
api = TwitterClient()

tweets = api.get_tweets(query = "etc", count = 10)




if __name__ == "main":
main()

如前所述,您没有定义类,但也没有正确初始化函数。但同时,tweepy不再有API.search((函数,而是现在分为API.search_tweets((、API.search_users((、API.search_geo((和一些我没有任何经验的高级函数,因为访问既有限又不免费。由于看起来您使用的是OAuth1.0的用户上下文,而Oauth2.0也有一个用户上下文处理程序,因此您还应该知道OAuthHandler函数已被弃用,并且您应该显式调用OAuth1UserHandler(或者Oauth2UserHandler,如果您想使用的话(,因为它们采用不同的参数。

修复现有问题的最简单方法是:

import tweepy
class TwitterClient(object):
def __init__(self, consumer_key, consumer_secret, access_token, access_secret):
self.authclient = tweepy.Oauth1UserHandler(consumer_key, consumer_secret, access_token, access_secret)
self.api = tweepy.API(self.authclient)
def get_tweets(self, query, count=10):
fetched_tweets = self.api.search_tweets(q=query, count=count)
# add in whatever parsing code you want here, since it returns a collection anyway, fetched_tweets['statuses'] is a list of returned tweets, and you can iterate through their 'text' field if you so wish via list comprehension

此外,我认为v2 API现在有了一个最新的搜索端点,它将最终成为搜索免费用户的首选方式,因为它以相反的时间顺序返回最后100条推文,如果有推文,则不应该出现空的查询。我们中的许多人都是高架访问的先驱,而推特显然试图在v1.1的某个时候弃用它,所以api不仅会为你和我返回不同的结果,而且还没有真正的迹象表明它们会让当前端点保持原样工作多久,所以一定要注意突破性的变化。

最新更新