我做了一个推特机器人,每次Lil Uzi Vert或Playboi Carti发推特时,它都会在他们的subreddit上发布。我的问题是,它一直在两个subreddits上发送Lil Uzi Vert的最后一条推文。正因为如此,我也被禁言了。
如果我试着只关注我的twitter账号,它就能正常工作。
发现了问题:每当有人点赞或转发他们的推特时,就会被算作另一个新的状态,因此会把它发布在Reddit上。不管是哪个帖子,甚至可能是旧的)。我怎样才能让这个功能只在其中一个人发推文或回复时才生效?
import praw
import tweepy
def submit(status):
r = praw.Reddit(
client_id="",
client_secret="",
username="",
password="",
user_agent=""
)
subreddit = r.subreddit('playboicarti')
subreddit.submit("new tweet", status)
subreddit = r.subreddit('liluzivert')
subreddit.submit("new tweet", status)
# Twitter part
class MyStreamListener(tweepy.StreamListener):
def __init__(self, api):
self.api = api
def on_status(self, status):
status = f"https://twitter.com/user/status/{status.id}\nHe said: {status.text}"
submit(status)
def on_error(self, status):
print("Error detected" + str(status))
def twitter():
# Authenticate to Twitter
auth = tweepy.OAuthHandler("", "")
auth.set_access_token("",
"")
# Create API object
api = tweepy.API(auth, wait_on_rate_limit=True,
wait_on_rate_limit_notify=True)
tweets_listener = MyStreamListener(api)
stream = tweepy.Stream(api.auth, tweets_listener)
stream.filter(follow=["101263750", "1599608046"])
if __name__ == "__main__":
twitter()
据我所知,Tweepy不支持过滤掉转发。
你可以使用 python-twitter's GetUserTimeline() 其中有一个布尔关键字参数 include_rts
.
现在唯一的问题是,python-twitter没有设置流监听器,所以你必须使用循环和 time.sleep()
所以你不要超过速率限制;像这样。
import twitter
import time
api = twitter.Api(consumer_key='',
consumer_secret='',
access_token_key='',
access_token_secret='')
user_id = 101263750
while True:
try:
statuses = api.GetUserTimeline(user_id=user_id,include_rts=False,
since_id=max_id,trim_user=True)
for status in statuses:
print(status.text)
max_id = status.id
except NameError:
max_id = api.GetUserTimeline(user_id=user_id,include_rts=False,count=1,
trim_user=True)[0].id
time.sleep(30)
我让你去做这个适合你在reddit上做的事情。