2016-12-22 5 views
2

Ich habe einen Twitterbot in Python mit Tweepy geschrieben. Hier ist mein Code:Random Tweet mit angehängtem Bild

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]) 

Das funktioniert perfekt, wenn ich es von meinem SSH auf meinem Raspberry Pi laufen - mein tweet aktualisiert meinen Twitter-Feed. Mein Problem ist: Ich möchte jedem zufälligen Tweet ein Bild von Shakespeare (immer das gleiche Bild) hinzufügen.

Eine Lösung ist:

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) 

Aber ich weiß nicht, wie dies in meinen vorhandenen Code zu integrieren. Irgendwelche Vorschläge würden sehr geschätzt werden.

Ich möchte auch meinen Bildupload zufällig randomisieren. Hier ist der Code, den ich aus/home/pi ein zufälliges Bild auszuwählen gefunden:

'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)' 

Mein Problem ist: Wie code ich das api Status-Update? Der Code i eingegeben ist hier:

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

Doch dies erzeugt den folgenden Fehler:

‚Traceback (jüngste Aufforderung zuletzt): File "Shakebot.py", Zeile 30, in api. update_status (status = tweettext [randomChoice] media = random.choice (media_list)) Nameerror: name 'media_list' ist nicht definiert '

ich verstehe nicht, weil die' media_list“in der Bildposition definiert ist.

+0

(http://stackoverflow.com/help/someone-answers) –

Antwort

1

update_with_media ist deperecated nach Twitter Developers.

Sie verwenden sollten media_upload (Twitter docs; Tweepy docs sind veraltet, aber Sie können an der github repo den Code überprüfen), wird dies eine media_id_string als Teil der Antwort auf Upload zurück, dann können Sie einen Tweet mit dem Text senden und die Liste mit dem media_id_string (oder Strings, du kannst bis zu 4 Bilder anhängen). Hier ist der Code mit 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) 
+0

Das ist absolut brilliant [Was soll ich tun, wenn jemand meine Frage beantwortet?]. Vielen Dank für Ihre Hilfe :) – Deadulus

0

Wenn Sie den Bild-Upload-Teil in Ihren Code integrieren möchten. Sie können es wie folgt tun:

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)