带有附加图像的随机推文

时间:2016-12-22 15:13:19

标签: python tweepy

我使用Tweepy在python中编写了一个twitterbot。这是我的代码:

auth.set_access_token(access_token, access_token_secret)

api = tweepy.API(auth)

filename = open ('Shakespeare.txt', 'r')
tweettext = filename.readlines()
filename.close()
randomChoice = random.randrange(len(tweettext))
print (tweettext[randomChoice])
api.update_status(status=tweettext[randomChoice])

每当我在我的覆盆子pi上使用SSH运行它时,这都很有效 - 我的推文更新了我的推特。我的问题是:我想在每条随机推文中添加莎士比亚的图片(总是相同的图片)。

一个解决方案是:

file = open('Your_image.png', 'rb')
data = file.read()
r = api.request('statuses/update_with_media', {'status':'Your tweet'}, {'media[]':data})
print(r.status_code)

但是,我不知道如何将其合并到我现有的代码中。任何建议都将非常感谢。

我也想随机上传我的照片。以下是我从/ home / pi中选择随机图像的代码:

'def get_random_image_from_folder(folder):
media_list = list()
for dirpath, dirnames, files in os.walk(folder):
for f in files:
media_list.append(os.path.join(dirpath, f))

media = random.choice(media_list)
return media, len(media_list)'

我的问题是:如何编写api状态更新代码?我输入的代码在这里:

'api.update_status(status=tweettext[randomChoice], media=random.choice(media_list))'

但是,这会产生以下错误:

'Traceback(最近一次调用最后一次):   文件“Shakebot.py”,第30行,in     api.update_status(status = tweettext [randomChoice],media = random.choice(media_list)) NameError:名称'media_list'未定义'

我不明白,因为'media_list'是在图片位置定义的。

2 个答案:

答案 0 :(得分:2)

根据{{​​3}},

update_with_media 欠记录

您应该使用media_uploadTwitter Developers; Tweepy文档已过时,但您可以检查Twitter docs处的代码),这将返回media_id_string作为上传响应的一部分,然后您可以使用media_id_string(或字符串,最多可以附加4个图像)发送包含文本和列表的推文。 以下是使用media_upload的代码:

auth.set_access_token(access_token, access_token_secret)

api = tweepy.API(auth)

filename = open ('Shakespeare.txt', 'r')
tweettext = filename.readlines()
filename.close()

media_list = list()
response = api.media_upload('Your_image.png')
media_list.append(response.media_id_string)

randomChoice = random.randrange(len(tweettext))
print (tweettext[randomChoice])
api.update_status(status=tweettext[randomChoice], media_ids=media_list)

答案 1 :(得分:0)

如果您想在代码中合并图片上传部分。你可以这样做:

file = open('Your_image.png', 'rb')
data = file.read()

auth.set_access_token(access_token, access_token_secret)

api = tweepy.API(auth)

filename = open ('Shakespeare.txt', 'r')
tweettext = filename.readlines()
filename.close()
randomChoice = random.randrange(len(tweettext))
print (tweettext[randomChoice])
r = api.request('statuses/update_with_media', {'status':tweettext[randomChoice]}, {'media[]':data})
print(r.status_code)