【问题标题】:Retweet a specific user's tweets based on keywords根据关键字转发特定用户的推文
【发布时间】:2020-07-09 03:04:06
【问题描述】:

我一直在关注realpython 提供的教程,尝试创建一个 twitter 机器人,该机器人根据特定用户推文中的关键字转发推文。通过使用followtrack 参数,我应该能够只转发那些包含goalassist 的推文,但听众似乎转发了所有包含这些关键字而不是特定用户的推文。

#!/usr/bin/env python
# tweepy-bots/bots/retweet.py

import tweepy
import logging
from config import create_api
import json

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger()

class RetweetListener(tweepy.StreamListener):
    def __init__(self, api):
        self.api = api
        self.me = api.me()

    def on_status(self, tweet):
        logger.info(f"Processing tweet id {tweet.id}")
        if tweet.in_reply_to_status_id is not None or \
            tweet.user.id == self.me.id:
            # This tweet is a reply or I'm its author so, ignore it
            return
        if not tweet.retweeted:
            # if 'GOAL' and 'ASSIST' in tweet.full_text:
                # Retweet, since we have not retweeted it yet
            try:
                tweet.retweet()
            except Exception as e:
                logger.error("Error on fav and retweet", exc_info=True)

    def on_error(self, status):
        logger.error(status)

def main(keywords):
    api = create_api()
    tweets_listener = RetweetListener(api)
    stream = tweepy.Stream(api.auth, tweets_listener)
    stream.filter(follow=['761568335138058240'], 
                           track=keywords, languages=["en"])

if __name__ == "__main__":
    main(["Goal Assist"])

【问题讨论】:

    标签: python tweepy


    【解决方案1】:

    根据我如何破解它发布我自己的答案,不确定这是否是最好的方法,但它有效。

    class RetweetListener(tweepy.StreamListener):
        def __init__(self, api):
            self.api = api
            self.me = api.me()
    
        def on_status(self, tweet):
            logger.info(f"Processing tweet id {tweet.id}")
            if tweet.in_reply_to_status_id is not None or \
                tweet.user.id == self.me.id:
                # This tweet is a reply or I'm its author so, ignore it
                return
            if not tweet.retweeted:                
                if 'Goal -'  and 'Assist -' in tweet.text:
                    try:
                        # Retweet, since we have not retweeted it yet
                        tweet.retweet()
                    except Exception as e:
                        logger.error("Error on fav and retweet", exc_info=True)
    
        def on_error(self, status):
            logger.error(status)
    
    

    【讨论】:

      猜你喜欢
      • 2017-03-19
      • 2012-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多