2017-04-09 37 views
1

編輯:更新的代碼。只是不斷收到API錯誤。使用twython中的圖像更新Twitter狀態,不斷獲取API錯誤?

如何使用twython和python 3x從狀態更新到Twitter的URL發佈圖像?我已經閱讀過文檔,但它僅概述了在目錄中打開本地文件,並且我已經看過SO上的一些主題。這是迄今爲止我所得到的錯誤代碼,我不知道如何解決。

我該如何更改才能讓此圖片發佈?這給了我twython.exceptions.TwythonAuthError: Twitter API returned a 401 (Unauthorized), Could not authenticate you. 分鐘擊中twitter.upload

from twython import Twython, TwythonError 
import os 
try: 
    from StringIO import StringIO 
except ImportError: 
    from io import StringIO 

import urllib 
import requests 

CONSUMER_KEY = os.environ['CONSUMER_KEY'] 
CONSUMER_SECRET = os.environ['CONSUMER_SECRET'] 
ACCESS_TOKEN = os.environ['ACCESS_TOKEN'] 
ACCESS_TOKEN_SECRET = os.environ['ACCESS_TOKEN_SECRET'] 
twitter = Twython(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET) 
twitter.verify_credentials() 

url = "https://farm2.staticflickr.com/1127/4605090363_4a96e64ff1.jpg" 

response = requests.get(url) 
photo = requests.get(response.url).content 
response = twitter.upload_media(media=photo) 
twitter.update_status(status='Checkout this cool image!', media_ids=[response['media_id']]) 

該解決方案:twitter.post('/statuses/update_with_media', params = {'status': 'Testing New Status'}, files = {'media': StringIO(photo)})

給了我一個TypeError: initial_value must be str or None, not bytes

我不能得到這個工作。我不知道爲什麼。它是一個主要帳戶。我沒有使用「用twitter登錄」,它不是一個web應用程序。只是一個工人機器人。

我很困惑,我搞不清楚我做錯了什麼。它會發布文本狀態良好,我可以搜索,獲取用戶時間表,發送DMS等。我做錯了什麼?

+0

您在這裏缺少一個步驟:https://twython.readthedocs.io/en/stable/usage/advanced_usage.html#posting-a-status-with-an-editing-image - 你沒上傳圖片。你應該一直在訪問'upload_media'的響應'media_id' – karthikr

+0

謝謝!錯過了。現在我得到一個「缺少媒體參數」的錯誤代碼。更新後。我真的希望Twitter會讓我通過一個網址。 : -/ –

+0

好的。現在,只要遇到上傳,我就會收到401認證錯誤。程序我認證的讀取和寫入。它仍然會發布文本更新。奇怪的。不知道。 –

回答

0

事實證明,這是一個關於twython在上傳媒體時期望的類型錯誤。遠程拉下圖像並呼叫內容會給我們一個bytes,但是Twython需要一個io對象。

這有一個在堆棧跟蹤401是一個紅色的鯡魚,但我們可以給twython它想要加入io和讀取請求的內容爲BytesIO

from twython import Twython, TwythonError 
from io import BytesIO 
import os 

import urllib 
import requests 

CONSUMER_KEY = os.environ['CONSUMER_KEY'] 
CONSUMER_SECRET = os.environ['CONSUMER_SECRET'] 
ACCESS_TOKEN = os.environ['ACCESS_TOKEN'] 
ACCESS_TOKEN_SECRET = os.environ['ACCESS_TOKEN_SECRET'] 
twitter = Twython(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET) 
twitter.verify_credentials() 

url = "https://farm2.staticflickr.com/1127/4605090363_4a96e64ff1.jpg" 

response = requests.get(url) 
photo = BytesIO(response.content) 
response = twitter.upload_media(media=photo) 
twitter.update_status(status='Checkout this cool image!', media_ids=[response['media_id']]) 
相關問題