2015-07-31 25 views
12

Jest to kod użyłem,Jak zaktualizować status Twittera obrazkiem za pomocą adresu URL obrazu w 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") 

Jest to błąd Dostaję

No such file or directory 

wiem, że muszę użyć pliku z katalogu lokalnego z powyższego polecenia . Czy istnieje sposób na użycie adresu URL podczas korzystania z update_with_media?

Odpowiedz

18

Musisz użyć lokalnego pliku, aby przesłać przez tweepy. Proponuję użyć biblioteki takiej jak requests, aby pobrać najpierw plik.

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

działa dobrze. Czy istnieje sposób, aby usunąć tymczasowy pobrany plik po zakończeniu operacji. –

+2

Tak! po prostu użyj 'os.remove (filename)'. Będę edytować mój post, aby to odzwierciedlić. – Brobin

0

Dlaczego nie dodać linku do aktualizacji statusu?

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

Wypróbowałem też. Twitter po prostu pokazuje to jako zwykły tekst. –

+0

Uwaga: adresy URL będą się liczyć z limitem znaków tweet – AtAFork

1

Twython wydaniu 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']])