如何使用 python 从开始日期到结束日期使用 tweepy 流式传输推文?
How to stream tweets using tweepy from a start date to end date using python?
我目前正在使用 python 对关于某个主题(不一定对这个问题很重要)的 Twitter 数据进行情绪分析,对此我是初学者。我了解 Twitter 流媒体 API 限制用户只能访问前 7 天,除非您申请打开整个档案的完整企业搜索。我最近获得了从 Twitter 访问该研究项目的完整档案的权限,但我无法指定要流式传输到 csv 文件中的推文的开始和结束日期。这是我的代码:
import pandas as pd
from tweepy import Stream
from tweepy import OAuthHandler
from tweepy.streaming import StreamListener
ckey = 'xxxxxxxxxxxxxxxxxxxxxxx'
csecret = 'xxxxxxxxxxxxxxxxxxxxxxx'
atoken = 'xxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxx'
asecret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx'
# =============================================================================
# def sentimentAnalysis(text):
# output = '0'
# return output
# =============================================================================
class listener(StreamListener):
def on_data(self, data):
tweet = data.split(',"text":"')[1].split('","source')[0]
saveMe = tweet+'::'+'\n'
output = open('output.csv','a')
output.write(saveMe)
output.close()
return True
def on_error(self, status):
print(status)
auth = OAuthHandler(ckey, csecret)
auth.set_access_token(atoken, asecret)
twitterStream = Stream(auth, listener())
twitterStream.filter(track=["#weather"], languages = ["en"])
现在这段代码可以完美地流式传输过去 7 天的 Twitter 日期。我尝试将底线更改为
twitterStream.filter(track=["#weather"], languages = ["en"], since = ["2016-06-01"])
但是这个 returns 这个错误 :: filter() 得到了一个意外的关键字参数 'since'。
按给定日期范围过滤的正确方法是什么?
tweepy没有提供"since"参数,大家可以自行查看here.
要获得所需的输出,您将不得不使用 api.user_timeline
,遍历页面直到达到所需的日期,例如:
import tweepy
import datetime
# The consumer keys can be found on your application's Details
# page located at https://dev.twitter.com/apps (under "OAuth settings")
consumer_key=""
consumer_secret=""
# The access tokens can be found on your applications's Details
# page located at https://dev.twitter.com/apps (located
# under "Your access token")
access_token=""
access_token_secret=""
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
page = 1
stop_loop = False
while not stop_loop:
tweets = api.user_timeline(username, page=page)
if not tweets:
break
for tweet in tweets:
if datetime.date(YEAR, MONTH, DAY) < tweet.created_at:
stop_loop = True
break
# Do the tweet process here
page+=1
time.sleep(500)
请注意,您需要更新代码以满足您的需要,这只是一个通用的解决方案。
我目前正在使用 python 对关于某个主题(不一定对这个问题很重要)的 Twitter 数据进行情绪分析,对此我是初学者。我了解 Twitter 流媒体 API 限制用户只能访问前 7 天,除非您申请打开整个档案的完整企业搜索。我最近获得了从 Twitter 访问该研究项目的完整档案的权限,但我无法指定要流式传输到 csv 文件中的推文的开始和结束日期。这是我的代码:
import pandas as pd
from tweepy import Stream
from tweepy import OAuthHandler
from tweepy.streaming import StreamListener
ckey = 'xxxxxxxxxxxxxxxxxxxxxxx'
csecret = 'xxxxxxxxxxxxxxxxxxxxxxx'
atoken = 'xxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxx'
asecret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx'
# =============================================================================
# def sentimentAnalysis(text):
# output = '0'
# return output
# =============================================================================
class listener(StreamListener):
def on_data(self, data):
tweet = data.split(',"text":"')[1].split('","source')[0]
saveMe = tweet+'::'+'\n'
output = open('output.csv','a')
output.write(saveMe)
output.close()
return True
def on_error(self, status):
print(status)
auth = OAuthHandler(ckey, csecret)
auth.set_access_token(atoken, asecret)
twitterStream = Stream(auth, listener())
twitterStream.filter(track=["#weather"], languages = ["en"])
现在这段代码可以完美地流式传输过去 7 天的 Twitter 日期。我尝试将底线更改为
twitterStream.filter(track=["#weather"], languages = ["en"], since = ["2016-06-01"])
但是这个 returns 这个错误 :: filter() 得到了一个意外的关键字参数 'since'。
按给定日期范围过滤的正确方法是什么?
tweepy没有提供"since"参数,大家可以自行查看here.
要获得所需的输出,您将不得不使用 api.user_timeline
,遍历页面直到达到所需的日期,例如:
import tweepy
import datetime
# The consumer keys can be found on your application's Details
# page located at https://dev.twitter.com/apps (under "OAuth settings")
consumer_key=""
consumer_secret=""
# The access tokens can be found on your applications's Details
# page located at https://dev.twitter.com/apps (located
# under "Your access token")
access_token=""
access_token_secret=""
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
page = 1
stop_loop = False
while not stop_loop:
tweets = api.user_timeline(username, page=page)
if not tweets:
break
for tweet in tweets:
if datetime.date(YEAR, MONTH, DAY) < tweet.created_at:
stop_loop = True
break
# Do the tweet process here
page+=1
time.sleep(500)
请注意,您需要更新代码以满足您的需要,这只是一个通用的解决方案。