
<?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>BitTrack &#187; contact</title>
	<atom:link href="http://www.bittrack.it/archives/tag/contact/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bittrack.it</link>
	<description>BitTrack.it tratta di Informatica, Programmazione, Reti, Hack, Trucchi, Tutorial, Webdesign e simili.</description>
	<lastBuildDate>Wed, 01 Sep 2010 06:07:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Creare un ajax contact form con validazione dei dati</title>
		<link>http://www.bittrack.it/archives/creare-un-ajax-contact-form-con-validazione-dei-dati/</link>
		<comments>http://www.bittrack.it/archives/creare-un-ajax-contact-form-con-validazione-dei-dati/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 23:53:45 +0000</pubDate>
		<dc:creator>Raspo</dc:creator>
				<category><![CDATA[HTML/CSS]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[contact]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[funzioni]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.bittrack.it/?p=668</guid>
		<description><![CDATA[<div><img src="http://www.bittrack.it/wp-content/uploads/2009/10/contact-form.png" class="attachment-post-thumbnail wp-post-image" alt="contact-form" title="contact-form" /></div>Con questo tutorial ti spiegherò come realizzare un form, da usare nella tua pagina contatti, per l&#8217;invio di email tramite ajax (quindi senza bisogno di ricaricare la pagina) con tanto di validazione dei dati inseriti. Caratteristiche Ogni campo ha dei dati predefiniti che vengono cancellati quando questo ottiene il “focus” Se l’utente non inserisce dei [...]]]></description>
			<content:encoded><![CDATA[<div><img src="http://www.bittrack.it/wp-content/uploads/2009/10/contact-form.png" class="attachment-post-thumbnail wp-post-image" alt="contact-form" title="contact-form" /></div><p>Con questo tutorial ti spiegherò come realizzare un form, da usare nella tua pagina contatti, per l&#8217;invio di email tramite ajax (quindi senza bisogno di ricaricare la pagina) con tanto di validazione dei dati inseriti.<span id="more-668"></span></p>
<h2>Caratteristiche</h2>
<ol>
<li>Ogni campo ha dei dati predefiniti che vengono cancellati quando questo ottiene il “focus”</li>
<li>Se l’utente non inserisce dei dati obbligatori o un indirizzo email valido, lo script notifica l’errore evidenziando in rosso i campi errati.</li>
<li>L’email viene inviata tramite ajax e restituisce un messaggio di notifica al termine dell’operazione</li>
<li>L&#8217;invio dell&#8217;email deve poter funzionare anche con javascript disabilitati.</li>
</ol>
<p>Per avere un idea più chiara di ciò che andremo a creare, ecco una demo funzionante del “prodotto finito”.</p>
<p style="text-align: center;"><a class="demo" href="http://www.bittrack.it/demo/ajax-contact-form/index.html" target="blank">LINK DEMO</a></p>
<h2>Preparazione</h2>
<p>Per iniziare avrai bisogno di una pagina html “di base”.</p>
<pre class="brush: xml;">
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; lang=&quot;it-IT&quot;&gt;
	&lt;head&gt;
		&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;/&gt;

		&lt;link rel=&quot;stylesheet&quot; href=&quot;style.css&quot; type=&quot;text/css&quot; media=&quot;screen&quot;/&gt;

		&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&quot; &gt;&lt;/script&gt;
		&lt;script type=&quot;text/javascript&quot; src=&quot;contatti.js&quot;&gt;&lt;/script&gt;

		&lt;title&gt;Contatti&lt;/title&gt;
	&lt;/head&gt;
	&lt;body&gt;

	&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Notare l&#8217;inclusione della <strong>libreria jquery</strong> (direttamente dai server Google <img src='http://www.bittrack.it/wp-includes/images/smilies/icon_cool.gif' alt='8)' class='wp-smiley' /> ), di uno <strong>style.css</strong> e del <strong>contatti.js</strong> che sarà lo script con cui lavoreremo maggiormente.</p>
<h2>Aggiunta del contenuto</h2>
<p>Per adesso non abbiamo scritto nulla, perciò prosegui con l&#8217;inserimento di un po&#8217; di contenuto. I campi nome, e-mail, testo sono indispensabili e perchè no, anche un campo non obbligatorio per aggiungere un eventuale proprio sito web, oltre che ovviamente il pulsante di invio; il tutto incluso nel canonico <strong>&lt;form&gt;</strong> che  punta ad un certo<strong> inviaemail.php</strong>.</p>
<pre class="brush: xml;">&lt;form method=&quot;post&quot; name=&quot;contatti&quot; id=&quot;contatti&quot; action=&quot;inviaemail.php&quot;&gt;
	&lt;div id=&quot;contact_area&quot;&gt;
		&lt;h2&gt;Contattaci direttamente via email&lt;/h2&gt;

		&lt;input type=&quot;text&quot; name=&quot;name&quot; id=&quot;name&quot; class=&quot;form&quot; value=&quot;Nome*&quot; /&gt;

		&lt;input type=&quot;text&quot; name=&quot;email&quot; id=&quot;email&quot; class=&quot;form&quot; value=&quot;e-Mail*&quot; /&gt;

		&lt;input type=&quot;text&quot; name=&quot;sito&quot; id=&quot;sito&quot; class=&quot;form&quot; value=&quot;Sito Web&quot; /&gt;

		&lt;textarea name=&quot;message&quot; id=&quot;testo&quot; class=&quot;form&quot; rows=&quot;12&quot; cols=&quot;&quot; &gt;Testo*&lt;/textarea&gt;

		&lt;div&gt;
			&lt;input type=&quot;submit&quot; name=&quot;submit&quot; id=&quot;invia&quot; value=&quot;Invia&quot;/&gt;
			&lt;img src=&quot;load.gif&quot; alt=&quot;load&quot; id=&quot;load_img&quot; /&gt;
			&lt;span id=&quot;result&quot;&gt;&lt;/span&gt;
		&lt;/div&gt;
	&lt;/div&gt;
&lt;/form&gt;
</pre>
<p>Sono da segnalare gli <strong>ID</strong> che corrispondono esattamente ai <strong>name</strong> dei vari campi (questo ci tornerà molto utile per la gestione dai dati da php in caso di javascript disabilitati), la presenza di un immagine di caricamento accanto al pulsante e uno span con ID<strong> result</strong> al momento vuoto. La classe <strong>form</strong> come anche l&#8217;ID <strong>contact_area</strong> sono del tutto arbitrari, servono solo a facilitare il lavoro sul CSS.</p>
<h2>Un po&#8217; di stile CSS</h2>
<p>Se provi a visualizzare questa pagina nel browser il risultato non sarà certo dei migliori.</p>
<p><a href="http://www.bittrack.it/wp-content/uploads/2009/10/form-senza-stile.png"><img class="alignnone size-medium wp-image-689" title="form-senza-stile" src="http://www.bittrack.it/wp-content/uploads/2009/10/form-senza-stile-600x249.png" alt="form-senza-stile" width="600" height="249" /></a></p>
<p>Senza perdere altro tempo aggiungi un po&#8217; di stile in un nuovo file CSS che dovrai chiamare <strong>style.css</strong> come indicato nell&#8217;head dell&#8217;HTML.</p>
<pre class="brush: css;">body {
	margin: 0;
	background: #ddd;
	color: #000;
}

h2 {
	font: bold 22px verdana;
	color: #333;
}

#contact_area  {
	width: 500px;
	margin: 0 auto;
}

.form {
	margin: 0 0 10px 0;
	width: 500px;
	font: normal 13px verdana;
	border: 1px solid #aaa;
	background: #eee;
	padding: 6px 10px;
	-moz-border-radius: 6px;
	-webkit-border-radius: 6px;
}

#invia {
	font: normal 16px verdana;
	border: 1px solid #aaa;
	background: #c9c9c9;
	padding: 2px 10px;
	margin: 0 10px 0 0;
	cursor: pointer;
	-moz-border-radius: 6px;
	-webkit-border-radius: 6px;
}

#load_img {
	display: none;
	line-height: 26px;
}

.error {
	border: 1px solid #ff5c5c
}

.fail {
	color: #F80000
}

.success {
	color: #009600
}</pre>
<p>Non ho alcuna intensione di soffermarmi sui vari accorgimenti usati nel CSS, ma devo far notare che abbiamo nascosto l&#8217;immagine di caricamento (linea 40) ed aggiunto le classi <strong>error</strong>, <strong>fail</strong>, <strong>success</strong> il cui scopo sarà più chiaro in seguito.</p>
<p><a href="http://www.bittrack.it/wp-content/uploads/2009/10/form-con-stile.png"><img class="alignnone size-medium wp-image-694" title="form-con-stile" src="http://www.bittrack.it/wp-content/uploads/2009/10/form-con-stile-600x431.png" alt="form-con-stile" width="600" height="431" /></a></p>
<p>Direi senza alcun dubbio che l&#8217;aspetto è migliorato <img src='http://www.bittrack.it/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  .</p>
<h2>Aggiunta del motore (jquery)</h2>
<p>Ora che hai tutto pronto, entriamo nel vivo della programmazione<strong> jquery</strong>. Crea il file <strong>contatti.js</strong> e aggiungi queste prime linee di codice.</p>
<pre class="brush: jscript;">$().ready(function(){

	//variabili globali
	var name = $(&quot;#name&quot;);
	var nameText = $(name).val();
	var email = $(&quot;#email&quot;);
	var emailText = $(email).val();
	var sito = $(&quot;#sito&quot;);
	var sitoText = $(sito).val();
	var message = $(&quot;#testo&quot;);
	var messageText = $(message).val();

});</pre>
<p>Per adesso abbiamo solo dichiarato alcune variabili globali che useremo da quì in avanti. In particolare, abbiamo assegnato una variabile ad ogni campo della pagina HTML e ne abbiamo salvato il contenuto in un&#8217;altra variabile.</p>
<p>Per esempio, il campo con ID <strong>name</strong>, sarà indicato d&#8217;ora in poi semplicemente con &#8220;<strong>name</strong>&#8221; ed il suo contenuto predefinito, quello che possiede nel momento in cui la pagina viene caricata  (in questo caso &#8220;<em>Nome*</em>&#8220;), verrà memorizzato nella variabile <strong>nameText</strong>.</p>
<h2>Gestione dei valori di default nei singoli campi</h2>
<p>Per far sì che i valori dei campi si azzerino quando ricevono il focus e tornino come predefiniti se non viene inserito alcun dato, aggiungi queste semplici funzioni.</p>
<pre class="brush: jscript;">	//name
	name.focus(function(){
		if($(this).val() == nameText) $(this).val(&quot;&quot;);
	});
	name.blur(function(){
		if($(this).val() == &quot;&quot;) $(this).val(nameText);
	});
	//email
	email.focus(function(){
		if($(this).val() == emailText) $(this).val(&quot;&quot;);
	});
	email.blur(function(){
		if($(this).val() == &quot;&quot;) $(this).val(emailText);
	});
	//Sito web
	sito.focus(function(){
		if($(this).val() == sitoText) $(this).val(&quot;&quot;);
	});
	sito.blur(function(){
		if($(this).val() == &quot;&quot;) $(this).val(sitoText);
	});
	//message
	message.focus(function(){
		if($(this).val() == messageText) $(this).val(&quot;&quot;);
	});
	message.blur(function(){
		if($(this).val() == &quot;&quot;) $(this).val(messageText);
	});</pre>
<p>In tal modo, quando viene selezionato (<strong>.focus</strong>) un certo campo, la funzione ne azzera il contenuto se questo corrisponde a quello predefinito nell&#8217;HTML e quando il focus viene perso (<strong>.blur</strong>), se l&#8217;utente non ha aggiunto alcunchè, lasciando il campo vuoto, ne ripristina il valore predefinito.</p>
<h2>Validazione dei contenuti</h2>
<p>Per eseguire la validazione dei dati inseriti dall&#8217;utente, creeremo una funzione apposita per ogni campo che ne valuti la correttezza secondo criteri del tutto arbitrari. In questo caso, abbiamo imposto una lunghezza minima di nome utente e testo dell&#8217;email a 4 caratteri, mentre l&#8217;email dovrà rispettare la canonica forma <em>[qualcosa]@[qualcosa].[qualcosa]</em> .</p>
<pre class="brush: jscript;">function validateEmail(){
		var a = $(&quot;#email&quot;).val();
		var filter = /^[a-zA-Z0-9]+[a-zA-Z0-9_.-]+[a-zA-Z0-9_-]+@[a-zA-Z0-9]+[a-zA-Z0-9.-]+[a-zA-Z0-9]+.[a-z]{2,4}$/;
		if(filter.test(a)){
			$(&quot;#email&quot;).removeClass(&quot;error&quot;);
			return true;
		}
		else{
			$(&quot;#email&quot;).addClass(&quot;error&quot;);
			return false;
		}
	}
	function validateName(){
		if((name.val().length &lt; 4) || (name.val() == nameText)){
			name.addClass(&quot;error&quot;);
			return false;
		}
		else{
			name.removeClass(&quot;error&quot;);
			return true;
		}
	}
	function validateMessage(){
		if((message.val().length &lt; 4) || (message.val() == messageText)){
			message.addClass(&quot;error&quot;);
			return false;
		}
		else{
			message.removeClass(&quot;error&quot;);
			return true;
		}
	}	</pre>
<p>Per il controllo sulla lunghezza di un campo abbiamo usato la funzione <strong>.lenght</strong> che restituisce il numero di caratteri di una stringa; la validazione dell&#8217;email è invece un po&#8217; più complessa poiché fa uso di una regex confrontata alla stringa con la funzione <strong>.test()</strong>, quindi prendila pure per buona <img src='http://www.bittrack.it/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> .</p>
<p>Un ulteriore controllo è stato eseguito sui campi testo e nome che non devono essere uguali a quelli preimpostati (linee 14 e 24), infatti, essendo &#8220;<em>Nome*</em>&#8221; e &#8220;<em>Testo*</em>&#8221; di per sé due stringhe più lunghe di 4 caratteri, verrebbe vanificata la validazione.</p>
<p>Notare inoltre, che ciascuna funzione restituisce <strong>false</strong> e aggiunge una classe <strong>error</strong> a quel campo, se la validazione ha avuto esito negativo; altrimenti, restituisce <strong>true</strong> e toglie la classe error (nel caso sia stata precedentemente applicata).</p>
<h2>Passaggio dei dati con Ajax</h2>
<p>Adesso non resta che inviare i dati al php tramite ajax.</p>
<pre class="brush: jscript;">	$(&quot;#contatti&quot;).submit(function(){
		if(!validateName() | !validateEmail() | !validateMessage()){
			return false;
		}
		else {
			//Invia email con ajax
		}
	});</pre>
<p>Prendiamo il click sul pulsante invia (o meglio il submit del form con id contatti) come evento da cui partire e quindi sottoporre i dati alla validazione.</p>
<pre class="brush: jscript;">       else {
			$('#load_img').fadeIn();
			$.ajax({
				type: 'post',
				url: 'inviaemail.php',
				data: 'name=' + name.val() + '&amp;email=' + email.val() + '&amp;site=' + sito.val() + '&amp;message=' + message.val(),

                                //.........

			}); // end ajax
			return false;
		}
</pre>
<p>Se la validazione viene superata: faccio apparire l&#8217;immagine di caricamento con un effetto fade in (linea 2) e poi, con <strong>metodo POST </strong>(linea 4), invio al file <strong>inviaemail.php</strong>, che si trova nella stessa cartella (linea 5), i dati contenuti all&#8217;interno dei vari campi, assegnando ad ognuno una variabile da far gestire al php (linea 6).</p>
<p>Prima di proseguire devi però sapere come è strutturato il  file <strong>inviaemail.php</strong>.</p>
<h2>Invio dell&#8217;email con PHP</h2>
<p>La parte php è piuttosto semplice.</p>
<pre class="brush: php;">
&lt;?php

	$mailTo = 'tuaemail@qualcosa.boh';

?&gt;</pre>
<p>Assegno alla variabile <strong>mailTo</strong> il mio indirizzo email dove voglio ricevere tutti i messaggi del contact form.</p>
<pre class="brush: php;">
	$name = htmlspecialchars($_POST['name']);
	$mailFrom = htmlspecialchars($_POST['email']);
	$siteurl = htmlspecialchars($_POST['site']);
	$message_text = htmlspecialchars($_POST['message']);
	$subject = 'Messaggio dal contact form';</pre>
<p>Prendo le variabili che mi ha precedentemente inviato ajax con metodo POST, le sottopongo alla funzione del php <strong>htmlspecialchars </strong>per correggere eventuali caratteri speciali e ne passo il contenuto in altrettante variabili php. Aggiungo anche un oggetto all&#8217;email, che mi faccia capire di cosa si tratta quando me la ritroverò nella casella di posta.</p>
<p><strong>Aggiornato. </strong>Perché l&#8217;email risulti leggibile, è bene far in modo che appaia nel formato HTML. Aggiungo dunque una variabile headers con queste informazioni.</p>
<pre class="brush: php;">	$headers = 'Content-type: text/html; charset=UTF-8' . &quot;\r\n&quot;;
	$headers .= 'From: '.$mailFrom;</pre>
<p>La presenza del parametro <strong>From</strong> inoltre, evita che l&#8217;email appaia nella casella spam di certi servizi webmail tipo GMail.</p>
<pre class="brush: php;">	$message =  &quot;&lt;html&gt;
					&lt;head&gt;
						&lt;title&gt; $subject &lt;/title&gt;
					&lt;/head&gt;
				&lt;body&gt;
					&lt;p&gt;----------------------------------------&lt;/p&gt;
					&lt;b&gt;Nome Utente:&lt;/b&gt; $name&lt;br /&gt;
					&lt;b&gt;e-Mail:&lt;/b&gt; $mailFrom&lt;br /&gt;
					&lt;b&gt;Sito:&lt;/b&gt; $siteurl&lt;br /&gt;
					&lt;b&gt;Testo della richiesta:&lt;/b&gt;&lt;br /&gt;
					&lt;p&gt;$message_text&lt;/p&gt;
					&lt;p&gt;----------------------------------------&lt;/p&gt;
				&lt;/body&gt;
				&lt;/html&gt;&quot;;</pre>
<p>Riunisco tutti i dati in un&#8217;ulteriore variabile <strong>message</strong>, in modo da comporre effettivamente il testo del messaggio di posta che riceverò. Notare la presenza di tutti i canonici tag HTML.</p>
<pre class="brush: php;">
	if (mail($mailTo, $subject, $message, $headers))
		echo &quot;email inviata!&quot;;
	else {
		echo &quot;Errore&quot;;
	}</pre>
<p>Con il comando <strong>mail()</strong> viene inviata effettivamente l&#8217;email e se non ci sono stati errori da parte del server in quest&#8217;ultima operazione, scrive il messaggio &#8220;<em>email inviata!</em>&#8220;; altrimenti scrive &#8220;<em>Errore</em>&#8220;.</p>
<h2>Completamento del codice ajax</h2>
<p>Adesso che sai cosa succede dal lato php, torniamo al nostro ajax.</p>
<pre class="brush: jscript;">
		else {
			$('#load_img').fadeIn();
			$.ajax({
				type: 'post',
				url: 'inviaemail.php',
				data: 'name=' + name.val() + '&amp;email=' + email.val() + '&amp;site=' + sito.val() + '&amp;message=' + message.val(),
				success: function(results) {
					$('#load_img').fadeOut(function() {
						if(results == &quot;email inviata!&quot;) {
							$('#result').html(&quot;&lt;span class='success'&gt;e-Mail inviata correttamente&lt;/span&gt;&quot;);
							$(name).val(nameText);
							$(email).val(emailText);
							$(sito).val(sitoText);
							$(message).val(messageText);
						}
						else
							$('#result').html(&quot;&lt;span class='fail'&gt;Errore&lt;/span&gt;&quot;)
					});
				}
			}); // end ajax
			return false;
		}
</pre>
<p>Dopo l&#8217;invio dei dati al php alla riga 6, siamo pronti a ricevere il risultato dell&#8217;operazione e salvarlo in una variabile qualsiasi che abbiamo chiamato result.</p>
<p>Nascondiamo l&#8217;immagine di caricamento (linea 8 ) e se il risultato del php corrisponde a ciò che avevamo scritto col comando echo, significa che l&#8217;email è stata inviata e possiamo dunque scrivere sulla pagina HTML (dentro a quell&#8217;inutilizzato span con id results) una notifica di operazione completata con successo; dato che l&#8217;email è stata inviata, possiamo anche riazzerare i campi ai valori predefiniti.<br />
Se c&#8217;è stato un problema sul php, mostreremo invece un messaggio di errore.</p>
<h2>Con i javascript disabilitati?</h2>
<p>Nel caso si tenti di inviare un email con i javascript disabilitati, non ci sarà alcun tipo di controllo sulla validazione dei dati, ma l&#8217;email verrà comunque inviata, poiché le variabili che abbiamo preso con metodo POST nel php corrispondono esattamente ai parametri <strong>name=&#8221;"</strong> assegnati  nell&#8217;HTML  ai vari campi.</p>
<p>Inviando l&#8217;email senza javascript, vieni rimandato alla pagina inviaemail.php contenente la sola scritta &#8220;<em>email inviata!</em>&#8221; oppure &#8220;<em>Errore</em>&#8221; nel caso si siano verificati o no errori sul php.</p>
<h2>Conclusioni</h2>
<p>Sperando che ti sia stato di aiuto, ti lascio i link per la demo ed il download del pacchetto completo.</p>
<p>Per qualsiasi tipo di osservazione o critica, un commento è sempre bene accetto!</p>
<p style="text-align: center;"><a class="demo" href="http://www.bittrack.it/demo/ajax-contact-form/index.html" target="blank">LINK DEMO</a> <a class="down" href="http://www.bittrack.it/download/ajax-contact-form.zip">link download</a></p>


<p>Articoli correlati:<ol><li><a href='http://www.bittrack.it/archives/creare-un-anteprima-dinamica-dei-commenti/' rel='bookmark' title='Permanent Link: Creare un anteprima dinamica dei commenti'>Creare un anteprima dinamica dei commenti</a></li>
<li><a href='http://www.bittrack.it/archives/primi-passi-con-jquery-%e2%80%93-3/' rel='bookmark' title='Permanent Link: Primi passi con jQuery – 3'>Primi passi con jQuery – 3</a></li>
<li><a href='http://www.bittrack.it/archives/primi-passi-con-jquery-2/' rel='bookmark' title='Permanent Link: Primi passi con jQuery &#8211; 2'>Primi passi con jQuery &#8211; 2</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.bittrack.it/archives/creare-un-ajax-contact-form-con-validazione-dei-dati/feed/</wfw:commentRss>
		<slash:comments>62</slash:comments>
		</item>
	</channel>
</rss>
