Скрипт логина Вконтакте на Perl
НЕРАБОЧИЙ — Рабочий логин вконтакте выложил тут — http://www.skazkin.ru/p/novyj-login-vkontakte-perl-curl.html#comments
Пример использования:
- my $cookies = getLogin({login=>q[user@email.ru],password=>q[123456]});
В результате получаем или ссылку на массив с куками, которые мы потом можем использовать для логина, или же undef. Под катом сам сниппет.
- use Carp;
- use LWP::UserAgent;
- use HTTP::Cookies;
- sub getLogin {
- my $params = shift;
- my $ag = qq[MegaBot]; # ЮзерАгент
- #Ругаемся - если на вход получили фигню
- croak qq[Hash needed!] if ref($params) ne 'HASH';
- croak qq[No login!] if !$params->{login};
- croak qq[No password] if !$params->{password};
- # Создаём агента
- my $ua = LWP::UserAgent->new(keep_alive => 1, cookie_jar => HTTP::Cookies->new, timeout => 60);
- $ua->agent($ag);
- # Подставляем разные штучки
- $ua->default_header('Referer' => "http://vkontakte.ru/index.php");
- $ua->default_header('X-Requested-With' => "XMLHttpRequest");
- $ua->default_header('Content-Type'=>q[application/x— www— form— urlencoded; charset=UTF— 8]);
- $ua->default_header('Cookie'=>q[remixlang=0; remixchk=5]);
- # Совершаем ритуал отправки логина и пароля
- my $x = $ua->post(q[http://vkontakte.ru/login.php], {
- op => qq[a_login_attempt],
- email => $params->{login},
- pass => $params->{password},
- expire => 0
- });
- # Получаем куки
- if(exists $ua->cookie_jar->{COOKIES}->{'vkontakte.ru'}->{q[/]}->{remixemail}->[1]){
- my @cookies;
- push(@cookies,q[remixmid=].$ua->cookie_jar->{COOKIES}->{'vkontakte.ru'}->{q[/]}->{remixmid}->[1]);
- push(@cookies,q[remixemail=].$ua->cookie_jar->{COOKIES}->{'vkontakte.ru'}->{q[/]}->{remixemail}->[1]);
- push(@cookies,q[remixpass=].$ua->cookie_jar->{COOKIES}->{'vkontakte.ru'}->{q[/]}->{remixpass}->[1]);
- push(@cookies,q[remixsid=].$ua->cookie_jar->{COOKIES}->{'vkontakte.ru'}->{q[/]}->{remixsid}->[1]);
- return \@cookies;
- }
- return undef;
- }
Перестал работать скриптик.
Потрахался и что-то никак не разберусь в чём дело.
По $x->content; вылезает строка vklogin и всё.
Похоже как-то связано с изменившейся главной страницей и тамошними JavaScript скриптами. В JS не силён, видать поэтому не получается никак понять в чём же дело.
Вероятно. На днях посмотрю, — исправлю отдельным постом :)
Спасибо большое за пост. В принципе, сам бы написал, но удобно когда есть готовое. Попробую разобраться что там не работало.
Кстати, бложик хороший. Подпишусь. Думал, что интересных IT-блогов уже не осталось.
Выше пишут, что работать перестал — ещё не проверял. Но в целом там не составит труда что-то поменять самому — сниппеты предельно простые стараюсь писать :)
Уже смотрю модуль Dyatel.pm
Правда, он зависим, но я смотрю.
У меня задача простая, как паровоз — распарсить плейлист с аудиозаписей пользователя. Нужно только залогиниться, а дальше — дело техники.
Ага
А я сейчас на курле пытаюсь новую авторизацию сделать. Они сделали серию редиректов — то есть самый простой способ будет хранить куку в файле, — это решение было как раз для того, чтобы в скрипте получить в удобном виде, так сказать :)
Через часок, думаю, поборю и выложу новый вариант)
Ну я бы и так ее в файле хранил. Зачем логиниться каждый раз, как нужно что-то оттуда утянуть? Гораздо проще залогиниться однажды. Сессии они хранят до потери пульса, так что нужно действовать как браузер: логин — получение кук — хранение кук — использование сохраненных кук для следующих обращений.
А вот и мы. Уже без выпендрёжа — простой логин в файл+забавная функция, почти полную версию которой сделал предыдущим постом.
Надеюсь, пригодится.
с WWW::Curl::Easy бывают проблемы при установке через CPAN — нужен curl.
В Ubuntu/Debian решается просто — apt-get install libwww-curl-perl