2012-06-21 28 views
3

我對Facebook很新穎(是的,我是唯一一個),但我想用Python編程式地在牆上發佈消息。如何以編程方式發佈在Facebook牆上?

我需要做些什麼才能做到這一點?我很困惑。我已經看到關於這個問題的大部分問題都集中在如何讓應用程序以某種方式與Facebook進行交互,但是我想發佈,就好像我是一個簡單的用戶(恰好「擁有」該特定Facebook頁面的用戶)。我真的需要去創建一個應用程序嗎? (順便說一句,即使有這個問題,我也遇到了問題......它告訴我,即使通過短信驗證,我的帳戶似乎也是假的或無效的)。我想有一種更簡單的方法,使用POST請求介紹我的憑據,但我沒有閱讀過類似的內容。

我原以爲this是我所需要的,但它導致了一個頁面來創建一個應用程序。

有些指針?

順便說一下,我通過Graph API Explorer中的publish_stream權限獲得了令牌(使用擴展權限選項卡)。似乎這個權限沒有過期日期,但不推薦。對於令牌有更好的選擇嗎?

謝謝

+0

忘記蟒蛇的那一刻,我不知道你是問專爲Facebook或通常人們可能會如何自動化而無需瀏覽器發送POST頭? – Kevin

+0

Facebook,但無論如何,它可能涉及使用Facebook API。 –

+0

facebook api會是「正確」的方式來做到這一點,但你可能可以用curl把它一起劈開,我會給你一個例子 – Kevin

回答

0

Facebook比它會出現的其他網站有點棘手。

一邊看螢火蟲.NET下的POST選項卡,在登錄時,我看到下面的POST參數:

charset_test €,´,€,´,水,Д,Є 
default_persistent 1 
email myusername 
lgnjs 1340241652 
lgnrnd 182050_CuPx 
locale en_US 
lsd AVqwALVx 
pass mypassword 
persistent 1 
timezone 240 

我還不知道lsd paramater是什麼,但我沒有發現什麼lgnrnd是在登錄之前查看登錄頁面的來源。它似乎在那裏使自動化驗證變得更加困難。

您首先需要您的腳本爲該值刮取該登錄頁面,並將其存儲在一個變量中。然後,捲曲的例子是這樣的:

curl -L "https://www.facebook.com/login.php?login_attempt=1" \ 
    --cookie-jar /tmp/cookies.txt \ 
    --data-urlencode "email=myusername" \ 
    --data-urlencode "lgnrnd=$lgnrnd" \ 
    --data-urlencode "pass=mypassword" 
    and so forth, with all the parameters... 

這是未經測試的,當然,我不知道什麼是其中的一些參數值還沒有,但你應該得到的想法。你可以使用像美麗湯這樣的python模塊來應用上面的基本概念。

然後你會做同樣的事情,看着NET標籤找到你發佈到你的facebook牆上時發送的參數,並把它們放在一起。

請注意,我使用curl的--cookie-jar選項來存儲和使用cookie。您需要一種方法來保存和使用請求中的cookies,這就是我展示這一點的原因。

希望可以幫助你開始無論如何..

+0

剛剛意識到一些事情。對於lgnrnd值,我相信你需要「即時」存儲這個值,這意味着,你不能提前獲取它,然後重新登錄,因爲它在刷新時重新生成。合理?其中一天,我會測試這一點,我會自己嘗試,我會告訴你。 – Kevin

+0

謝謝。這給了我一個好的開始。我找到了另一種使用API​​的方式(儘管我不知道我是否按照預期使用它)。我會將其作爲準備好接收評論的答案發布。 –

0

這是怎麼回事?

import urllib2, urllib 
parameters = {} 
parameters['access_token'] = MY_TOKEN 
parameters['message'] = 'Hello world' 
target = 'https://graph.facebook.com/MY_ID/feed' 

parameters = urllib.urlencode(parameters) 
handler = urllib2.urlopen(target, parameters) 
while True: 
    if handler.code < 400: 
     print handler.read() # Gets post_id 
     break 
    elif handler.code >= 400: 
     print 'Error' # :-(
     break 

這是否存在問題?也許更好的方法?註釋?

感謝

相關問題