如何使这个Twitter机器人正常工作? Python 3.8

时间:2019-11-30 19:30:13

标签: python windows twitter bots

我在使用此代码时遇到各种各样的问题,这是另一个stackoverflow用户代码的很大一部分,但是我假设他们可能从未完成过该代码,因为我遇到了各种各样的错误。众所周知,“状态”对象没有属性“替换”。我认为我已解决的问题,不知道,在网上找不到任何内容,尽管它是变量,所以我尝试了非变量版本,但仍然没有。现在我有这个问题。

Yes
Traceback (most recent call last):
File "C:\Users\alexo\Desktop\Twitter Dad.py", line 28, in <module>
answer="@"+tweet.user.screen_name+" Hi " + c + ", I'm Dad!"
TypeError: can only concatenate str (not "tuple") to str

不知道这有什么问题,脚本的目的是针对该机器人,搜索某人何时以“ I'm ____”开头的推文,然后以“ Hi ____,I'm dad”回复。只是幽默,但我完全迷失了。感谢所有帮助,谢谢!

新问题!

    import tweepy
    import tweepy as tt
    import time
    import sys
    import importlib 
    from importlib import reload
    importlib.reload(sys)

    #login credentials twitter account
    consumer_key = 'redacted'
    consumer_secret = 'redacted'
    access_token = 'redacted'
    access_secret = 'redacted'

    #login
    auth = tt.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token, access_secret)
    api = tt.API(auth)
    search_query = "hi I'm Dad"
    user = api.me()
    print(user.name)

    max_tweets = 100

    for tweet in tweepy.Cursor(api.search, q=search_query).items(max_tweets):
    c = tweet
    c = ("im ","")
    answer="@"+tweet.user.screen_name+" Hi " + c + ", I'm Dad!"
    print("Reply:",answer)
    api.update_status(status=answer)
    time.sleep(300) #every 5 minutes

Traceback (most recent call last):

文件“ C:\ Users \ alexo \ Desktop \ Twitter Dad.py”,第26行,在     tweet_contents = tweet.split()#假设tweet是一个str         AttributeError:“状态”对象没有属性“拆分”

错误:

       Traceback (most recent call last):
       File "C:\Users\alexo\Desktop\Twitter Dad.py", line 26, in <module>
       tweet_contents = tweet.split() # assuming tweet is a str
       AttributeError: 'Status' object has no attribute 'split'

代码

import tweepy
import tweepy as tt
import time
import sys
import importlib
from importlib import reload
importlib.reload(sys)

#login credentials twitter account
consumer_key = '4QGxdJFmn4phBS0z9JTMU1S27'
consumer_secret = 'VuOkfqCEq6YcEeI2Sg6hhP4a7xrMHbhzORr9gQKyX8XfETbbnX'
access_token = '1200414502304591872-lj89lAd7r8oFbXEwDaVxg7YnH8pddO'
access_secret = '3PUfawYhaQJYDU6VYriKiVZNA9zYAAc1UOXe1UREgtWH7'

#login
auth = tt.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_secret)
api = tt.API(auth)
search_query = "hi I'm Dad"
user = api.me()
print(user.name)

max_tweets = 100

for tweet in tweepy.Cursor(api.search, q=search_query).items(max_tweets):
    tweet_contents = tweet.split() # assuming tweet is a str
i = tweet_contents.index("I'm")
c = tweet_contents[i + 1]
answer = "@{name} Hi {c}, I'm dad!".format(name=tweet.user.screen_name)
print("Reply:",answer)

api.update_status.(status=answer)
time.sleep(300) #every 5 minutes

1 个答案:

答案 0 :(得分:0)

首先,没有明显的理由应将c分配给一个元组,因此我假设将其删除并替换为tweet内容。

也就是说,您应该使用string formatting中的Python构建,而不是字符串串联。

# Using the .format() function:
answer = "@{name} Hi {c}, I'm dad!".format(name=tweet.user.screen_name, c=c)

# Using an "f-string":
answer = f"@{tweet.user.screen_name} Hi {c}, I'm dad!"

编辑

每个OP的评论:

  

好吧,谢谢你,我现在就发布它!但这只鸣叫@JohnnyAppleseed嗨('im',``),我是爸爸!您知道我如何引用“我是”之后的内容吗?我唯一更改的是.format()行。非常感谢!

要获取源推文中字符串I'm之后的所有内容,您首先需要找到单词I'm的索引,然后拉出其后的单词。原谅变量名,我正在上班。

tweet_contents = tweet.split() # assuming tweet is a str
i = tweet_contents.index("I'm")
c = tweet_contents[i + 1]

例如,如果该推文为“我很伤心”,则将其拆分为一个列表["I'm", "sad"],然后将索引“ I'm”设为0,然后从索引0 + 1。