2015-07-31 23 views
12

Questo è il codice che ho usato,Come aggiornare lo stato di Twitter con l'immagine usando l'URL dell'immagine 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") 

Questo è l'errore che sto ricevendo

No such file or directory 

So che devo usare un file dalla directory locale con il comando precedente . C'è un modo per utilizzare un URL durante l'utilizzo di update_with_media?

risposta

18

È necessario utilizzare un file locale per caricare tramite tweepy. Suggerirei di utilizzare una libreria come requests per scaricare il file per primo.

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

funziona bene. C'è un modo per rimuovere il file scaricato temporaneamente una volta che l'operazione è stata completata. –

+2

Sì! basta usare 'os.remove (nomefile)'. Modificherò il mio post per riflettere questo. – Brobin

0

Perché non includere solo il collegamento in un aggiornamento di stato?

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

Ho provato anche questo. Twitter lo mostra semplicemente come testo semplice –

+0

Nota: gli URL contano rispetto al limite di caratteri del tuo tweet – AtAFork

1

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