Автоматический постинг в закладки. Примеры работы с cURL

Автоматический постинг в закладки. Примеры работы с curlПродолжаем изучать cURL на примерах. Кто не в курсе что это такое и “с чем его едят”, читаем статью по введению в cURL. Настало время сделать что-нибудь полезное, например, скрипт автоматического постинга данных. Для этой цели я выбрал сервис социальных закладок memori.ru, позволяющий зарегистрированным в нем пользователям добавлять ссылки на понравившиеся им сайты для каталогизации и обмена с друзьями или знакомыми. Несмотря на то что подавляющее большинство подобных сервисов находятся под фильтрами поисковых систем (ПС) и прямые бэк-линки с них не учитываются, закладки могут быть полезны для быстрой индексации страниц вашего сайта, поэтому их услугами вебмастера пользуются до сих пор.

Чтобы четко представлять что автоматизировать, вначале взглянем на алгоритм ручного добавления ссылки в memori.ru:

  1. Пользователь авторизуется в системе (вводит логин и пароль)
  2. Заполняет форму, вбивая урл, описание, тэги и пр. будущей закладки.
  3. Отправляет данные о закладке на сервер

Вот эти три шага мы и заставим выполнять наш скрипт.

Цель:
Реализовать скрипт автоматического постинга ссылок в сервисе социальных закладок memori.ru с помощью cURL.

Детали реализации:
Код разбил на четыре файла (ссылка на архив с ними в конце поста):

  • config.php – конфигурационный файл, здесь задаются логин и пароль аккаунта в memori.ru
  • index.php – форма для добавления закладки
  • linkaddaction.php – скрипт постинга
  • memori_ru.class.php – класс содержащий методы, использующие cURL для эмуляции работы браузера.

Тексты всех файлов не привожу, т.к. на мой взгляд самое интересное – методы login(), linkadd(), linkaddaction() в классе Memori_Ru (см. файл memori_ru.class.php). Они являются хорошими примерами cURL взаимодействия между клиентской и серверной сторонами. Вот их и поглядим.

Метод login(). Авторизует нас в memori.ru. В нем мы отправляем на сервер POST запрос с параметрами login, password, membermy, а в ответ получаем куки для дальнейшей идентификации.

function login()
	{
        curl_setopt($this->curl, CURLOPT_URL, "http://memori.ru/login/");
	curl_setopt($this->curl, CURLOPT_HEADER, 1);
	curl_setopt($this->curl, CURLOPT_POST, 1);
	curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($this->curl, CURLOPT_POSTFIELDS, 'login='.urlencode($this->login).'&password='.urlencode($this->password).'&membermy='.urlencode($this->membermy));
	curl_setopt($this->curl, CURLOPT_USERAGENT, $this->browser_name);
	curl_setopt($this->curl, CURLOPT_COOKIEJAR, $this->cookie_file);
	curl_setopt($this->curl, CURLOPT_REFERER, "http://memori.ru/");
 
	$this->res = curl_exec($this->curl);
 
	if(!$this->res)
		{
		$this->error = curl_error($this->curl).'('.curl_errno($this->curl).')';
		return $this->error;
		}
	}

Метод linkadd(). Запрашивает страницу с формой добавления закладки. Метод может показаться лишним на первый взгляд, но на самом деле разработчики системы ввели простенькую защиту от автоматического постинга. Суть заключается в том что в форму добавляется скрытое поле,

1
<input type="hidden" name="token" value="454fc8b495" />

значение которого каждый раз меняется, его необходимо возвращать обратно иначе закладка не примется сервером. Метод класса получает содержимое страницы с формой, парсит его, получая значение вышеупомянутой переменной token для передачи следующему методу.

function linkadd()
	{
	curl_setopt($this->curl, CURLOPT_URL, "http://memori.ru/linkadd/");
	curl_setopt($this->curl, CURLOPT_HEADER, 1);
	curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($this->curl, CURLOPT_USERAGENT, $this->browser_name);
	curl_setopt($this->curl, CURLOPT_COOKIEJAR, $this->cookie_file);
 
	$this->res = curl_exec($this->curl);
 
	if(!$this->res)
		{
		$this->error = curl_error($this->curl).'('.curl_errno($this->curl).')';
		return $this->error;
		}
	else
		{
		$token_value_start_pos = "<input type=\"hidden\" name=\"token\" value=\"";
		$token_value_end_pos = "\" />";
 
	        $pos1 = strpos($this->res,$token_value_start_pos);
		$pos2 = strpos($this->res,$token_value_end_pos,$pos1);
		$tmp= $pos1+strlen($token_value_start_pos);
		$this->token_value = substr($this->res,$tmp,$pos2-$tmp);
		}
	}

Метод linkaddaction(). Отсылка данных на сервер методом POST. Передается куча параметров: token, book, urlRedirect, hdescr, mark, url, title, description, tags. После вызова этого метода закладка должна появиться в сервисе.

function linkaddaction()
	{
	curl_setopt($this->curl, CURLOPT_URL, "http://memori.ru/linkaddaction/");
	curl_setopt($this->curl, CURLOPT_HEADER, 1);
	curl_setopt($this->curl, CURLOPT_POST, 1);
	curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($this->curl, CURLOPT_POSTFIELDS,"token=".$this->token_value."&book=&urlRedirect=&hdescr=&mark=&url=".urlencode($this->url)."&title=".urlencode($this->title)."&description=".urlencode($this->description)."&tags=".urlencode($this->tags));
	curl_setopt($this->curl, CURLOPT_USERAGENT, $this->browser_name);
	curl_setopt($this->curl, CURLOPT_COOKIEJAR, $this->cookie_file);
 
	$this->res = curl_exec($this->curl);
 
	if(!$this->res)
		{
		$this->error = curl_error($this->curl).'('.curl_errno($this->curl).')';
		return $this->error;
		}
	}

Скачать скрипт автоматического постинга в memori.ru

Замечу что в других закладочных сервисах может присутствовать капча, тогда придется получать curl библиотекой файл-изображение, отображать его и вводить вручную буквы и цифры. И кстати, если кто то знает про закладки не под фильтром с прямыми бэк-линками, то поделитесь информацией, я постараюсь добавить автопостинг для них.

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

  1. seownik

    попробую реализовать + если получится плагин под Вп накатаю!

  2. Адский

    Закладки, их все постили, даже я) а курл это круто! :)

    Пришел к тебе по гостевому посту с линкфида, норм статья, особенно про api, а там можно не пароль посылать, а хеш?

  3. Diz

    Адский:
    Отсылки хэша пароля нету. Думаю что разработчики Linkfeed.ru посчитали, что достаточно того что обмен происходит через https.

  4. kinourl.info

    Отличный скрипт. Будем использовать для своего кино-портала.

www.dalpico.ru люди икс играть бесплатно онлайн.