Newsgroup: it.comp.www.php
Titolo: Inserire Feed RSS in php

Vorrei inserire il feed 
http://www.zone-h.org/en/rss/defacements
nel mio sito web.
Come posso fare? Ci sto uscendo pazzo.
Se faccio un normale include la pagina non carica.
Grazie
-- 
Francesco 'Imperator' Ricci [FIAG Member] {18/05/2004 18.45.37}
姣Se al mondo ci sono persone come me non deve essere un gran bel posto姣
ICQ 168442149 / MSN 
imp3...@libero.it
 / MAIL 
impe...@despammed.com

Come posso fare? Ci sto uscendo pazzo.
 :)
non ci si riesce con i normali strumenti per i feed rss: ho provato
con alcune librerie, anche con Pear, ma nulla da fare. Forse, sono
fuori standard.
Personalmente, ho dovuto scrivermi un parser da solo.
Il parser va a pigliarsi i dati e li mette in un database (poi, sul
mio sito, non faccio altro che andare a leggermi il database).
Lo script viene invocato da cron (ecco il motivo del #!/usr/bin/php)
Eccoti il codice:
#!/usr/bin/php
<?
$ch = curl_init("
http://www.zone-h.com/en/rss/defacements
");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$tmp = curl_exec ($ch);
curl_close ($ch);
preg_match_all("|<defacer+>(.*)</defacer+>|",$tmp,$defacer);
preg_match_all("|<site+>(.*)</site+>|",$tmp,$site);
preg_match_all("|<system+>(.*)</system+>|",$tmp,$system);
preg_match_all("|<date+>(.*)</date+>|",$tmp,$date);
preg_match_all("|<mirror+>(.*)</mirror+>|",$tmp,$mirror);
preg_match_all("|<info+>(.*)</info+>|",$tmp,$info);
$defacer=$defacer[1];
$site=$site[1];
$system=$system[1];
$date=$date[1];
$mirror=$mirror[1];
$info=$info[1];
array_shift($date);
if (count($system)>0):
	$lasthacks = mysql_connect("localhost", "database",
"password",true) or die(mysql_error());
	mysql_select_db("database", $lasthacks);
	mysql_query("DELETE FROM lasthacks",$lasthacks) or
die(mysql_error());
	$i=0;
	while ($i<count($site)):
		mysql_query("INSERT INTO lasthacks SET
defacer='".addslashes($defacer[$i])."',
site='".addslashes($site[$i])."',
system='".addslashes($system[$i])."', date='$date[$i]',
mirror='".addslashes($mirror[$i])."',
info='".addslashes($info[$i])."'",$lasthacks) 
		or die(mysql_error());
		$i++;
	endwhile;
endif;
?>
-- 
http://e-0.org

 "password",true) or die(mysql_error());
Non ci andrebbe anche l'user.
P.S.:Se nn si è capito ... non funziona :o)
-- 
Francesco 'Imperator' Ricci [FIAG Member] {20/05/2004 15.00.26}
«»Se al mondo ci sono persone come me non deve essere un gran bel posto«»


Non ci andrebbe anche l'user.
Si', ho sbagliato di "camuffare i dati":
$lasthacks = mysql_connect("localhost", "utente", "password",true) or
die(mysql_error());
-- 
http://e-0.org

 die(mysql_error());
NN funonzia
http://www.undergroundsecurity.net/defaced_frame.php
-- 
Francesco 'Imperator' Ricci [FIAG Member] {20/05/2004 17.16.23}
姣Se al mondo ci sono persone come me non deve essere un gran bel posto姣



http://www.undergroundsecurity.net/defaced_frame.php
lo script che t'ho postato mette tutto in mysql. Sul mio sito, poi, c'e' una pagina che va a
leggersi il contenuto della tabella mostrando, cosi', i defacement.
Ho fatto in tal modo per evitare di dovermi andare a leggere l'rss ogni qualvolta qualcuno visita la
pagina e per evitare problemi nel caso in cui ci siano momentanei impedimenti che impediscono al mio
server di collegarsi a zone-h.
Ti semplifico lo script: questa versione va a leggersi il feed rss, ne fa il parsing e visualizza il
risultato
<?
$ch = curl_init("
http://www.zone-h.com/en/rss/defacements
");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$tmp = curl_exec ($ch);
curl_close ($ch);
preg_match_all("|<defacer+>(.*)</defacer+>|",$tmp,$defacer);
preg_match_all("|<site+>(.*)</site+>|",$tmp,$site);
preg_match_all("|<system+>(.*)</system+>|",$tmp,$system);
preg_match_all("|<date+>(.*)</date+>|",$tmp,$date);
preg_match_all("|<mirror+>(.*)</mirror+>|",$tmp,$mirror);
preg_match_all("|<info+>(.*)</info+>|",$tmp,$info);
$defacer=$defacer[1];
$site=$site[1];
$system=$system[1];
$date=$date[1];
$mirror=$mirror[1];
$info=$info[1];
array_shift($date);
for ($i=0; $i<count($system); $i++):
	echo "defacer ".addslashes($defacer[$i])." site ".addslashes($site[$i]).
	      " system ".addslashes($system[$i])." date ".$date[$i].
	      " mirror ".addslashes($mirror[$i])." info ".addslashes($info[$i])."<br><br>";
endfor;
?>
-- 
http://e-0.org

 [snip]
ehm... 
http://www.undergroundsecurity.net/defaced.php
prendi l'ultimo script che t'ho postato, invece di fare un include del
mio sito.
-- 
http://e-0.org


Ciao,
per PHP e RSS
http://freephp.html.it/articoli/view_articolo.asp?id=102
http://freephp.html.it/articoli/view_articolo.asp?id=103
http://magpierss.sourceforge.net/
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 
Newsgroups: it.comp.www.php 
Data: Fri, 21 May 2004 09:48:34 +0200 

Il problema è che non mi carica la pagina ... controlla.
-- 
Francesco 'Imperator' Ricci [FIAG Member] {23/05/2004 14.41.32}
WWW.UNDERGROUNDSECURITY.NET
 ... Sicurezza Informatica e non solo...
«»Se al mondo ci sono persone come me non deve essere un gran bel posto«»


Il problema č che non mi carica la pagina ... controlla.
Fai le cose gradualmente:
invece di mettere lo script in una pagina articolata come quella,
comincia a metterlo in una pagina a se stante, per isolarlo e cercare
di capire dove sta il problema.
Percio':
crea una pagina prova.php e mettici dentro questo
<?
$ch = curl_init("
http://www.zone-h.com/en/rss/defacements
");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$tmp = curl_exec ($ch) or die("Errore: ".curl_error($ch));
curl_close ($ch);
preg_match_all("|<defacer+>(.*)</defacer+>|",$tmp,$defacer);
preg_match_all("|<site+>(.*)</site+>|",$tmp,$site);
preg_match_all("|<system+>(.*)</system+>|",$tmp,$system);
preg_match_all("|<date+>(.*)</date+>|",$tmp,$date);
preg_match_all("|<mirror+>(.*)</mirror+>|",$tmp,$mirror);
preg_match_all("|<info+>(.*)</info+>|",$tmp,$info);
$defacer=$defacer[1];
$site=$site[1];
$system=$system[1];
$date=$date[1];
$mirror=$mirror[1];
$info=$info[1];
array_shift($date);
for ($i=0; $i<count($system); $i++):
	echo "defacer ".addslashes($defacer[$i]).
	" site ".addslashes($site[$i]).
	" system ".addslashes($system[$i]).
	" date ".$date[$i].
	" mirror ".addslashes($mirror[$i]).
	" info ".addslashes($info[$i])."<br><br>";
endfor;
?>
Nel curl_exec ci ho messo
$tmp = curl_exec ($ch) or die("Errore: ".curl_error($ch));
cosi', nel caso in cui ci sia qualche problema, curl dira' che
problema e'.
-- 
http://e-0.org

crea una pagina prova.php e mettici dentro questo
http://www.undergroundsecurity.net/prova.php
Non va guarda ... cioč nn carica neanche la pagina.
Perchč non mi metti una pagina cosě nel tuo sito e ci faccio un include?
Ti metto tra i collaboratori...
-- 
Francesco 'Imperator' Ricci [FIAG Member] {24/05/2004 14.41.43}


Ti metto tra i collaboratori...
 :)
Perche' la banda la pago: se vuoi, continua pure a fare l'include
della mia pagina, ma se il tuo sito dovesse cominciare ad avere un
numero importante di visitatori, allora sarei costretto a revocarti il
favore.
Percio', lascia pure l'include ma, nel frattempo, cerca il modo di
risolvere il problema.
-- 
http://e-0.org

 risolvere il problema.
Su un'altro hosting mi ha restituito questo:
Fatal error: Call to undefined function: curl_init() in
c:\appserv\www\
x-planet.org
\users\imperator\prova.php on line 2
-- 
Francesco 'Imperator' Ricci [FIAG Member] {24/05/2004 15.22.09}


c:\appserv\www\
x-planet.org
\users\imperator\prova.php on line 2
vuol dire che il php su quel hosting non supporta le estensioni curl.
Senza usare curl, lo script diventa questo:
<?
$file = fopen ("
http://www.zone-h.com/en/rss/defacements
", "r");
if (!$file) {
    echo "<p>Unable to open remote file.\n";
    exit;}
$tmp="";	
while (!feof ($file)) {
    $tmp.=get_line($file);
}
fclose($file);
preg_match_all("|<defacer+>(.*)</defacer+>|",$tmp,$defacer);
preg_match_all("|<site+>(.*)</site+>|",$tmp,$site);
preg_match_all("|<system+>(.*)</system+>|",$tmp,$system);
preg_match_all("|<date+>(.*)</date+>|",$tmp,$date);
preg_match_all("|<mirror+>(.*)</mirror+>|",$tmp,$mirror);
preg_match_all("|<info+>(.*)</info+>|",$tmp,$info);
$defacer=$defacer[1];
$site=$site[1];
$system=$system[1];
$date=$date[1];
$mirror=$mirror[1];
$info=$info[1];
array_shift($date);
for ($i=0; $i<count($system); $i++):
	echo "defacer ".addslashes($defacer[$i]).
	" site ".addslashes($site[$i]).
	" system ".addslashes($system[$i]).
	" date ".$date[$i].
	" mirror ".addslashes($mirror[$i]).
	" info ".addslashes($info[$i])."<br><br>";
endfor;
function get_line ($file) {
$read_again = true;
$buffer_size = 4096;
$full = "";
while ((!feof ($file)) && ($read_again)) {
	$read_again = false;
	$line = fgets ($file, $buffer_size);
	$full .= $line;
	if (strlen($line) >= ($buffer_size - 1)) {
		if ($line[($buffer_size - 2)] != '\n') {
		$read_again = true;
		}
	}
}
return $full;
}
?>
Fammi sapere.
-- 
http://e-0.org

Senza usare curl, lo script diventa questo:
Funziona ma c'è un errore di impostazione grafica:
http://www.x-planet.org/users/imperator/prova.php
-- 
Francesco 'Imperator' Ricci [FIAG Member] {24/05/2004 15.41.25}



http://www.x-planet.org/users/imperator/prova.php
non e' un errore: semplicemente, non c'e' alcuna impostazione grafica.
Ultima release, poi continui da solo:
<?
$file = fopen ("
http://www.zone-h.com/en/rss/defacements
", "r");
if (!$file) {
    echo "<p>Unable to open remote file.\n";
    exit;}
$tmp="";	
while (!feof ($file)) {
    $tmp.=get_line($file);
}
fclose($file);
preg_match_all("|<defacer+>(.*)</defacer+>|",$tmp,$defacer);
preg_match_all("|<site+>(.*)</site+>|",$tmp,$site);
preg_match_all("|<system+>(.*)</system+>|",$tmp,$system);
preg_match_all("|<date+>(.*)</date+>|",$tmp,$date);
preg_match_all("|<mirror+>(.*)</mirror+>|",$tmp,$mirror);
preg_match_all("|<info+>(.*)</info+>|",$tmp,$info);
$defacer=$defacer[1];
$site=$site[1];
$system=$system[1];
$date=$date[1];
$mirror=$mirror[1];
$info=$info[1];
array_shift($date);
?> 
<table> 
<tr>
<td>Defacer</td><td>Site</td><td>System</td><td>Date</td><td>Mirror</td><td>Info</td>
</tr>
<?
for ($i=0; $i<count($system); $i++): ?> 
<tr>
<td><?=addslashes($defacer[$i])?></td>
<td><?=addslashes($site[$i])?></td>
<td><?=addslashes($system[$i])?></td>
<td><?=$date[$i]?></td>
<td><?=addslashes($mirror[$i])?></td>
<td><?=addslashes($info[$i])?></td>
</tr> <? 
endfor; 
?> </table> <?
function get_line ($file) {
$read_again = true;
$buffer_size = 4096;
$full = "";
while ((!feof ($file)) && ($read_again)) {
	$read_again = false;
	$line = fgets ($file, $buffer_size);
	$full .= $line;
	if (strlen($line) >= ($buffer_size - 1)) {
		if ($line[($buffer_size - 2)] != '\n') {
		$read_again = true;
		}
	}
}
return $full;
}
?>
-- 
http://e-0.org

 Ultima release, poi continui da solo:
Grazie funziona ... però un'ultima cosa:
Io ho qualcosa del genere:
 
TheGenius Albanian Hackers	
http://www.dawa.net.au
	Linux	2004/05/25	
http://www.zone-h.org/defacements/mirror/id=1246874
 
http://www.zone-h.org/defacements/view/id=1246874
Come faccio ad avere invece degli ultimi due link una cosa del tipo CLICK
HERE ?
-- 
Francesco 'Imperator' Ricci [FIAG Member] {25/05/2004 14.52.28}


HERE ?
hehehehe immaginavo che me l'avresti chiesto.
Sostituisci le due righe:
<td><?=addslashes($mirror[$i])?></td>
<td><?=addslashes($info[$i])?></td>
con:
<td><a href="<?=$mirror[$i]?>" target="_blank">(click)</a></td>
<td><a href="<?=$info[$i]?>" target="_blank">(click)</a></td>
-- 
http://e-0.org

<td><a href="<?=$info[$i]?>" target="_blank">(click)</a></td>
e gia' che ci sei, sostitusci:
<td><?=addslashes($site[$i])?></td>
con
<td><a href="<?=$site[$i]?>" target="_blank"><?=addslashes($site[$i])?></a></td>
-- 
http://e-0.org

e gia' che ci sei, sostitusci:
quindi, alla fine, lo script e' questo:
http://e-0.org/prova.phps
e questo e' il suo output:
http://e-0.org/prova.php
-- 
http://e-0.org