<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Программирование и вебдизайн &#187; feedburner</title>
	<atom:link href="http://rucode.infonex.us/category/feedburner/feed/" rel="self" type="application/rss+xml" />
	<link>http://rucode.infonex.us</link>
	<description>Just another Informational Blog weblog</description>
	<lastBuildDate>Sat, 18 Feb 2012 12:37:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Автоматизация подписки на рассылку FeedBurner. Часть 3</title>
		<link>http://rucode.infonex.us/2010/03/09/avtomatizatsiya-podpiski-na-rassyilku-feedburner-chast-3/</link>
		<comments>http://rucode.infonex.us/2010/03/09/avtomatizatsiya-podpiski-na-rassyilku-feedburner-chast-3/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 17:28:13 +0000</pubDate>
		<dc:creator>Alex Nikitin</dc:creator>
				<category><![CDATA[email рассылки]]></category>
		<category><![CDATA[feedburner]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[бот]]></category>
		<category><![CDATA[Интернет]]></category>
		<category><![CDATA[Наше ПО]]></category>

		<guid isPermaLink="false">http://svitter.ru/?p=929</guid>
		<description><![CDATA[Заключительная часть трилогии о том, как взять feedburner’овскую капчу, заставить пользователя ввести её и подписать его на рассылку feedburner.
Часть 1, Часть 2
В этой статье разберем серверную часть программы – php-скрипт, задача которого обратиться к сервису feedburner, получить капчу, передать пользователю, принять расшифровку капчи от пользователя и передать feedburner. Я использовал ZendFramework, но в основном по [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" src="http://www.clearcrystalmedia.com/gc/wp-content/uploads/2008/01/feedburner-logo.png" alt="" width="266" height="47" />Заключительная часть трилогии о том, как взять feedburner’овскую капчу, заставить пользователя ввести её и подписать его на рассылку feedburner.</p>
<p><a href="http://svitter.ru/?p=792">Часть 1</a>, <a href="http://svitter.ru/?p=845">Часть 2</a></p>
<p>В этой статье разберем серверную часть программы – php-скрипт, задача которого обратиться к сервису feedburner, получить капчу, передать пользователю, принять расшифровку капчи от пользователя и передать feedburner. Я использовал ZendFramework, но в основном по мелочи.<br />
<span id="more-929"></span><br />
Итак, весь скрипт состоит из двух больших блоков. Первый – для случая, когда мы только получаем капчу, второй – для случая, когда пользователь её уже расшифровал.</p>
<p>Когда мы обращаемся к фидбернеру в первый раз отрабатывает следующий скрипт:</p>
<div class="wp_syntax">
<div class="code">
<pre class="php" style="font-family:monospace;"><span style="color: #000088;">$client</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Http_Client<span style="color: #009900;">&#40;</span><span style="color: #666666; font-style: italic;">/* здесь должна идти строка с адресом рассылки, которую генерирует feedburner */</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$client</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setParameterPost</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
	        <span style="color: #0000ff;">'loc'</span>  <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'ru_RU'</span><span style="color: #339933;">,</span>
	        <span style="color: #0000ff;">'uri'</span>   <span style="color: #339933;">=&gt;</span> <span style="color: #666666; font-style: italic;">/* данные вашей рассылки */</span><span style="color: #339933;">,</span>
	        <span style="color: #0000ff;">'email'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #666666; font-style: italic;">/* данные вашей рассылки */</span><span style="color: #339933;">,</span>
	    <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$resp</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$client</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">request</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'POST'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	<span style="color: #666666; font-style: italic;">// выполняем POST запрос</span>
<span style="color: #000088;">$headers</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$resp</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getHeaders</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// меняем относительные пути на полные</span>
<span style="color: #000088;">$response</span> <span style="color: #339933;">=</span>  <span style="color: #990000;">str_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'captcha?'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'http://feedburner.google.com/fb/a/captcha?'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$resp</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$response</span> <span style="color: #339933;">=</span>  <span style="color: #990000;">str_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'=&quot;/fb'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'=&quot;http://feedburner.google.com/fb'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$response</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// В ответ на наш запрос feedburner генерирует форму</span>
<span style="color: #666666; font-style: italic;">// для заполнения с рядом скрытых (hidden) полей.</span>
<span style="color: #666666; font-style: italic;">// Значение этих полей нам нужно достать и отправить</span>
<span style="color: #666666; font-style: italic;">// обратно фидбернеру при следующем обращении</span>
<span style="color: #666666; font-style: italic;">// Здесь я опушу большую часть однотипных действий</span>
<span style="color: #000088;">$pos1</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strpos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$response</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'action=&quot;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$action</span> <span style="color: #339933;">=</span> <span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$response</span><span style="color: #339933;">,</span> <span style="color: #000088;">$pos1</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">8</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$pos11</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strpos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$action</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'&quot;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$action</span> <span style="color: #339933;">=</span> <span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$action</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #000088;">$pos11</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$pos1</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strpos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$response</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'input type=&quot;hidden&quot; name=&quot;uri&quot;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$uri</span> <span style="color: #339933;">=</span> <span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$response</span><span style="color: #339933;">,</span> <span style="color: #000088;">$pos1</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">38</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$pos11</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strpos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$uri</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'&quot;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$uri</span> <span style="color: #339933;">=</span> <span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$uri</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #000088;">$pos11</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
…</pre>
</div>
</div>
<p>А далее нам остается только сформировать собственный кусок кода HTML, который AJAX вернет клиенту:</p>
<div class="wp_syntax">
<div class="code">
<pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>form<span style="color: #339933;">&gt;</span>
	<span style="color: #339933;">&lt;</span>input type<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;hidden&quot;</span> id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fbaction&quot;</span> name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fbaction&quot;</span> value<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">/&gt;</span>
	<span style="color: #339933;">&lt;</span>input type<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;hidden&quot;</span> id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fburi&quot;</span> name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fburi&quot;</span> value<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">/&gt;</span>
	<span style="color: #339933;">&lt;</span>input type<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;hidden&quot;</span> id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fbemail&quot;</span> name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fbemail&quot;</span> value<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">/&gt;</span>
	<span style="color: #339933;">&lt;</span>input type<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;hidden&quot;</span> id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fbtoken&quot;</span> name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fbtoken&quot;</span> value<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">/&gt;</span>
	<span style="color: #339933;">&lt;</span>input type<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;hidden&quot;</span> id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fbcookie&quot;</span> name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fbcookie&quot;</span> value<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">/&gt;</span>
&nbsp;
<span style="color: #339933;">&lt;/</span>form<span style="color: #339933;">&gt;</span></pre>
</div>
</div>
<p>$action, $uri, $email, $token – то, что мы достали из кода, сгенерированного фидбернером. $headers[‘Set-cookie’] – куки которые, установил фидбернер, их также нужно передать.</p>
<p>А теперь рассмотрим действия, когда пользователь ввел капчу, которую предложил нам фидбернер и отправил данные в наш серверный скрипт.</p>
<div class="wp_syntax">
<div class="code">
<pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// клиент для HTTP-запросов</span>
<span style="color: #000088;">$client</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Http_Client<span style="color: #009900;">&#40;</span><span style="color: #000088;">$action</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// устанавливаем параметры, которые получили в прошлый</span>
<span style="color: #666666; font-style: italic;">// раз от фидбернера</span>
<span style="color: #000088;">$client</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setParameterPost</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
		<span style="color: #0000ff;">'loc'</span>  <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'ru_RU'</span><span style="color: #339933;">,</span>
	        <span style="color: #0000ff;">'token'</span>  <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'token'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
	        <span style="color: #0000ff;">'uri'</span>   <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'uri'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
	        <span style="color: #0000ff;">'captcha'</span>   <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'captcha'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
	        <span style="color: #0000ff;">'email'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'email'</span><span style="color: #009900;">&#93;</span>
	    <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// не забываем добавить куки</span>
<span style="color: #000088;">$cookie</span> <span style="color: #339933;">=</span> Zend_Http_Cookie<span style="color: #339933;">::</span><span style="color: #004000;">fromString</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cookie'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$client</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setCookie</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cookie</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// делаем POST запрос к фидбернеру</span>
<span style="color: #000088;">$response</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$client</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">request</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'POST'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre>
</div>
</div>
<p>Вот и все. В $response у нас попадет ответ от фидбернера. Он скажет, что, либо регистрация прошла успешно, либо мы неправильно ввели капчу, либо плохой e-mail и т.п. Я ничего лучше не придумал, как проверять полученный текст на наличие каких-то ключевых слов. Это, в общем-то, тривиальная задача.</p>
<p><img src="http://feeds.feedburner.com/~r/svitter/articles/~4/Pni2aDYoc_o" height="1" width="1"/></p>
<div id="crp_related"><h4>Related Posts:</h4><ul><li><a href="http://rucode.infonex.us/2010/04/05/kodikevich-i-vyichislitelnyiy-klaster/" rel="bookmark" class="crp_title">Кодикевич и вычислительный кластер</a></li><li><a href="http://rucode.infonex.us/2010/04/09/russkiy-yazyik-vyibor-okonchaniy/" rel="bookmark" class="crp_title">Русский Язык. Выбор окончаний</a></li><li><a href="http://rucode.infonex.us/2010/03/19/rasputyivanie-zlogo-koda/" rel="bookmark" class="crp_title">Распутывание злого кода</a></li><li><a href="http://rucode.infonex.us/2010/02/04/kak-napisat-svoy-sobstvennyiy-im-bot-menee-chem-za-5-minut/" rel="bookmark" class="crp_title">Как написать свой собственный IM бот менее, чем за 5 минут</a></li><li><a href="http://rucode.infonex.us/2010/04/06/kompaniya-stimulsoft-obyavlyaet-o-vyihode-novoy-versii-2010-1-generatorov-otchetov-stimulsoft-reports/" rel="bookmark" class="crp_title">Компания Стимулсофт объявляет о выходе новой версии 2010.1 генераторов отчетов Stimulsoft Reports</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://rucode.infonex.us/2010/03/09/avtomatizatsiya-podpiski-na-rassyilku-feedburner-chast-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Автоматизация подписки на рассылку FeedBurner. Часть 2</title>
		<link>http://rucode.infonex.us/2010/02/17/avtomatizatsiya-podpiski-na-rassyilku-feedburner-chast-2/</link>
		<comments>http://rucode.infonex.us/2010/02/17/avtomatizatsiya-podpiski-na-rassyilku-feedburner-chast-2/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 16:02:04 +0000</pubDate>
		<dc:creator>Alex Nikitin</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[email рассылки]]></category>
		<category><![CDATA[feedburner]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[Наше ПО]]></category>

		<guid isPermaLink="false">http://svitter.ru/?p=845</guid>
		<description><![CDATA[В первой части я описал, зачем нам в принципе автоматизировать подписку FeedBurner. Коротко: автоматизация заключается в автоматической подписке электронной почты пользователя на рассылку FeedBurner при заполнении пользователем формы подписки на рассылку другого сервиса. В нашем примере используется сервис smartresponder.ru.
В этой статье я приведу javascript код клиентской части скрипта. Напомню, для взаимодействия с сервером используется технология [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" src="http://wholefoodusa.files.wordpress.com/2009/04/feedburner_logo.jpg" alt="" width="311" height="66" />В <a href="http://svitter.ru/?p=792">первой части</a> я описал, зачем нам в принципе автоматизировать подписку FeedBurner. Коротко: автоматизация заключается в автоматической подписке электронной почты пользователя на рассылку FeedBurner при заполнении пользователем формы подписки на рассылку другого сервиса. В нашем примере используется сервис smartresponder.ru.</p>
<p>В этой статье я приведу javascript код клиентской части скрипта. Напомню, для взаимодействия с сервером используется технология <a href="http://svitter.ru/?p=815">AJAX</a>. Также я использовал фреймворк <a href="http://jquery.com/">JQuery</a>.<span id="more-845"></span></p>
<p>Общий принцип взаимодействия таков. Javascript вызывает серверный PHP скрипт с помощью http-запросов с методом GET и передает туда все необходимые параметры. Серверный скрипт взаимодействует с сервисом FeedBurner и формирует html-документ, который возвращает клиентскому скрипту. Клиентский скрипт вставляет полученный html-код в страницу и обрабатывает результат.</p>
<p>Итак, одним из поставленных условий было то, что исходный код, предоставляемый smartresponder’ом не должен меняться. Поэтому первым делом средствами javascript и JQuery я меняю стандартную кнопку формы на собственную.</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'[name=SR_submitButton]'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">before</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'input name=&quot;SR_submitButton2&quot; value=&quot;&quot;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'[name=SR_submitButton2]'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'value'</span><span style="color: #339933;">,</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'[name=SR_submitButton]'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'value'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'[name=SR_submitButton2]'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'style'</span><span style="color: #339933;">,</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'[name=SR_submitButton]'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'style'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'[name=SR_submitButton]'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'[name=SR_submitButton2]'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		My_submit<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	 <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre>
</div>
</div>
<p>SR_submitButton – имя кнопки формы, которую предоставляет smartresponder. Вместо неё мы создаем собственную кнопку с именем SR_submitButton2 (по ходу перенимая стиль и название исходной кнопки), а SR_submitButton скрываем (hide()). В качестве обработчика нажатия SR_submitButton2 вешаем собственную функцию My_submit(), код которой приведен ниже.</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> My_submit<span style="color: #009900;">&#40;</span>submit<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> f <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'[name=SR_form]'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>submit <span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span>SR_submit<span style="color: #009900;">&#40;</span>f<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'[name=SR_form]'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">submit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #000066; font-weight: bold;">else</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>onSubscribeSubmit<span style="color: #009900;">&#40;</span>f<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			<span style="color: #003366; font-weight: bold;">var</span> iteration <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span>f<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">data</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;iter&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>iteration<span style="color: #009900;">&#41;</span>
			<span style="color: #009900;">&#123;</span>
				$<span style="color: #009900;">&#40;</span>f<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">data</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;iter&quot;</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span><span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>iteration <span style="color: #339933;">&gt;</span> <span style="color: #CC0000;">2</span><span style="color: #009900;">&#41;</span>
			<span style="color: #009900;">&#123;</span>
				$<span style="color: #009900;">&#40;</span>f<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">data</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;iter&quot;</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'[name=SR_form]'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">submit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span><span style="color: #000066; font-weight: bold;">else</span>
			<span style="color: #009900;">&#123;</span>
				$<span style="color: #009900;">&#40;</span>f<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">data</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;iter&quot;</span><span style="color: #339933;">,</span> iteration <span style="color: #339933;">+</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre>
</div>
</div>
<p>Кнопка SR_submitButton2 будет нажиматься до получения капчи и после ввода её пользователем. Соответственно в функции My_submit предусмотрено два варианта работы. Если в функцию был передан параметр submit равный true, то подразумевается, что с feedburner’ом мы уже разобрались, и данные готовы к отправке в smartresponder. Но перед этим вызовем стандартную smarteponder’овсую функцию SR_submit, которая проверит поля формы. Если проверка прошла успещно мы попадаем в тело оператора if и выполняется</p>
<p>$(&#8217;[name=SR_form]&#8216;).submit(); &#8211; отправка данных в сервис smartresponder.</p>
<p>В противном случае данные передаются на обработку функции onSubscribeSubmit. Если последняя возвращает false – это говорит о безуспешной попытке ввода капчи.</p>
<p>К сожалению в FeedBurner наблюдается неприятный эффект с адресами, которые там уже зарегистрированы. При попытке подписки такого адреса, FeedBurner воспринимает это как ввод неверной капчи и присылает новую. В итоге получается что вне зависимости от ввода пользователя, ему присылается новая капча. Чтобы этого избежать я ограничил количество вводов капчи тремя попытками. Не получилось с трех попыток – делать нечего, переадресуем клиента на smartresponder, оставляя в покое FeedBurner. Иначе мы рискуем что клиент уйдет вообще ни с чем.</p>
<p>Теперь разберем функцию onSubscribeSubmit().</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> onSubscribeSubmit<span style="color: #009900;">&#40;</span>f<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #009900;">&#40;</span>jQuery.<span style="color: #660066;">data</span><span style="color: #009900;">&#40;</span>document.<span style="color: #660066;">body</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'email'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> 	<span style="color: #006600; font-style: italic;">// пытаемся прочесть ранее сохраненный параметр элемента body с именем email.</span>
							<span style="color: #006600; font-style: italic;">// Его отсутствие говорит о том, что мы ещё не получали капчи от FeedBurner’а.</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #006600; font-style: italic;">// берем из формы адрес подписчика и записываем как параметр body</span>
		jQuery.<span style="color: #660066;">data</span><span style="color: #009900;">&#40;</span>document.<span style="color: #660066;">body</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'email'</span><span style="color: #339933;">,</span>  $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'[name=field_email]'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #006600; font-style: italic;">// здесь мы обращаемся к собственному серверному скрипту и передаем ему</span>
		<span style="color: #006600; font-style: italic;">// в качестве параметра адрес электронной почты подписчика</span>
		$.<span style="color: #660066;">ajax</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
		type<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;GET&quot;</span><span style="color: #339933;">,</span>
		url<span style="color: #339933;">:</span> serverPath <span style="color: #339933;">+</span> <span style="color: #3366CC;">'fb_request.php?email='</span> <span style="color: #339933;">+</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'[name=field_email]'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
		dataType<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;html&quot;</span><span style="color: #339933;">,</span>
		data<span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
		timeout<span style="color: #339933;">:</span> <span style="color: #CC0000;">30000</span><span style="color: #339933;">,</span>
			success<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #006600; font-style: italic;">// в случае успеха добавляем перед кнопкой текст с просьбой</span>
				<span style="color: #006600; font-style: italic;">// ввести капчу и саму капчу, которую нам вернул скрипт</span>
				$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.approvement'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">remove</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'[name=SR_submitButton2]'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">before</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;div class=&quot;approvement&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: Verdana;&quot;&gt;'</span><span style="color: #339933;">+</span>
				<span style="color: #000066;">prompt</span>  <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&lt;/span&gt;'</span> <span style="color: #339933;">+</span>
				data <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&lt;/div&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
			error<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>XMLHttpRequest<span style="color: #339933;">,</span> textStatus<span style="color: #339933;">,</span> errorThrown<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
			<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #000066; font-weight: bold;">else</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #006600; font-style: italic;">// если мы попали в эту ветку, значит мы обрабатываем нажатие</span>
		<span style="color: #006600; font-style: italic;">// кнопки уже при введенной капче</span>
		$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#fbresult'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">remove</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>     <span style="color: #006600; font-style: italic;">// удаляем старые результаты работы</span>
		$.<span style="color: #660066;">ajax</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
		type<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;GET&quot;</span><span style="color: #339933;">,</span>
		<span style="color: #006600; font-style: italic;">// все указанные ниже параметры, начинающиеся с fb присылаются при</span>
		<span style="color: #006600; font-style: italic;">// предыдущем взаимодействии и вставляются в документ.</span>
		<span style="color: #006600; font-style: italic;">// Теперь же их нужно передать обратно для корректного</span>
		<span style="color: #006600; font-style: italic;">// взаимодействия с FeedBurner’ом</span>
		url<span style="color: #339933;">:</span> serverPath <span style="color: #339933;">+</span> <span style="color: #3366CC;">'fb_request.php?email='</span> <span style="color: #339933;">+</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#fbemail'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'value'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span>
		<span style="color: #3366CC;">'&amp;token='</span> <span style="color: #339933;">+</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#fbtoken'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'value'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span>
		<span style="color: #3366CC;">'&amp;uri='</span> <span style="color: #339933;">+</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#fburi'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'value'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span>
		<span style="color: #3366CC;">'&amp;captcha='</span> <span style="color: #339933;">+</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#fbcaptcha'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'value'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span>
		<span style="color: #3366CC;">'&amp;action='</span> <span style="color: #339933;">+</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#fbaction'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'value'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span>
		<span style="color: #3366CC;">'&amp;cookie='</span> <span style="color: #339933;">+</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#fbcookie'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'value'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
		dataType<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;html&quot;</span><span style="color: #339933;">,</span>
		data<span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
		timeout<span style="color: #339933;">:</span> <span style="color: #CC0000;">30000</span><span style="color: #339933;">,</span>
			success<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #006600; font-style: italic;">// вставляем полученный результат</span>
				$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'[name=SR_form]'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">before</span><span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #006600; font-style: italic;">// вызываем обработчик полученного результата</span>
				<span style="color: #000066; font-weight: bold;">return</span> handleFbResult<span style="color: #009900;">&#40;</span>f<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
			error<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>XMLHttpRequest<span style="color: #339933;">,</span> textStatus<span style="color: #339933;">,</span> errorThrown<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre>
</div>
</div>
<p>Также надо объявить строку с предложением ввести капчу, которая используется в функции.</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> <span style="color: #000066;">prompt</span> <span style="color: #339933;">=</span>  <span style="color: #3366CC;">'&lt;p style=&quot;font-size: 8pt;&quot;&gt;'</span> <span style="color: #339933;">+</span>
<span style="color: #3366CC;">'Введите текст на картинке и повторно нажмите на кнопку Получить.&lt;/p&gt;'</span><span style="color: #339933;">;</span></pre>
</div>
</div>
<p>Ну а теперь осталось разобрать последнюю функцию – обработку результата отправления капчи. Наш серверный скрипт, получив ответ от FeedBurner’а, вернет кусок html кода, в котором будет элемент с. Нас интересует значение (value) этого элемента.</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> handleFbResult<span style="color: #009900;">&#40;</span>f<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> result <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#fbresult'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'value'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">switch</span><span style="color: #009900;">&#40;</span>result<span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #006600; font-style: italic;">// в случае если подписка FeedBurner успешно активирована, либо</span>
		<span style="color: #006600; font-style: italic;">// адрес уже находится в подписном листе</span>
		<span style="color: #000066; font-weight: bold;">case</span> <span style="color: #3366CC;">'already'</span><span style="color: #339933;">:</span>
		<span style="color: #000066; font-weight: bold;">case</span> <span style="color: #3366CC;">'success'</span><span style="color: #339933;">:</span>
			$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.approvement'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">remove</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			My_submit<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  <span style="color: #006600; font-style: italic;">// отправка в smartreponder</span>
			<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">break</span><span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">case</span> <span style="color: #3366CC;">'repeat'</span><span style="color: #339933;">:</span>
			<span style="color: #006600; font-style: italic;">// неправильный ввод – перезапрашиваем капчу</span>
			jQuery.<span style="color: #660066;">data</span><span style="color: #009900;">&#40;</span>document.<span style="color: #660066;">body</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'email'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			onSubscribeSubmit<span style="color: #009900;">&#40;</span>f<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">break</span><span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">case</span> <span style="color: #3366CC;">'invalid'</span><span style="color: #339933;">:</span>
			<span style="color: #006600; font-style: italic;">// пользователь ввел некорректный email</span>
			$<span style="color: #009900;">&#40;</span>f<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">data</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;email&quot;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;.approvement&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">html</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;font style=&quot;font-size: 10pt; font-family: Verdana; color: red; font-weight: bold;&quot;&gt;Некорректный email&lt;/font&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">break</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre>
</div>
</div>
<p>Вот, собственно, и всё, что делает клиентский скрипт. В следующей статье рассмотрим серверную часть.</p>
<p><img src="http://feeds.feedburner.com/~r/svitter/articles/~4/b2bTZgv4JFE" height="1" width="1"/></p>
<div id="crp_related"><h4>Related Posts:</h4><ul><li><a href="http://rucode.infonex.us/2010/04/05/kodikevich-i-vyichislitelnyiy-klaster/" rel="bookmark" class="crp_title">Кодикевич и вычислительный кластер</a></li><li><a href="http://rucode.infonex.us/2010/03/19/rasputyivanie-zlogo-koda/" rel="bookmark" class="crp_title">Распутывание злого кода</a></li><li><a href="http://rucode.infonex.us/2010/03/09/avtomatizatsiya-podpiski-na-rassyilku-feedburner-chast-3/" rel="bookmark" class="crp_title">Автоматизация подписки на рассылку FeedBurner. Часть 3</a></li><li><a href="http://rucode.infonex.us/2010/04/09/russkiy-yazyik-vyibor-okonchaniy/" rel="bookmark" class="crp_title">Русский Язык. Выбор окончаний</a></li><li><a href="http://rucode.infonex.us/2010/04/01/zloy-plagin-dlya-jquery/" rel="bookmark" class="crp_title">Злой плагин для jQuery</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://rucode.infonex.us/2010/02/17/avtomatizatsiya-podpiski-na-rassyilku-feedburner-chast-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Автоматизация подписки на рассылку FeedBurner. Часть 1</title>
		<link>http://rucode.infonex.us/2010/02/12/avtomatizatsiya-podpiski-na-rassyilku-feedburner-chast-1/</link>
		<comments>http://rucode.infonex.us/2010/02/12/avtomatizatsiya-podpiski-na-rassyilku-feedburner-chast-1/#comments</comments>
		<pubDate>Fri, 12 Feb 2010 11:53:50 +0000</pubDate>
		<dc:creator>Alex Nikitin</dc:creator>
				<category><![CDATA[email рассылки]]></category>
		<category><![CDATA[feedburner]]></category>
		<category><![CDATA[Наше ПО]]></category>

		<guid isPermaLink="false">http://svitter.ru/?p=792</guid>
		<description><![CDATA[Проблема

Для начала объясню, зачем мне потребовалось автоматизировать подписку FeedBurner и почему это может быть полезно другим.

В интернете существует довольно много сервисов (в том числе бесплатных), которые позволяют одним делать email рассылки, а другим, на эти рассылки подписываться (smartresponder.ru, subscriber.ru, рассылки@mail.ru  и т.д.). У каждого, конечно, есть свои достоинства и недостатки.

Так, например, есть сервис FeedBurner, [...]]]></description>
			<content:encoded><![CDATA[<h3>Проблема</h3>
<p>
Для начала объясню, зачем мне потребовалось автоматизировать подписку FeedBurner и почему это может быть полезно другим.</p>
<p>
В интернете существует довольно много сервисов (в том числе бесплатных), которые позволяют одним делать email рассылки, а другим, на эти рассылки подписываться (smartresponder.ru, subscriber.ru, рассылки@mail.ru  и т.д.). У каждого, конечно, есть свои достоинства и недостатки.</p>
<p>
Так, например, есть сервис <a href="http://feedburner.google.com/">FeedBurner</a>, от гугла. Он позволяет превратить rss-ленту блога в серию писем, что для многих очень удобно. Однако, кроме как отправлять новые посты блога, FeedBurner ничего не умеет.</p>
<p>
В то же время помимо постов в блоге иногда возникает необходимость посылать дополнительные письма своим подписчикам (особенно для тех, у кого блог или сайт – инструмент ведения бизнеса). А для этого приходится использовать какой-либо другой сервис рассылки (например те, что были перечислены выше).</p>
<p>
Как же быть с подписчиками? Просить подписаться на две рассылки сразу – вариант, прямо скажем, сомнительный: люди не любят оставлять свою электронную почту в интернете.<br />
А почему бы не сделать следующим образом. <span id="more-792"></span>Давайте напишем скрипт, который при оформлении подписки (<strong>не</strong> FeedBurner) будет сначала отправлять данные о e-mail в сервис FeedBurner и регистрироваться там, а уже потом переходить на стандартную для рассылки регистрацию.</p>
<p>
Сказано – сделано, я написал скрипт для связи рассылки <a href="http://smartresponder.ru">smartresponder.ru</a> с FeedBurner. Поэтому весь дальнейший код, будет работать с формой, которая генерируется smartresponder’ом. Но, можно будет убедиться, что при небольших изменениях его можно будет использовать и с другими сервисами рассылок.
</p>
<h3>Теория</h3>
<p>
Проблема в том, что при подписке на рассылку в FeedBurner, последний генерит <a href="http://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D0%BF%D1%87%D0%B0">капчу</a> для проверки на <a href="http://svitter.ru/?p=497">ботов</a>. Эту капчу нужно получить и вывести пользователю, а потом его ввод передать обратно в сервис FeedBurner.</p>
<p>
Ещё одно техническое условие: не вносить изменения в скрипт, который предоставляет smartresponder. Это условие я поставил для того, чтобы даже тот, кто ни в зуб ногой в веб-программировании, без проблем смог бы прикрутить этот дополнительный скрипт к уже имеющейся форме.</p>
<p>Архитектурно нам потребуется два модуля:</p>
<p>1. скрипт на Javascript, который:</p>
<ul>
<li> после заполнения поля с e-mail передаст данные скрипту №2 и получит от него капчу FeedBurner’а.</li>
<li> после заполнения капчи передаст данные скрипту №2 и получит результат операции. В случае успеха перейдет на страницу регистрации в smartresponder’е.</li>
</ul>
<p>2.	скрипт на PHP, который:</p>
<ul>
<li> Получает от первого скрипта данные с e-mail’ом, передает в FeedBurner. В ответ получает рисунок с капчей и дополнительные данные. После чего передает эту информацию обратно первому скрипту.</li>
<li> После ввода капчи передает её FeedBurner’у, получает результат и возвращает его первому скрипту.</li>
</ul>
<p>Взаимодействие между первым и вторым скриптами будет происходить посредством AJAX. Иллюстрация:</p>
<p><img class="alignnone size-full wp-image-793" src="http://svitter.ru/wp-content/uploads/2010/02/1.GIF" alt="1" width="568" height="226" /></p>
<p><img class="alignnone size-full wp-image-794" src="http://svitter.ru/wp-content/uploads/2010/02/2.GIF" alt="2" width="568" height="234" /></p>
<p>По сути получается клиент-серверная архитектура. На стороне клиента – javascript, на сервере – php-скрипт, взаимодействующий с сервисов FeedBurner.</p>
<p>На этом пока всё. Во второй статье приведу код клиентской части. Там, кстати, я использовал JQuery. В третьей статье рассмотрим серверную сторону.</p>
<p><img src="http://feeds.feedburner.com/~r/svitter/articles/~4/A9ZJBPPH6hU" height="1" width="1"/></p>
<div id="crp_related"><h4>Related Posts:</h4><ul><li><a href="http://rucode.infonex.us/2010/03/09/avtomatizatsiya-podpiski-na-rassyilku-feedburner-chast-3/" rel="bookmark" class="crp_title">Автоматизация подписки на рассылку FeedBurner. Часть 3</a></li><li><a href="http://rucode.infonex.us/2010/02/17/avtomatizatsiya-podpiski-na-rassyilku-feedburner-chast-2/" rel="bookmark" class="crp_title">Автоматизация подписки на рассылку FeedBurner. Часть 2</a></li><li><a href="http://rucode.infonex.us/2010/02/06/sql-zagadka-pro-dni-rozhdeniya/" rel="bookmark" class="crp_title">SQL-загадка про дни рождения</a></li><li><a href="http://rucode.infonex.us/2010/03/12/zadachka-ot-kodikevicha/" rel="bookmark" class="crp_title">Задачка от Кодикевича</a></li><li><a href="http://rucode.infonex.us/2010/04/05/kodikevich-i-vyichislitelnyiy-klaster/" rel="bookmark" class="crp_title">Кодикевич и вычислительный кластер</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://rucode.infonex.us/2010/02/12/avtomatizatsiya-podpiski-na-rassyilku-feedburner-chast-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

