【问题标题】:How can I make this twitter bot work? Python 3.8我怎样才能让这个 twitter 机器人工作?蟒蛇 3.8
【发布时间】:2020-03-25 22:06:51
【问题描述】:

这段代码我有各种各样的问题,这是另一个 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

不知道这有什么问题,脚本的重点是让这个机器人搜索某人的推文以“我是____”开头并回复“嗨____,我是爸爸!”只是一个幽默的事情,但我完全迷路了。感谢所有帮助,谢谢!

新问题!

    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: 'Status' 对象没有属性 'split'

错误:

       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

【问题讨论】:

  • 为什么c 是一个元组?你想在那里做什么?
  • 你的代码没有缩进
  • c = ("im ","") 可能是你的问题。为什么你分配c=tweet 然后立即将其重新分配给` ("im ","")`?还可以考虑使用字符串格式。
  • 这是其他用户代码的一部分,我是新手,对我来说也没有多大意义,但我不知道该怎么处理它。谢谢你的解释!现在我只需要弄清楚如何让它在“我是”之后发推文。现在它只是发推文@example_name 嗨('im',''),我是爸爸!

标签: python windows twitter bots


【解决方案1】:

首先,c 没有明显的理由应该分配给一个元组,所以我假设它被删除并替换为推文内容。

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

# 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"],然后在 0 处获取“我”的索引,然后从索引 0 中获取“悲伤” + 1。

【讨论】:

  • 好的,多亏了你,我现在可以发推文了!但它只发推文@JohnnyAppleseed 嗨('im',''),我是爸爸!你知道我怎样才能让它引用“我是”之后的任何内容吗?我唯一改变的是 .format() 行。非常感谢!
  • 根据请求更新
  • 感谢您的更新,所以现在我在弄清楚如何应用它时遇到了问题,如果我很烦,很抱歉,您非常有帮助!这是错误。回溯(最近一次调用最后):文件“C:\Users\alexo\Desktop\Twitter Dad.py”,第 26 行,在 tweet_contents = tweet.split() # 假设 tweet 是 str AttributeError: 'Status'对象没有属性“分裂”
  • 是的,所以它必须是 str,所以请参考 Status 对象上的任何推文内容。
  • 我编辑了原始帖子以便更好地解释。我会试试的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-09
  • 1970-01-01
  • 1970-01-01
  • 2023-01-08
  • 2020-06-23
相关资源
最近更新 更多