Page 1 sur 2

class rss2

Posté : 28 oct. 2005, 13:51
par jeff
salut
j'ai tester cette classe rss (en ce moment, j'ai pas envie de me tapper toute les specifications de rss2)http://classes.scriptsphp.org/doc.rss200beta
mais elle ne fonctionne pas et je n'arrive a contacter l'auteur

je voulais savoir si vous l'avez et comment

Posté : 28 oct. 2005, 15:40
par Grummfy
ben d'après le titre c'est une version beta
donc moi j'attendrait que cela soit une version stable avant de tester

sinon il y a toujorus leru forum : http://classes.scriptsphp.org/1-accueil

Posté : 28 oct. 2005, 15:43
par jeff
mince j'avais pas vu leur forum
mais bon je me lance dans l'ecriture de ma classe

Posté : 28 oct. 2005, 16:38
par jeff
me revoici je suis pas un pro du xml et je connais pas grand chose au rss(j'ai quand meme lu http://www.stervinou.com/projets/rss/#o ... elElements)
mais j'ai des erreurs
fichier xml généré

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8" ?> <rss version="2"> <channel> <title>essai</title> <link>http://localhost/projet_ing/</link> <description>premier test<description> <item> <title>test1</title> <link>http://localhost/projet_ing/index.php?module=actu&action=display&id=1</link> <description>premier test1</description> </item> <item> <title>test2</title> <link>http://localhost/projet_ing/index.php?module=actu&action=display&id=2</link> <description>2ieme test</description> </item> </channel> </rss>
et l'erreur

Code : Tout sélectionner

Erreur d'analyse XML : mal formé Emplacement : http://localhost/projet_ing/rss/actu.xml Numéro de ligne 9, Colonne 63 :<link>http://localhost/projet_ing/index.php?module=actu&action=display&id=1</link> --------------------------------------------------------------^
c'est quoi qu'il n'aime pas le "&", probleme d'encodage???

Posté : 28 oct. 2005, 17:30
par Xenon_54
Utilise & puisque & tout seul introduit une entité.

Posté : 28 oct. 2005, 17:37
par jeff
ca va mieux mais il ya encore une erreur
Erreur d'analyse XML : balise ne correspondant pas. Attendu : </description>.
Emplacement : http://localhost/projet_ing/rss/actu.xml
Numéro de ligne 18, Colonne 4 : </channel>
et j'ai essayer de le passer validome mais il me dit qu'il manque le doctype

Posté : 28 oct. 2005, 18:23
par h2o

Code : Tout sélectionner

<description>premier test<description>
Si c'est là le code que tu utlises, alors, l'erreur est normale.

La seconde balise description doit être fermante :

Code : Tout sélectionner

</description>

Posté : 28 oct. 2005, 18:25
par jeff
merci h2o je m'était focaliser la dessus mais j'ai vraiment rien vu ](*,)

Posté : 28 oct. 2005, 18:43
par jeff
je suis en train de me poser une quetions
atom,rss1,rss2 la seul difference entre ces technologies c'est l'ecriture du fichier, le contenu est identique =>template, non :?: :?:

Posté : 28 oct. 2005, 18:50
par h2o
merci h2o je m'était focaliser la dessus mais j'ai vraiment rien vu ](*,)
La vérification d'un document xml se fait à deux niveaux, en 2 fois.

1. Le document est-il "bien formé". On dit qu'un document XML est "bien formé" si celui-ci respecte les règles de la grammaire XML (balises fermées, correctement imbriquées... = spécification du w3c). Selon cette recommandation du w3c, la lecture d'un document xml doit s'arrêter à la première erreur "grammaticale".

2. Le document est valide s'il respecte une DTD (Document Type Definition) à laquelle il fait référence.

Le document peut être uniquement "bien formé" mais il doit être "bien formé" pour être valide.

Ton document rss2 doit avant tout être "bien formé", sinon il n'est même pas considéré comme document xml. Et bien sur, il doit être valide, sinon aucun "lecteur" rss n'est capable de l'interpréter et donc de l'afficher correctement.

Posté : 28 oct. 2005, 18:57
par h2o
je suis en train de me poser une quetions
atom,rss1,rss2 la seul difference entre ces technologies c'est l'ecriture du fichier, le contenu est identique =>template, non :?: :?:
Nos messages se sont croisés.

C'est un peu çà.
Pour faire une comparaison, ces documents utilisent le même alphabet, mais pas la même langue.

Sans connaître l'anglais tu distingues le "a" du "z". Mais pas le "a" du "alpha grec". C'est l'aspect bien formé du document.
Mais sans connaître l'anglais tu ne comprends pas le texte, même écrit dans l'alphabet correcte. C'est l'aspect "valide".

Posté : 28 oct. 2005, 19:12
par jeff
je crai un truc du genre un class abstraite pour recupere les info dans une base par exemple
une classe derivé (rss1,rss2,atom) qui choisi le bon template
la constrution avec un moteur de template et ensuite l'enregistrement

Posté : 28 oct. 2005, 19:34
par jeff
voici un premier jet de ma classe(elle ne respecte pas le schema données dans le poste audessus), j'ai plusieur methode qui se ressemble et j'aimerai bien simplifié mais la , j'y vois plus tres clair
<?php
class Rss2
{
	private $file;
	public $lang;
	private $item;
	private $fp;
	private $encoding;
	private $channel;
	public $xslt;
	private $image_item;
	public $copyright;
	public $lastBuildDate;
	
	public function __construct($file)
	{
		$this->channel=array();
		$this->encoding='UTF-8';
		$this->lang='en';
		$this->file=$file;
		$this->iten=array();
	}
	
	public function __set($name,$value)
	{
		$this->$name=$value;
	}
	
	public function Create()
	{
		try{
			if(!($this->fp=fopen($this->file,"w")))
				throw new MyException('impossible d\'ouvrir :'.$this->file);
		}
		catch (MyException $e)
		{
			$e->exceptionlog();
		}
		
	}
	
	/**
	 * ajoute des items
	 *
	 * @param string $titre
	 * @param string $description
	 * @param url $lien
	 */
	public function add_item($titre,$description,$lien)
	{
		try
		{
			if(isset($titre) && isset($description) && isset($lien))
			{
				$this->item[]=array('title'=>$titre,'description'=>$description,'link'=>$lien);
			}
			else 
				throw new MyException("les arguments 'titre','description','lien' sont obligatoires");
		}
		catch (MyException $e)
		{$e->exceptionlog();}
	}
	
	
	/**
	 * information sur le channel
	 *
	 * @param string $titre
	 * @param string $description
	 * @param url $lien
	 * @param date $date
	 */
	
	public function infoChannel($titre,$description,$lien,$date)
	{
		try
		{
			if(isset($titre) && isset($description) && isset($lien))
				$this->channel=array('title'=>$titre,'description'=>$description,'link'=>$lien);
			else 
				throw new MyException("les arguments 'titre','description','lien' sont obligatoires");
		$this->channel['date']=$date;
		}
		catch (MyException $e)
		{$e->exceptionlog();}
	}
	
	public function OptionItemImage($lien,$urlimage,$titre,$description,$width,$height)
	{
		try {
			if(isset($titre) && isset($description) && isset($urlimage))
				$this->image_item[]=array('url'=>$urlimage,'title'=>$titre,'description'=>$description,'link'=>$lien,'width'=>$width,'height'=>$height);
			else 
				throw new MyException("les arguments 'titre','description','lien' sont obligatoires");
		}
		catch (MyException $e)
		{$e->exceptionlog();}
	}
	/**
	 * ecrit un fichier rss en xml
	 *
	 * @return boolean
	 */
	
	public function WriteRss()
	{
		//echo '<pre>'.print_r($this->item).'</pre>';
		$rss='<?xml version="1.0" encoding="'.$this->encoding.'" ?>'."\n";
		if(!empty($this->xslt))
			$rss.='<?xml-stylesheet href="'.$this->xslt.'" type="text/xsl"?>'."\n";
		$rss.='<rss version="2.0">'."\n";
		$rss.='<channel>'."\n";
		$rss.='<title>'.$this->channel['title'].'</title>'."\n";
		$rss.='<link>'.$this->channel['link'].'</link>'."\n";
		$rss.='<description>'.$this->channel['description'].'</description>'."\n";
		$rss.='<language>'.$this->lang.'</language>'."\n";
		if(!empty($this->copyright))
			$rss.='<copyright>'.$this->copyright.'</copyright>';
		if(!empty($this->lastBuildDate))
			$rss.='<lastBuildDate>'.$this->lastBuildDate.'<lastBuildDate>';
		count($this->item)==count($this->image_item)?$flag=1:$flag=0;
		foreach ($this->item as $item=>$val)
		{
			$rss.='<item>'."\n";
			$rss.='<title>'.$val['title'].'</title>'."\n";
			$rss.='<link>'.$val['link'].'</link>'."\n";
			$rss.='<description>'.$val['description'].'</description>'."\n";
			if(!empty($this->image_item)&& $flag==1)
			{
				$rss.='<image>';
				$rss.='<url>'.$this->image_item['urlimage'].'</url>';
				$rss.='<title>'.$this->image_item['title'].'</title>';
				$rss.='<link>'.$this->image_item['link'].'</link>';
				$rss.='<width>'.$this->image_item['width'].'</width>';
				$rss.='<height>'.$this->image_item['height'].'</height>';
				$rss.='</image>';
			}
			$rss.='</item>'."\n";
		}
		$rss.='</channel>';
		$rss.='</rss>'."\n";
		
		if ($this->file) {
			fwrite($this->fp, $rss);
			fclose($this->fp);
			return true;
		}
		else 
			return false;
	}
}
?>
et l'utilisation
include 'config/parametre.ini.php';
function __autoload($nom)
{
	require dirname(__file__).'/lib/class/'.$nom.'.php';
}
$mysql=new Mysqldb(SERVEUR,LOGIN,PASS,BASE);
$dao=new DAO($mysql);
$rss=new Rss2('RSS/actu.xml');
$rss->Create();
$rss->lang='fr';
$rss->infoChannel('essai','premier test','http://localhost/projet_ing/',date("d/m/Y-H:i:s"));
$champs=array('date','description','titre','id_a');
		$table=array('actu');
		$dao->SetVar($table,$champs);
		foreach($dao->Select('','Limit 0,4') as $cle=>$tab)
		{
			$rss->add_item($tab[2],$tab[1],'http://localhost/projet_ing/index.php?module=actu&action=display&id='.$tab[3]);
		}
$rss->WriteRss();
?>
pour ceux que cela interresse un lien sur le rss et xml en general
lhttp://xmlfr.org/documentations/tutoriels/041022-0001

Posté : 29 oct. 2005, 10:12
par jeff
salut
je me creer un fichier (rss) a partir de template mais je ne sais pas comment le sauver :oops:
j'ai regarder du cote se loadhtmfile et savexml de la classe d'ermelir mais je vois pas trop comment faire

Posté : 29 oct. 2005, 10:28
par Cyrano