對Facebook使用Perl- Part I: Login

當Facebook在2010年開始蟬聯台灣搜尋排行榜的冠軍後,一直在現在還沒有人可以撼動這個招牌,而Perl呢?這個1987年就開發出來的語言,到現在已經有24個年頭了,很多人或多或少都會用到,可是在Facebook上的官方網站的開發人員手冊,卻沒有提到Perl的支援,所以今天就讓我們看看Panos Toulis他也是哈佛來的,要如何地駭客Facebook一下,就讓ㄚ琪在這為你翻譯一系列的文章吧!在這篇文章中我只會介紹如何登入到Facebook上,在下一篇,我會列出原始碼來更新你的狀態。
就歷史來說,Fb的確有API給希望建構他們的應用程式在Facebook平台的開發人員用,你可以從這裡開始,但這不是我要的地方,API可以給你一些選擇但是它是用不同的觀點來建構的:第三方的開發人員存取那些人的帳號,這就是為什麼API是非常嚴格,而這是有道理的不讓一個應用程式永很多你的資料,另外也有一堆過多所謂的Facebook客戶端,而多數的客戶端只是Facebook API的外覆而已(就像這個 google code project),在大部分的情況下你會被重新導向到Facebook的網頁,真是可恥…
我們就跟Facebook API,再見了,讓我們坐下來談談如何登錄到Facebook,當然,語言的選擇…還有什麼, Perl (因為簡單的事情應該是容易的,而複雜的也不是不可能),為了登入到Facebook我們必須照著下面步驟做:
1. 到’http://www.facebook.com/login.php’,然後設定我們的虛擬瀏覽器來收集cookies (GET 請求)
2. 用適當的參數拜訪 ‘https://login.facebook.com/login.php’(POST請求)
3. 假如我們成功了,那麼我們就可以安全地瀏覽’http://www.facebook.com/home.php’ 來取得我們的個人檔案。
要這樣做我們需要LWP::UserAgent 類別(事實上是在最新版的Perl中)可以用來做我們的虛擬瀏覽器,假如我們想要儲存cookies,我們可以使用Http::Cookies,我們也需要Crypt::SSLeay套件所以我們的代理器支援HTTPS,Ok讓我們這樣做。
這裡有完整的程式碼,解釋如下:

#!"d:xamppperlbinperl.exe"
use HTTP::Cookies;
use LWP::UserAgent;

print "Content-type: text/htmlnn";

my $email; #stores our mail
my $password; #stores our password
my $user_agent = ‘Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6’;

$email = ‘####’; #直接填入Facebook的帳號
$password=’#####’; #填入Facebook的密碼

#chomp($email); #remove last line
#chomp($password);

my %postLoginData; #necessary post data for login
$postLoginData{’email’}=$email;
$postLoginData{‘password’}=$password;
$postLoginData{‘persistent’}=1;
$postLoginData{‘login’}=’Login’;

our $response; #holds the response the HTTP requests
#set the headers, let’s make this a Firefox browser!
our @header = (‘Referer’=>’http://www.facebook.com’, ‘User-Agent’=>$user_agent);

our $cookie_jar = HTTP::Cookies->new(file=>’fbkCookies.dat’,autosave=>1, ignore_discard=>1);

our $browser = LWP::UserAgent->new; #init browser
$browser->cookie_jar($cookie_jar);

$browser->get(‘http://www.facebook.com/login.php’,@header);

#here we actually login!
$browser->post(‘https://login.facebook.com/login.php’,%postLoginData,@header);

#let’s go to the homepage
$response = $browser->get(‘http://www.facebook.com/home.php’,@header);
print $response->content;

Panos Toulis在他所附的程式中有一些錯誤,ㄚ琪已一一改正並用自己適合的輸出入方式做調整,實作的時候就不再測試是否有異常,因為那個判斷也是有問題的!在下一次ㄚ琪如果再拿起perl來看的時候,會順便寫一些如何讀取並送出Facebook狀態的文章,在這裡待著不要走因為這裡會很有趣,最終的Perl指令碼會有500行以上的程式碼能夠送出訊息、讀取訊息然後跟其他人聊天,太cool了,原來用Perl也是可以做的!

感謝你看到這裡,很快就可以離開了,但最好的獎勵行動就是按一下幫我分享或留言,感恩喔~

點我分享到Facebook

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *