Archive

Archive for the ‘бот’ Category

Автоматизация подписки на рассылку FeedBurner. Часть 3

March 9th, 2010 No comments

Заключительная часть трилогии о том, как взять feedburner’овскую капчу, заставить пользователя ввести её и подписать его на рассылку feedburner.

Часть 1, Часть 2

В этой статье разберем серверную часть программы – php-скрипт, задача которого обратиться к сервису feedburner, получить капчу, передать пользователю, принять расшифровку капчи от пользователя и передать feedburner. Я использовал ZendFramework, но в основном по мелочи.

Итак, весь скрипт состоит из двух больших блоков. Первый – для случая, когда мы только получаем капчу, второй – для случая, когда пользователь её уже расшифровал.

Когда мы обращаемся к фидбернеру в первый раз отрабатывает следующий скрипт:

$client = new Zend_Http_Client(/* здесь должна идти строка с адресом рассылки, которую генерирует feedburner */);
$client->setParameterPost(array(
	        'loc'  => 'ru_RU',
	        'uri'   => /* данные вашей рассылки */,
	        'email' => /* данные вашей рассылки */,
	    ));
$resp = $client->request('POST');	// выполняем POST запрос
$headers = $resp->getHeaders();
 
// меняем относительные пути на полные
$response =  str_replace('captcha?','http://feedburner.google.com/fb/a/captcha?', $resp);
$response =  str_replace('="/fb','="http://feedburner.google.com/fb', $response);
 
// В ответ на наш запрос feedburner генерирует форму
// для заполнения с рядом скрытых (hidden) полей.
// Значение этих полей нам нужно достать и отправить
// обратно фидбернеру при следующем обращении
// Здесь я опушу большую часть однотипных действий
$pos1 = strpos($response, 'action="');
$action = substr($response, $pos1 + 8);
$pos11 = strpos($action, '"');
$action = substr($action, 0, $pos11);
 
$pos1 = strpos($response, 'input type="hidden" name="uri"');
$uri = substr($response, $pos1 + 38);
$pos11 = strpos($uri, '"');
$uri = substr($uri, 0, $pos11);

А далее нам остается только сформировать собственный кусок кода HTML, который AJAX вернет клиенту:

<form>
	<input type="hidden" id="fbaction" name="fbaction" value=""/>
	<input type="hidden" id="fburi" name="fburi" value=""/>
	<input type="hidden" id="fbemail" name="fbemail" value=""/>
	<input type="hidden" id="fbtoken" name="fbtoken" value=""/>
	<input type="hidden" id="fbcookie" name="fbcookie" value=""/>
 
</form>

$action, $uri, $email, $token – то, что мы достали из кода, сгенерированного фидбернером. $headers[‘Set-cookie’] – куки которые, установил фидбернер, их также нужно передать.

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

// клиент для HTTP-запросов
$client = new Zend_Http_Client($action);
// устанавливаем параметры, которые получили в прошлый
// раз от фидбернера
$client->setParameterPost(array(
		'loc'  => 'ru_RU',
	        'token'  => $_GET['token'],
	        'uri'   => $_GET['uri'],
	        'captcha'   => $_GET['captcha'],
	        'email' => $_GET['email']
	    ));
// не забываем добавить куки
$cookie = Zend_Http_Cookie::fromString($_GET['cookie']);
$client->setCookie($cookie);
// делаем POST запрос к фидбернеру
$response = $client->request('POST');

Вот и все. В $response у нас попадет ответ от фидбернера. Он скажет, что, либо регистрация прошла успешно, либо мы неправильно ввели капчу, либо плохой e-mail и т.п. Я ничего лучше не придумал, как проверять полученный текст на наличие каких-то ключевых слов. Это, в общем-то, тривиальная задача.

Свиттер #3

February 28th, 2010 No comments

Приветствуем вас, наши дорогие читатели!

Тех, кто уже давно с интересом следит за нашим развитием, и тех, кто только что к нам присоединился. В эфире третий номер журнала «Свиттер». Встречайте!

Итак, в этом номере …

Вас ждет увлекательное погружение в мир интернет программирования. Вместе с Дмитрием Ляпиным вы, наконец, узнаете, кто же такой добрый высылает вам на почту утерянные пароли, кто способен так вежливо ответить на самые тупые из ваших вопросов, и без кого уже невозможно представить себе работу нормального сайта. Наших чудо-помошников зовут интернет-боты. И им посвящена целая серия статей нового номера. Не бойтесь, если в вашей голове до сих пор каша, и, говоря откоровенно, вы не понимаете толком, как собственно работает интернет. Специально для вас написана статья об HTTP – все будет расставлено по полочкам, не сомневайтесь 8) А завершить вашу интернет-трапезу мы предлагаем десертом от Юрия Майорова «Как написать свой собственный IM бот менее, чем за 5 минут», перевод статьи Амита Агарвала.

Далее в номере. Рассказ о технологии AJAX от нового друга журнала, который, правда, еще не счел наше знакомство настолько близким, чтобы открыть свое имя. Итак, plastun и его «Введение в AJAX» к вниманию читателей Свиттера.

Эстафетную палочку у Пластуна перехватывает Георгий Могелашвили и учит нас, как использовать технологию AJAX в ASP.NET. В наше время без асинхронности никуда.

Немного отвлечься и подумать о вечном поможет чтение статьи Джоэла Спольски «О том, чего нельзя делать ни в коем случае» в переводе Екатерины Котовой. В жизни каждого программиста рано или поздно наступает момент, когда его код начинает источать не самый приятный аромат, а в лексиконе появляется это страшное слово – рефакторинг.

Обычно мы не включаем в журнал задачки, публикуемые на сайте, но sql-загадка про дни рождения (взявшая первое место по числу комментариев) вызвала у читателей Свиттера просто невиданное волнение. В номер войдет несколько ваших решений, а также решение, добытое Ваней, и единогласно признанное лучшим. Вот что значит посмотреть на проблему под другим углом!

Я смотрю, вы уже начинаете нервничать… А где Кальвадос?! Почему нет Кальвадоса? Хотим обещанный Кальвадос!! Угадала?

Он здесь 8) Андрей Мишанин сдержал свое слово и наливает нам первую рюмку своего чудесного напитка. Так что садитесь поудобнее, дорогие читатели, рассказ из уст настоящего ценителя яблок начинается…

Ну и напоследок Свиттер хочет пожелать своим читателям новых профессиональных успехов, упорства и продуктивности. А чтобы вас как-то приободрить, Александр Никитин познакомит нас с еще несколькими парочками привлекательных гиков. Смотрите и любуйтесь! Нам есть, к чему стремиться)

Все, не смеем больше задерживать. Бегите, бегите уже читать ваш новый номер. Надеемся, что он вам понравится 8)

Скачать журнал в формате PDF

Как написать свой собственный IM бот менее, чем за 5 минут

February 4th, 2010 Comments off

Перевод статьи Амита Агарвала.

Это маленькое пособие покажет Вам, как разработать свой собственный функциональный IM бот, который работает с Google Talk, Yahoo! Messenger, Windows Live и всеми другими Программами мгновенного обмена сообщениями.

Для начала, все, что вам понадобится, это немного базовых знаний в программировании (любой язык подойдет) и веб пространство, где можно разместить вашего бота.

В этом примере, я создал бота, названного «labnol», который читает ваши сообщения и возвращает связанные поисковые фразы, размещенные в Google Suggest. Чтобы увидеть это вживую, добавьте labnol@bot.im в ваш GTalk список контактов и начинайте общаться.

Im_bot

Если вы хотите написать свой собственный IM бот, следуйте этим простым шагам:

Шаг 1. На сайте imified.com попросите приглашения. Вам также следует дать вашему боту подходящее имя, потому что вы можете иметь только один аккаунт, связанный с почтовым ящиком.

Шаг 2. Сообщение с секретным ключом должно прийти на ваш е-мейл в течение следующей минуты. Копируем его и переходим по ссылке.

Шаг 3. Самое время создать бота, который на самом деле является простым скриптом, который находится на вашем веб сервере. Это может быть PHP, Perl, Python или другой язык. Боьлше информации здесь.

Этот PHP скрипт я написал для нашего labnol IM бота. Он читает ваше сообщение, берет релевантную информацию из Google Suggest и отражает ее обратно в IM окно.

<?php
  // Get all the related keywords from Google Suggest
  $u = "http://google.com/complete/search?output=toolbar";
  $u = $u . "&q=" . $_REQUEST['msg'];
 
  // Using the curl library since dreamhost doesn't allow fopen
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $u);
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 
  $xml = simplexml_load_string(curl_exec($ch));
  curl_close($ch);
 
  // Parse the keywords and echo them out to the IM window
  $result = $xml->xpath('//@data');
  while (list($key, $value) = each($result)) {
    echo $value ."<br>";
  }
?>

Шаг 4. Когда ваш скрипт готов, поместите его на ваш веб сервер и скопируйте полное URI. Зайдите под вашим аккаунтом на imified , вставьте URI скрипта и добавьте его в ваш список друзей.

Это очень простой бот, но возможности неограниченны.
Например, вы можете написать бот, который посылает е-мейл всем вашим друзьям посредством простого IM сообщения. Или вы можете, например, написать бота, который производит переводы валют. Посмотрите список полезных Google Talk ботов.