Всея ПЫХА epsyl adw0rd Мавр ГО Irinax http://hell.helldude.ru - это пиздец

Парсинг! Закрытые авторизацией сайты. vkontakte.ru … как много дыр я слышу в этом слове ..

Рубрики: (phpdude Curl, Парсинг, Регулярные выражения) Автор: phpdude 12-01-2009

Теги : , , , , , , ,

вечер добрый. поперло писать записки в этот угоблог.

такс, я так понимаю что если есть нюбы, которые меня читают/читали/слушали/неслушали/ненавидели и все еще ненеавидят, то это может быть им очень полезным :)

поехали.

цель — спарсить данные с сайта, который требует авториации. про http auth basic я промолчу. почитайте на википедии или подобном ресурсе.

беру тупо сайт вконтакте.сру.

допустим я хочу своровать список пользователей.

начну прямо с кода. может даже им и закончу. на этот раз я попытался его откомментировать хорошенько :)

сразу скажу, что писать дедовским методом — curl_init + curl_fuck я не стал, мне этот метод не интересен, вам может и интересен, но мне нет. мне более интересно чтобы моим curl.php классом пользовались, иначе на кой хер я его выложил :)

как я и раньше говорил, curl.php делает НУ ОЧЕНЬ МНОГО работы программиста над курлом.

вот код.

http://phpdude.ru/code/LdYObs (опять продвигаю свой сервис;)

<?
require_once ‘Curl.php’;

/** [! Авторизация **/
$curl = new Curl();
$curl->init("http://vkontakte.ru/login.php")->serverfriendly()->setopt("post",array("email"=>"[email protected]","pass"=>"qwerty"))->exec(); // авторизуемся. далее будем использовать этот объект.

/** Авторизация !] **/

header(«Content-type: text/html; charset=utf-8″); // ебаный контакт использует cp-1251, поэтому перекрываем <meta с помощью заголовка сервера
echo «<base href=\»http://vkontakte.ru\» />»; // устаналиваем базу для всяких ссылок и картинок.

/** [! Парсинг данных **/
$html = $curl->init("http://vkontakte.ru/people.php")->serverfriendly()->exec();

preg_match_all("#<dl class=\"clearFix\">.*?</dl>#ism",$html,$people);
$people = $people[0];

foreach($people as $k=>$p)
{
preg_match_all(«#<dt>(.*?):</dt>\\s*<dd>(.*?)</dd>#ism»,$p,$info);
$people[$k] = array_combine($info[1],array_map(«strip_tags»,$info[2]));
}

/** Парсинг данных !] **/

echo «<pre>»;
print_r($people);

рассказать бы немного об этом коде.

в первой строке поключаю свой любимый класс.

дальше создаю объект с которым буду работать. курл класс написан так, что его можно «настраивать» не мусоря в коде, то есть он написсан по паттерну (если не ошибаюсь, читал в каком то «блоге — от новичка до профессионала» … блог еще на уровне новичка) «цепочка». то есть большинство миетодов объекта возвращают сам объект.

третья строка — собственно авторизация на сайт. вконтакт использует POST при авторизации, ну так что, накормим его постом :-D

$curl->init(«http://vkontakte.ru/login.php»)->serverfriendly()->setopt(«post»,array(«email»=>«[email protected]»,«pass»=>«qwerty»))->exec();

метод exec по умолчанию возвращает строку — html код полученной страницы. мне она не нужна ну никак. поэтому просто вызвал метод и забыл.

теперь у меня есть curl объект который знает про кукисы авторизации на сайте. далее поработаем над ним :)

переинициализируем его и получим html код интересуещей нас страницы (http://vkontakte.ru/people.php)

$html = $curl->init(«http://vkontakte.ru/people.php»)->serverfriendly()->exec();

тра лялял! всего 2 строки и мы АВТОРИЗОВАЛИСЬ + Скачали нужный нам html код.

далее я известным по прошлой статье методом собираю инетерсующие меня данные  и вывожу принтром. все :)

с комментариями и прочей поебенью у меня все заняло 29 строк :)

код всего лишь прототип, но сюда можно легко добавить поиск нужного пользователя сортировки контакта и тп … что душе угодно :)

в общем, надеюсь эта херня кому нить поможет :)

кстати для неверующих :)

http://94.31.169.103/vkontakte/people.php
тут рабочая копия.

Комментарии RSS тут:

Всего отзывов: 35 на Парсинг! Закрытые авторизацией сайты. vkontakte.ru … как много дыр я слышу в этом слове ..

Оставьте свой отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

О САЙТЕ

Крик души может быть будет на этом сайте, а может и будет что-нибудь другое :)



Яндекс.Метрика