对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:\xampp\perl\bin\perl.exe"
use HTTP::Cookies;
use LWP::UserAgent;

print "Content-type: text/html\n\n";

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也是可以做的!