2015-12-21 113 views
3

我已經在網上搜索了一個通過Python API(Python for Facebook)將照片上傳到Facebook的照片。像這樣的問題已經在stackoverflow之前問過,但沒有找到我已經找到工作的答案。使用Python API將圖像上傳到Facebook

我得到的工作是:

import facebook as fb 

cfg = { 
    "page_id"  : "my_page_id", 
    "access_token" : "my_access_token" 
    } 

api = get_api(cfg) 
msg = "Hello world!" 
status = api.put_wall_post(msg) 

,我已經定義了get_api(CFG)功能,因爲這

graph = fb.GraphAPI(cfg['access_token'], version='2.2') 

# Get page token to post as the page. You can skip 
# the following if you want to post as yourself. 
resp = graph.get_object('me/accounts') 
page_access_token = None 
for page in resp['data']: 
    if page['id'] == cfg['page_id']: 
     page_access_token = page['access_token'] 
graph = fb.GraphAPI(page_access_token) 
return graph 

這確實張貼消息頁面。 但是,如果我不想上傳圖片,那麼一切都會出錯。

# Upload a profile photo for a Page. 
api.put_photo(image=open("path_to/my_image.jpg",'rb').read(), message='Here's my image') 

我得到了可怕的GraphAPIError:(#324)需要上傳文件對計算器爲我工作的解決方案,其非。 如果我不是發出以下命令

api.put_photo(image=open("path_to/my_image.jpg",'rb').read(), album_path=cfg['page_id'] + "/picture") 

我得到GraphAPIError:(#1)無法獲取圖片爲此,我一直沒能找到一條解決方案。

是否有人在那裏請指出我正確的方向爲我提供一個當前的工作示例?將不勝感激,謝謝!

+0

的圖像必須是一個文件對象不是它的背景下,也是你的行中包含有故障的單引號。沒有測試過,你應該嘗試:'api.put_photo(image = open(「path_to/my_image.jpg」,'rb'),message ='這是我的圖像')''。 –

+1

@KlausD。 是的,當我發佈這個問題的時候,我看到了我的錯誤引號,但是那時已經太晚了。但是,在我的真實代碼中,我沒有這樣的標記。 如果我嘗試你的建議 api.put_photo(image = open(「path_to/my_image.jpg」,'rb'),message ='Any message') 我仍然* GraphAPIError:(#324)需要上傳文件* 但謝謝你的建議! –

+0

你能列出你正在使用的文件和目錄結構以及你的python調用開始於哪個目錄嗎 – phwd

回答

2

可以導致取決於照片上傳電話是怎麼做的幾件事情一324 Facebook的錯誤

  • 缺少像
  • 不是Facebook
  • 目錄路徑不正確參考
  • 識別的圖像

原始捲曲電話看起來像

curl -F '[email protected]_image.jpg' 'https://graph.facebook.com/me/photos?access_token=YOUR_TOKEN'

只要上述呼叫有效,您就可以確定照片與Facebook服務器一致。

如何發生

touch meow.jpg

curl -F '[email protected]' 'https://graph.facebook.com/me/photos?access_token=YOUR_TOKEN'

這是一個324錯誤,你已經看到損壞的圖像文件也發生的一個例子。

使用.read()將傾的實際數據

空文件

>>> image=open("meow.jpg",'rb').read() 
>>> image 
'' 

圖像文件

>>> image=open("how.png",'rb').read() 
>>> image 
'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00... 

這兩不會與呼叫api.put_photo和工作,你所看到的克勞斯·d提到電話應該沒有read()

所以這個調用

api.put_photo(image=open("path_to/my_image.jpg",'rb').read(), message='Here's my image')

實際上變成

api.put_photo('\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00...', message='Here's my image')

這僅僅是一個字符串,它是不是被通緝。

人們需要的圖像參考<open file 'how.png', mode 'rb' at 0x1085b2390>

相關問題