Автоматизация подписки на рассылку FeedBurner. Часть 3
Заключительная часть трилогии о том, как взять feedburner’овскую капчу, заставить пользователя ввести её и подписать его на рассылку feedburner.
В этой статье разберем серверную часть программы – 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 и т.п. Я ничего лучше не придумал, как проверять полученный текст на наличие каких-то ключевых слов. Это, в общем-то, тривиальная задача.
В
Recent Comments