2015-07-31 9 views
12

Dies ist der Code, den ich verwendet habe,Wie aktualisiert man den twitter-Status mit Bild unter Verwendung der Bild-URL in tweepy?

#Twitter credentials 
access_token = config.get('twitter_credentials', 'access_token') 
access_token_secret = config.get('twitter_credentials', 'access_token_secret') 
consumer_key = config.get('twitter_credentials', 'consumer_key') 
consumer_secret = config.get('twitter_credentials', 'consumer_secret') 

auth = OAuthHandler(consumer_key, consumer_secret) 
auth.set_access_token(access_token, access_token_secret) 
api = API(auth) 

img = "http://animalia-life.com/data_images/bird/bird1.jpg" 
api.update_with_media(img, status="Nice one") 

Dies ist der Fehler ich

bekommen
No such file or directory 

Ich weiß, dass ich eine Datei aus dem lokalen Verzeichnis mit dem obigen Befehl verwenden . Gibt es eine Möglichkeit, eine URL zu verwenden, während Sie update_with_media verwenden?

Antwort

18

Sie müssen eine lokale Datei zum Hochladen über Tweepy verwenden. Ich würde vorschlagen, eine Bibliothek wie requests zu verwenden, um die Datei zuerst herunterzuladen.

import requests 
import os 


def twitter_api(): 
    access_token = config.get('twitter_credentials', 'access_token') 
    access_token_secret = config.get('twitter_credentials', 'access_token_secret') 
    consumer_key = config.get('twitter_credentials', 'consumer_key') 
    consumer_secret = config.get('twitter_credentials', 'consumer_secret') 

    auth = OAuthHandler(consumer_key, consumer_secret) 
    auth.set_access_token(access_token, access_token_secret) 
    api = API(auth) 
    return api 


def tweet_image(url, message): 
    api = twitter_api() 
    filename = 'temp.jpg' 
    request = requests.get(url, stream=True) 
    if request.status_code == 200: 
     with open(filename, 'wb') as image: 
      for chunk in request: 
       image.write(chunk) 

     api.update_with_media(filename, status=message) 
     os.remove(filename) 
    else: 
     print("Unable to download image") 


url = "http://animalia-life.com/data_images/bird/bird1.jpg" 
message = "Nice one" 
tweet_image(url, message) 
+0

funktioniert. Gibt es eine Möglichkeit, die temporäre heruntergeladene Datei zu entfernen, sobald die Operation abgeschlossen ist. –

+2

Ja! Verwenden Sie einfach 'os.remove (Dateiname)'. Ich werde meinen Beitrag bearbeiten, um dies zu berücksichtigen. – Brobin

0

Warum nicht einfach den Link in ein Statusupdate aufnehmen?

img = "http://animalia-life.com/data_images/bird/bird1.jpg" 
api.status(status="%s Nice one" % img) 
+0

Ich habe es auch versucht. Twitter zeigt es nur als Klartext –

+0

Hinweis: URLs zählen gegen Ihre Tweet-Zeichen-Grenze – AtAFork

1

Twython Mitteilung 3.4.0

photo = open('/path/to/file/image.jpg', 'rb') 
response = twitter.upload_media(media=photo) 
twitter.update_status(status='Checkout this cool image!', media_ids=[response['media_id']])