Problema feed rss

Salve a tutti! Sto cercando di implementare nel mio progetto un lettore di feed RSS dal corriere della sera. Per ora ho provato il seguente codice che però visualizza solo i primi due tag.

#include <LiquidCrystal.h>
#include <Ethernet.h>
#include <SPI.h>

EthernetClient client;
LiquidCrystal lcd(30,29,28,27,26,25);
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress server(89, 31, 55, 103 ); // corriere


//char worrd[32];
char target[7] = { '<', 't', 'i', 't', 'l', 'e', '>' };
char tolcd[80];
int counter = 0;
int lcdcount = 0;
int count = 0;
int foundcount = 0;
int linecount = 0;
boolean worded = true;
//boolean taketext = false;
boolean tag = false;

//int ledPin = 13;



void setup()
{
Ethernet.begin(mac);
Serial.begin(9600);
// pinMode(1, OUTPUT);
delay(1000);

// set up the LCD’s number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.setCursor(0,0);
lcd.print("connecting…");

Serial.println("connecting…");

if (client.connect(server,80)) {
// Print a message to the LCD.
lcd.clear();
Serial.println("connected");
delay(1000);
lcd.print("connected.");
delay(1000);
client.println("GET http://xml.corriereobjects.it/rss/homepage.xml HTTP/1.0");
client.println();
} else {
Serial.println("connection failed");
lcd.print("connection failed.");
}
}

void loop()
{
// lcd.clear();

if (client.available()) {

//only works if xml is formatted with line breaks
/* while(linecount < 2){
char c = client.read();
if (c == 10){linecount++;}}*/

char c = client.read();

if(c == '<'){
for(int i=0; i<7; i++){
// Serial.print(c);
if(c != target[i]){ worded=false; }
c = client.read();

if(i==6 && worded==true){

//STUFF TO DO AFTER TITLE TAG GOES HERE
for(int i=0; i<80; i++){
tolcd[i]=' ';}

//Serial.print(c);

while(tag==false){

if(c=='<'){tag=true;}

tolcd[lcdcount]=c;
lcdcount++;
//Serial.print(c);
c = client.read();
}

for(int i=0; i<16; i++){
tolcd[lcdcount-1]=(' ');
lcdcount++;
}

Serial.print(lcdcount);

for(int p=0; p<(lcdcount-16); p++){

char dispchar = tolcd[p];
Serial.print(dispchar);

for(int i=0; i<16; i++){
lcd.setCursor(0, 0);
lcd.print("Headlines:");
char displaychar = tolcd[(i+counter)%lcdcount];
lcd.setCursor(i,1);
lcd.print(displaychar);

}

if(p==0){delay(1000);}
counter++;
delay(120);

}
counter=0;

lcdcount=0;

if(tag==true){tag=false; Serial.println(" ");}

}

}
}

if(worded==false){worded=true;}

}
}

Come posso fare in modo che mi scriva anche i successivi?Grazie :slight_smile:

Tanto per cominciare questo è un post da Software, non da Generale...
Prossima volta, prima di postare il codice fai Strumenti -> Formattazione Automatica, anzi prova a farlo ora e vedrai che differenza!

Sinceramente non vedo nessun limite al numero di RSS che vengono presentati, tutti i tag presenti nella pagine vengono stampati

edit: prova a stampare quello che ti arriva dalla client.read() su seriale e postarlo qui.

Ciao e grazie per la risposta. Su seriale mi esce questo:

connectingâ?¦
connected
28Corriere.it  
57Corriere della Sera on line versione rss  
22
				  
22
				  
22
				  
22
				  
22
				  
22

ok, ma a me serve sapere cosa ti risponde il server, devi cambiare il codice

Fatto e mi esce tutta la pagina xml. Parte della pagina:

connected
HTTP/1.1 200 OK
Date: Tue, 05 Feb 2013 11:04:45 GMT
Server: Apache
Last-Modified: Tue, 05 Feb 2013 11:01:28 GMT
ETag: "da2bfed-161c7-4d4f821a0b200"
Accept-Ranges: bytes
Content-Length: 90567
Vary: Accept-Encoding,User-Agent
Connection: close
Content-Type: text/xml

<?xml version="1.0" ?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
	<title>Corriere.it</title>
	<link>http://www.corriere.it/</link>
	<description>Corriere della sera online</description>
	<copyright>Copyright 2004 - RCS MediaGroup</copyright>
	<language>it-IT</language>
	<lastBuildDate>Tue, 5 Feb 2013 12:01:02 +0100</lastBuildDate>
	<generator>Eidosmedia M&#233;thode</generator>
	<image>
		<title>Corriere della Sera on line versione rss</title>
		<url>http://www.corriere.it/rss/images/logo_small.gif</url>
		<link>http://www.corriere.it</link>
		<width>140</width>
		<height>40</height>
		<description>Corriere.it versione rss</description>
	</image>
	<img src="//secure-it.imrworldwide.com/cgi-bin/m?ci=rcsrss-it&amp;cg=0&amp;si=http%3A//xml.corriereobjects.it/rss/homepage.xml" alt="" />
	<item>
			<title>
				<![CDATA[Corte dei Conti: «La corruzione pregiudica la nostra economia»]]>
			</title>
			<description>
				<![CDATA[Grido d'allarme del presidente della Corte dei conti«Ormai ha assunto una natura sistemica»]]>
			</description>
			<link from="rss">
			http://www.corriere.it/economia/13_febbraio_05/corte-conti-risanamento-pressione-fiscale_ab8541fe-6f7c-11e2-b08e-f198d7ad0aac.shtml</link>
			<info1>
				<thumbimage/>
					<thumbimage/>
					<fullimage url="http://images.corriereobjects.it/"/>
					</info1>
			<dc:creator>
				<![CDATA[Redazione online]]>
			</dc:creator>
			<guid isPermaLink="true" from="rss">
				http://www.corriere.it/economia/13_febbraio_05/corte-conti-risanamento-pressione-fiscale_ab8541fe-6f7c-11e2-b08e-f198d7ad0aac.shtml</guid>
			<category domain="http://www.corriere.it">
				Economia</category>
			<pubDate>
				Tue, 5 Feb 2013 11:27:31 +0100</pubDate>
		</item>
	<item>
			<title>
				<![CDATA[Condono fiscale, Maroni dice no «Non mi piacciono i colpi di spugna»]]>
			</title>
			<description>
				<![CDATA[Contrario alla proposta di Berlusconi. Sì invece alla restituzione dell'Imu sulla prima casa]]>
			</description>
			<link from="rss">
			http://milano.corriere.it/milano/notizie/politica/13_febbraio_5/roberto-maroni-restituzione-imu-buona idea-no-condono-fiscale-lotta-evasione-2113855257444.shtml</link>
			<info1>
				<thumbimage url="http://milano.corriere.it/media/foto/2013/02/05/maroni_b1.jpg?uuid=01505a48-6f77-11e2-b08e-f198d7ad0aac"/>
					<thumbimage/>
					<fullimage url="http://milano.corriere.it/media/foto/2013/02/05/maroni_b1.jpg?uuid=01505a48-6f77-11e2-b08e-f198d7ad0aac"/>
					</info1>
			<dc:creator>
				<![CDATA[Redazione Milano online]]>
			</dc:creator>
			<guid isPermaLink="true" from="rss">
				http://milano.corriere.it/milano/notizie/politica/13_febbraio_5/roberto-maroni-restituzione-imu-buona idea-no-condono-fiscale-lotta-evasione-2113855257444.shtml</guid>
			<category domain="http://www.corriere.it">
				Speciale</category>
			<pubDate>
				Tue, 5 Feb 2013 11:48:34 +0100</pubDate>
		</item>
	<item>
			<title>
				<![CDATA[Il vizio delle sanatorie pro-furbi E il Cavaliere nel 2008 giurò: mai più ]]>
			</title>
			<description>
				<![CDATA[In 40 anni recuperato un solo anno di evasione]]>
			</description>
			<link from="rss">
			http://www.corriere.it/politica/13_febbraio_05/sanatorie-furbi-stella_b2cdb4ea-6f5a-11e2-b08e-f198d7ad0aac.shtml</link>
			<info1>
				<thumbimage/>
					<thumbimage/>
					<fullimage/>
					</info1>
			<dc:creator>
				<![CDATA[Gian Antonio Stella]]>
			</dc:creator>
			<guid isPermaLink="true" from="rss">
				http://www.corriere.it/politica/13_febbraio_05/sanatorie-furbi-stella_b2cdb4ea-6f5a-11e2-b08e-f198d7ad0aac.shtml</guid>
			<category domain="http://www.corriere.it">
				Politica</category>
			<pubDate>
				Tue, 5 Feb 2013 10:51:05 +0100</pubDate>
		</item>
	<item>
			<title>
				<![CDATA[Imu, la proposta choc vale un punto Nei sondaggi diminuisce il distacco]]>
			</title>
			<description>
				<![CDATA[Ma il 51 % degli italiani ritiene la restituzione dell'Imu, promessa da Berlusconi, «non credibile»]]>
			</description>
			<link from="rss">
			http://www.corriere.it/politica/13_febbraio_05/proposta-choc-berlusconi-imu-sondaggi_c0dcef60-6f5a-11e2-b08e-f198d7ad0aac.shtml</link>
			<info1>
				<thumbimage/>
					<thumbimage/>
					<fullimage/>
					</info1>
			<dc:creator>
				<![CDATA[M.Antonietta Calabrò]]>
			</dc:creator>

subito dopo

if(i==6 && worded==true){

metti una Serial.println("TITOLO TROVATO").. mi aspeto che i titoli sono riconosciuti... in teoria scorrono tutti sul'LCD ad un secondo tra una pagina e l'altra

Ecco cosa ottengo su seriale ad intervalli di un secondo:

connectingâ?¦
connected
TITOLO TROVATO
28Corriere.it  
TITOLO TROVATO
57Corriere della Sera on line versione rss  
TITOLO TROVATO
22
				  
TITOLO TROVATO
22
				  
TITOLO TROVATO
22
				  
TITOLO TROVATO
22

quindi come puoi vedere lui trova più di 2 titoli, e ogni TITOLO TROVATO corrisponde alla stampa su LCD di un titolo RSS, confermi? quindi qual'è la richiesta?

Si ma non stampa a video i dal terzo in poi

qualche anima pia che mi dia suggerimenti in merito?

forse ho capito.
lui ti mostra solo i titoli "corriere.it" e "corriere della sera on-line blablabla..."

allora in tal caso il problema è

if(c=='<'){
              tag=true;
            }

in pratica lui smette di leggere il titolo appena trova il carattere '<' dando per scontato che sia il , ma come vedi i titoli successivi a quelli stampati sono all'iterno di un tag <>

esempio:

<![CDATA[Corte dei Conti: «La corruzione pregiudica la nostra economia»]]>

ora, al posto che uscire se trovi "<", devi uscire solo se trovi "", con la stessalogica che usi per entrare quando trovi "".. ovvio che togliere quell'if non ha senso, ti troveresti in un loop infinito, per un test veloce cambia '<' in '>', vedrai qualche carattere strano ma almeno sapremo di aver centrato il problema.

Ecco svelato l'arcano!Grande!Adesso finalmente visualizzo qualcosa!

connectingâ?¦
connected
TITOLO TROVATO
35Corriere.it</title  
TITOLO TROVATO
64Corriere della Sera on line versione rss</title  
TITOLO TROVATO
85
				<![CDATA[La restituzione dell'Imu attira il 4% degli indecisi]]  
TITOLO TROVATO
101
				<![CDATA[Isole Salomone, tsunami sui villaggi  Il Giappone dirama l'allertaÌ e

Altra modifica necessaria per vedere correttamente i tag è questa:

char tolcd[140];
e
for(int i=0; i<140; i++)

buona programmazione :grin:

Riprendo il discorso sul feed rss perchè è sorto un altro problemino. Integrandolo nel mio progetto (che presenta su un lcd temperatura,ora e data,sveglia e regolazione di queste ultime) noto una lentezza eccessiva nel recuperare i dati dal sito. Può servire far memorizzare ad arduino il sito xml su microsd e quindi fare la ricerca dei titoli ? Qualche suggerimento?Grazie. :slight_smile:

no, salvare i dati da altre parti è uin passaggio in più che rallenta tutto.

i rallentamenti vari sono dati dalle delay, , salvare i dati può essere utile se il server ti chiude la connessione in faccia perchè sei troppo lento

Mah..i delay li ho ridotti al minimo..2 secondi giusto per inizializzare l'ethernet

Problema risolto.

?? come?

lesto:
?? come?

Appunto...

Scusatemi :slight_smile: Ho apportato una modifica alla funzione per attivare la retroilluminazione dell'lcd via fotoresistenza.Ho usato millis() anzichè delay().Ciao!