2013-03-16 4 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"; 
} 

С помощью этого кода я просто хочу загрузить фотографию профиля данного человека (#NAVIGATE TO USER PAGE) и сохранить его. Тем не менее, я получаю сообщение о том, что изображения не найдены! WHYYY? (Я нашел $ mech-> find_image (url_regex => qr/s160x160 /,), чтобы найти изображение на странице профиля.)Perl: WWW: Механизируйте, получив изображение профиля Facebook?

+0

это изображение действительно существует? – gaussblurinc

+2

Правильный способ сделать это через API-интерфейс [Facebook Graph] (https://metacpan.org/module/Facebook::Graph). – friedo

+3

Это почти наверняка нарушит некоторые правила в Facebook TOS. –

ответ

0

Вы используете новый экземпляр Mechanize в вашем файле downloadImage. И этот вопрос не разрешен 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"; 
}