2015-07-31 15 views
12

Bu benim kullandığım kodu Tweepy'de resim URL'sini kullanarak resim ile twitter durumunu nasıl güncelleyebiliriz?

#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") 

Bu

ben yukarıdaki komutla yerel dizinden bir dosyayı kullanmak zorunda olduğunu biliyorum
No such file or directory 

alıyorum hatadır . Update_with_media kullanırken bir URL kullanmanın bir yolu var mı?

cevap

18

Tweepy yoluyla yüklemek için yerel bir dosya kullanmanız gerekir. Önce dosyayı indirmek için requests gibi bir kitaplık kullanmanızı öneririm.

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

İşleri cezası. İşlem bittiğinde geçici indirilen dosyayı kaldırmak için herhangi bir yolu var mı. –

+2

Evet! sadece os.remove (dosya adı) 'kullanın. Gönderiyi bunu yansıtacak şekilde düzenlerim. – Brobin

0

Neden bağlantıyı bir durum güncellemesine dahil etmiyoruz?

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

Ayrıca denedim. Twitter sadece düz metin olarak gösterir –

+0

Not: URL'ler tweet karakter sınırınıza göre sayılır – AtAFork

1

Twython Yayın 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']])