Проблема бота в Твиттере - PullRequest
0 голосов
/ 26 апреля 2020

Я создал бота в Твиттере, который каждый раз, когда Lil Uzi Vert или Playboi Carti пишут в Твиттере, должен публиковать их в своем субреддите. Проблема, которую я имею, состоит в том, что это продолжает спамить последний твит Лил Узи Верт на обоих subreddits. И из-за этого меня также забанили.

Если я попытаюсь подписаться только на свою учетную запись в твиттере, это работает.

Обнаружил проблему: всякий раз, когда кто-то любит или ретвитит свой твит, он будет считаться другим новый статус и, следовательно, опубликовать его на 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()

1 Ответ

0 голосов
/ 26 апреля 2020

Tweepy, насколько я знаю, не поддерживает фильтрацию ретвитов.

Вы можете использовать python -twitter '* GetUserTimeline () , который имеет аргумент логического ключевого слова include_rts.

. Теперь единственная проблема заключается в том, что python -twitter не имеет настройки прослушивателя потока, поэтому вы должны скопировать его, используя al oop и time.sleep(), поэтому вы не go превышаете лимит скорости; вот так:

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.

...