Перл: WWW:Mechanize, получение изображения профиля Facebook?

#!/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) и сохранить его. Однако я получаю сообщение об ошибке, говорящее о том, что изображения не найдены! ПОЧЕМУ? (Я использую $mech->find_image(url_regex => qr/s160x160/,), чтобы найти изображение на странице профиля.)


person Community    schedule 16.03.2013    source источник
comment
это изображение действительно существует?   -  person gaussblurinc    schedule 16.03.2013
comment
Правильный способ сделать это — использовать API Facebook Graph.   -  person friedo    schedule 16.03.2013
comment
Это почти наверняка нарушит какое-то правило в TOS Facebook.   -  person Dave Cross    schedule 16.03.2013


Ответы (1)


Вы используете новый экземпляр 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";
}
person gangabass    schedule 17.03.2013