2013-03-16 3 views
1
#!/usr/bin/perl 

#USE DECLARATIONS 
use strict; 
use warnings; 
use WWW::Mechanize; 
use Term::ANSIColor; 

#VARIABLE DECLARATIONS 
my $mech = WWW::Mechanize->new(); 
my $img; 
my $title; 
my $pic_page; 
my $url; 
my $count; 
my @links; 

#CONNECT TO FACEBOOK 
$url = 'https://www.facebook.com/'; 
$mech = WWW::Mechanize->new(); 
$mech->agent_alias('Linux Mozilla'); 
$mech->get($url); 
$title = $mech->title(); 

#LOGIN FORM 
print "Connected to Facebook.\n"; 
print "Logging in..."; 
$mech->form_id("login_form"); 
$mech->field("email",'[email protected]'); 
$mech->field("pass",'mypass'); 
$mech->click(); 
print "done!\n"; 

#NAVIGATE TO USER PAGE 
$mech->get("https://www.facebook.com/some.profile1234"); 
$title = $mech->title(); 
print "Finding $title 's profile pictue...\n"; 

#FIND PROFILE PICTURE 
$img = $mech->find_image(url_regex => qr/s160x160/,); 
print $img->url(); 
downloadImage($img->url(),$mech->title().".jpg"); 

sub downloadImage 
{ 
    my $local_file_name = $_[1]; 
    my $b = WWW::Mechanize->new; 
    print "Downloading: $_[1]..."; 
    $b->get($_[0], ":content_file" => $local_file_name); 
    print "done!\n"; 
} 

이 코드를 사용하면 주어진 사람의 프로필 사진 (# 사용자 페이지로 이동)을 다운로드하여 저장하기 만하면됩니다. 그러나 이미지를 찾을 수 없다는 오류가 발생했습니다. 왜? (프로필 페이지에서 이미지를 찾으려면 $ mech-> find_image (url_regex => qr/s160x160 /)를 사용하고 있습니다.)Perl : WWW : Mechanize, Facebook 프로필 이미지 가져 오기?

+0

이 이미지는 정말 존재인가? – gaussblurinc

+2

올바른 방법은 [Facebook Graph] (https://metacpan.org/module/Facebook::Graph) API를 사용하는 것입니다. – friedo

+3

이것은 Facebook TOS의 규칙을 거의 깨뜨릴 것입니다. –

답변

0

downloadImage 하위에서 Mechanize의 새 인스턴스를 사용 중입니다. 이 인스턴스는 Facebook에 의해 승인되지 않았습니다.

이 시도 :

downloadImage($img->url(),$mech->clone()); 

sub downloadImage 
{ 
    my $mech = $_[1]; 
    print "Downloading: $_[1]..."; 
    $mech->get($_[0], ":content_file" => $mech->title() . ".jpg"); 
    print "done!\n"; 
}