如何更新 Tweepy Streaming Python 代码
How to update Tweepy Streaming Python code
我有这个代码 运行 用于早期版本的 Python 但现在想将它升级到最新版本的 Python 和 Tweepy 但是我似乎无法让它工作.任何帮助将非常感激!我得到的错误是:
ImportError: 无法从 'tweepy.streaming' 导入名称 'StreamListener' (C:\Users\mmanenica\anaconda3\lib\site-packages\tweepy\streaming.py)
import sys
from tweepy import OAuthHandler
from tweepy import API
from tweepy import Stream
from tweepy.streaming import StreamListener
import pandas as pd
from time import sleep
from random import randint
CONSUMER_KEY = ""
CONSUMER_SECRET = ""
ACCESS_TOKEN = ""
ACCESS_TOKEN_SECRET = ""
auth = OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
api = API(auth, wait_on_rate_limit=True,
wait_on_rate_limit_notify=True)
tweets = pd.DataFrame(columns=['description', 'location', 'text', 'name', 'user_created',
'followers', 'user_id', 'created', 'retweets', 'analysis', 'sentiment'])
class Listener(StreamListener):
def __init__(self, output_file=sys.stdout):
super(Listener,self).__init__()
self.output_file = output_file
self.counter = 0
self.limit = 3
def on_status(self, status):
try:
name = status.user.screen_name
sleep(randint(100,190))
print(name)
api.create_friendship(name)
print(status.text, file=self.output_file)
self.counter += 1
if self.counter <= self.limit:
print(self.counter)
return True
else:
print('Limit reached')
except:
print("Error in adding friendship")
def on_error(self, status_code):
print('Error ' + str(status_code))
return False
listener = Listener()
stream = Stream(auth=api.auth, listener=listener)
try:
stream.filter(track=['NFTs', 'Buying NFT', 'Buy NFT', '-filter:links', '-filter:retweets'])
print('Start streaming.')
except KeyboardInterrupt:
print("Stopped.")
finally:
print('Done.')
stream.disconnect()
首先,确保你已经安装了最新版本的tweepy (4.5.0)。您可以通过在终端中输入 pip install --user --upgrade tweepy
来保证这一点。您可以在没有 --user
部分的情况下尝试。它也应该升级。
现在,安装了最新版本后,您可以开始使用如下代码(基于 https://docs.tweepy.org/en/stable/streaming.html)收集流:
import tweepy
class StreamCollector(tweepy.Stream):
def on_data(self, data):
print(data)
stream = StreamCollector(
"Consumer Key here", "Consumer Secret here",
"Access Token here", "Access Token Secret here"
)
stream.filter(track=["Obama"])
请注意,on_data
方法直接从 Twitter 接收 raw_data。我们只是用上面的代码打印它,但你可以像对待 python 字典一样对待这个 data
对象,并提取你想要的关于推文的任何信息。
我建议,不要打印 data
对象,而是像下面这样(导入 json
库并将其余代码放在 def on_data
中,而不是 print(data)
):
import json
tweet_info = json.loads(data)
print(tweet_info['text'])
请注意,我们已经访问了 data
对象并仅提取了推文“文本”信息。您可以更深入地访问 tweet_info
词典中的其他信息,并根据问题中显示的必要条件补充上面的代码。
希望对您有所帮助。 :)
我有这个代码 运行 用于早期版本的 Python 但现在想将它升级到最新版本的 Python 和 Tweepy 但是我似乎无法让它工作.任何帮助将非常感激!我得到的错误是:
ImportError: 无法从 'tweepy.streaming' 导入名称 'StreamListener' (C:\Users\mmanenica\anaconda3\lib\site-packages\tweepy\streaming.py)
import sys
from tweepy import OAuthHandler
from tweepy import API
from tweepy import Stream
from tweepy.streaming import StreamListener
import pandas as pd
from time import sleep
from random import randint
CONSUMER_KEY = ""
CONSUMER_SECRET = ""
ACCESS_TOKEN = ""
ACCESS_TOKEN_SECRET = ""
auth = OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
api = API(auth, wait_on_rate_limit=True,
wait_on_rate_limit_notify=True)
tweets = pd.DataFrame(columns=['description', 'location', 'text', 'name', 'user_created',
'followers', 'user_id', 'created', 'retweets', 'analysis', 'sentiment'])
class Listener(StreamListener):
def __init__(self, output_file=sys.stdout):
super(Listener,self).__init__()
self.output_file = output_file
self.counter = 0
self.limit = 3
def on_status(self, status):
try:
name = status.user.screen_name
sleep(randint(100,190))
print(name)
api.create_friendship(name)
print(status.text, file=self.output_file)
self.counter += 1
if self.counter <= self.limit:
print(self.counter)
return True
else:
print('Limit reached')
except:
print("Error in adding friendship")
def on_error(self, status_code):
print('Error ' + str(status_code))
return False
listener = Listener()
stream = Stream(auth=api.auth, listener=listener)
try:
stream.filter(track=['NFTs', 'Buying NFT', 'Buy NFT', '-filter:links', '-filter:retweets'])
print('Start streaming.')
except KeyboardInterrupt:
print("Stopped.")
finally:
print('Done.')
stream.disconnect()
首先,确保你已经安装了最新版本的tweepy (4.5.0)。您可以通过在终端中输入 pip install --user --upgrade tweepy
来保证这一点。您可以在没有 --user
部分的情况下尝试。它也应该升级。
现在,安装了最新版本后,您可以开始使用如下代码(基于 https://docs.tweepy.org/en/stable/streaming.html)收集流:
import tweepy
class StreamCollector(tweepy.Stream):
def on_data(self, data):
print(data)
stream = StreamCollector(
"Consumer Key here", "Consumer Secret here",
"Access Token here", "Access Token Secret here"
)
stream.filter(track=["Obama"])
请注意,on_data
方法直接从 Twitter 接收 raw_data。我们只是用上面的代码打印它,但你可以像对待 python 字典一样对待这个 data
对象,并提取你想要的关于推文的任何信息。
我建议,不要打印 data
对象,而是像下面这样(导入 json
库并将其余代码放在 def on_data
中,而不是 print(data)
):
import json
tweet_info = json.loads(data)
print(tweet_info['text'])
请注意,我们已经访问了 data
对象并仅提取了推文“文本”信息。您可以更深入地访问 tweet_info
词典中的其他信息,并根据问题中显示的必要条件补充上面的代码。
希望对您有所帮助。 :)