Mise à jour : 1ère partie résolue, 2ème partie ici : http://forum.alsacreations.com/topic-1-57769-1-Integrer-un-flux-RSS.html#p395139

Bonjour,

Je vais décrire ce que je souhaite faire avec mes mots de noob car je ne sais pas comment ça s'appelle (d'où la difficulté de trouver les bons termes de recherche).

Phase 1 : trouver ce qu'il me faut
Le site d'un ami émet un flux RSS. Je souhaite l'intégrer dans une petite fenêtre sur mon site.
Mon site est en php ici (pas de CMS) : http://www.blackholesun.fr/
L'idée est que l'emplacement du cadre pour le flux RSS de cet ami soit fixe, rafraîchi toutes les 24h et mis en forme comme je le souhaite (taille, emplacement, couleurs, fontes).

Je souhaite que cette intégration se fasse directement dans la page php et non via une définition d'emplacement dans le CSS (car si je rame déjà en PHP, le CSS c'est de la brasse coulée).

Enfin, le tout doit passer le test W3C (sans utiliser l'artifice du bandeau défilant, mais je n'ai pas pu trouver d'autre solution).

Mes recherches m'ont surtout mené vers MagpieRSS mais ce script est déjà très ancien. Et ne connaissant pas le nom exact de la fonction que je recherche, je ne trouve pas mieux ni surtout plus à jour.

Questions : comment s'appelle ce type de fonction et quels scripts me recommanderiez-vous ?


Phase 2 : mise en forme
Comme dit précédemment, je souhaite l'intégrer et non me contenter de le "poser tel quel" : je dois pouvoir modifier les dimensions, les couleurs et formats de fontes ainsi que les couleurs et format du "cadre".

Mais le fin du fin serait que le "cadre" (aux dimensions fixes) comportant le flux agisse comme une lettrine (en inversé puisque je prévois de le placer sur la gauche, mais c'est le principe qui compte). Ceci me permettrait d'ajouter les news de mon propre site à côté du cadre RSS invité de manière dynamique (ie sans avoir à gérer le nombre de lignes de mes propres news dans un table).

Questions : est-ce faisable ? W3C compliant ? sans jouer avec les CSS ?

Merci d'avance pour votre aide
Modifié par Black Hole Sun (25 Sep 2011 - 17:49)
Salut,

Merci pour ta réponse.
Toutefois, note que si j'ai le vocabulaire d'un noob, il est en parfaite adéquation avec mes compétences en code Smiley biggol

L'intitulé de la page est alléchant mais... comment dire, je crois m'être complètement perdu dans la table des matières Smiley scared

Un lien plus accessible vers un "super-simple-for-noobs-php" peut être ?
Merci.

J'ai chargé le code source d'un exemple et je l'ai adapté à mon cas.

Voici le code :
	<?php
	try{
		
		if(!@$fluxrss=simplexml_load_file('http://tamiyablog.com/feed/')){
			throw new Exception('Flux introuvable');
		}		
		if(empty($fluxrss->channel->title) || empty($fluxrss->channel->description) || empty($fluxrss->channel->item->title))
			throw new Exception('Flux invalide');
		$i = 0;
		$nb_affichage = 5;	
		echo '<ul>';
		foreach($fluxrss->channel->item as $item){
			echo '<li><a href="'.(string)$item->link.'" target="_blank">'.(string)$item->title.'</a></li>';
			if(++$i>=$nb_affichage)
				break;
		}
		echo '</ul>';

	}
	catch(Exception $e){
		echo $e->getMessage();
	}

?>


Le problème est que ça plombe le temps de chargement de la page car le flux est rafraîchi à chaque affichage de la page. Or je voudrais qu'il soit mis en cache sur le serveur et mis à jour une fois toutes les 24h (à une heure que j'aimerais pouvoir fixer tant qu'à faire).

Comment inclure ce tampon ?

Par ailleurs, l'ensemble ne passe plus le test W3C à cause des caractères (type &) contenus dans les titres ou descriptions des items du flux RSS (que je ne peux contrôler puisque je n'en suis pas l'éditeur). Je me vois assez mal coder une réécriture à la volée des caractères problématiques : existe-t-il un remède pour le test W3C du type "ignore ce passage quand tu fais la vérification histoire d'éviter un mode panique ? (je sais, méthode pas très fair-play, pataper Smiley confused )
Modifié par Black Hole Sun (23 Sep 2011 - 18:14)
Pour la mise en cache du flux, regarde du côté de la méthode asXml () pour enregistrer le flux dans un fichier XML. Ensuite, il te suffit de coder une fonction permettant de calculer « l'âge » du fichier mis en cache : s'il a plus de 24 heures d'existence ou si le fichier en cache est inexistant, tu charges le flux et l'enregistres ; sinon, tu travailles directement sur le flux en cache.
ouh là Smiley biggol

Je suis déjà bien au-delà de mes capacités avec le code publié au-dessus Smiley ohwell
A force de copier coller des bouts de code dans google, je suis parvenu à faire en sorte que les liens s'ouvrent systématiquement dans un nouvel onglet : ça marche, mais j'en ai bavé.

Là je me bagarre pour que la couleur du texte (celui du flux RSS que j'affiche) soit de la couleur que je veux et non celle par défaut définie dans les CSS de mon site. Et pas moyen de trouver avec span, p style, ou quoique ce soit d'autre (mais bon, en tâtonnant comme je le fais, normal d'errer).

La méthode asXml () que tu décris, je suis difficilement en mesure de la comprendre. Alors l'intégrer au code que j'ai déjà commencé...

Je te remercie pour l'aide que tu m'apportes, mais je crois que tu as beaucoup surestimé mes capacités. Mais vraiment beaucoup.

Il n'y aurait pas une méthode plus simple pour intégrer ce flux RSS avec mise en cache automatique pour ne pas harceler le site source ?
Je progresse : ayant appris que ce que je cherche s'appelle un "parser RSS", l'ami google a pu me livrer pléthore de réponses.

Désolé pour la solution de facilité, mais j'ai finalement opté pour un script tout fait qui répond à mes attentes (notamment le cache).
Trouvé ici et bien documenté http://www.pcinpact.com/services/exemple_rss.php

Le tout fonctionne admirablement bien et mon travail de ces deux derniers jours sur la mise en forme m'a permis de l'intégrer comme voulu.

Enfin presque car je bute sur un détail de mise en forme qui relève de ce que j'appellerais la "hiérarchie" CSS. Mon css définit tout lien de cette manière :
a{color: #FFA000; text-decoration:none}
a:hover{color: #FFCB07;}
a:visited{color: #FFD56F;}


Or, pour ce cas précis et unique, je souhaite une couleur de texte différente (pour aider à la distinction visuelle entre les liens de mon site et cet aparté).

Avant de comprendre que le code php ne sert par à la mise en forme du texte, j'ai attaqué sur mes pages php : en vain. J'ai tenté de créer un <h4> dans ma feuille CSS pour y définir les couleurs de liens (le code ci-dessus mais intégré à la définition du <h4>) sans plus de succès.

En toute logique, je pense donc être face à une question de priorité : mon code de mise en forme des liens est global pour ma feuille de style. Il s'applique aussi bien aux différents niveaux de <hn> qu'au contenu général (ie le corps de texte non définit par un <hn>).

Normalement, supprimer la mise en forme de mes liens pour la définir dans chaque balise <hn> pourrait résoudre le problème sauf que je perdrais la mise en forme pour le corps de texte (ce qui ne m'intéresse pas).

Question : comment créer cette exception de mise en forme ?
Black Hole Sun a écrit :
A force de copier coller des bouts de code dans google, je suis parvenu à faire en sorte que les liens s'ouvrent systématiquement dans un nouvel onglet : ça marche, mais j'en ai bavé.

Soit dit en passant, si tu copies et colles bêtement des bouts de code, voire des scripts entiers, que tu trouves çà et là au gré de tes pérégrinations sur le Web sans prendre la peine de réfléchir à la manière dont ils marchent, tu n'iras pas loin. C'est pourquoi je ne fournirai pas de code prêt à l'emploi (si jamais c'est le but que tu cherches en postant ici). Je te fournis des pistes afin de t'aiguiller ; mais, l'essentiel est que ce soit toi qui raisonnes et comprennes par toi-même : c'est une meilleure façon de progresser.
Black Hole Sun a écrit :
Je te remercie pour l'aide que tu m'apportes, mais je crois que tu as beaucoup surestimé mes capacités. Mais vraiment beaucoup.

Rassure-toi, nous avons tous été, à un moment ou à un autre, des débutants aux capacités limitées, voire sans autonomie. Smiley cligne

Pour revenir à ton problème de couleur de lien, si tu souhaites définir une couleur différente pour les liens du flux de celle des liens par défaut, il te faut créer une règle CSS dont le sélecteur ciblera plus spécifiquement les liens en question. Mais, sans lien vers la page en question, il sera difficile de deviner quels sont les liens à cibler.
Merci Victor.

Dans la mesure du possible, je cherche à comprendre ce que je fais et je ne viens pas ici pour sous-traiter des scripts sur-mesure.
En revanche, je connais mes limites : si je vois que mes connaissances ne me permettent pas de comprendre le raisonnement global pour obtenir le résultat, je sais que le gouffre est trop important. La 1ère étape du parser que tu m'as indiqué m'était encore accessible moyennant quelques heures de travail. La partie cache en revanche représentait une étape beaucoup trop éloignée de mes capacités.

D'où la solution de facilité concernant le parser. Je ne cherche ni à réinventer la roue, ni à refaire ce que d'autres personnes plus compétentes ont parfaitement réalisé. Humblement, je cherche à comprendre, à adapter à mes besoins le cas échéant ou à faire moi-même lorsque j'en ai les capacités ou que cela m'est raisonnablement accessible.

Concernant la partie CSS, tu m'as mis sur la piste et je suis parvenu au résultat souhaité. Je soupçonnais plus ou moins ce qu'il fallait faire et tu l'as confirmé en pointant précisément là où je devais travailler.

J'ai donc introduit un sélecteur dans la CSS de la page concernée pour définir mes liens :
a{color: #FFA000; text-decoration:none}
a:hover{color: #FFCB07;}
a:visited{color: #FFD56F;}

a.type1{color: #FFFFFF; text-decoration:none}
a.type1:hover{color: #CCCCCC;}
a.type1:visited{color: #BDBDBD;}


Le premier est le cas général, type1 est le cas particulier des liens du flux RSS que j'importe.

Ce qui donne ceci dans le code de ma page php :
Liens généraux :
<a href="http://url/" rel="friends" target="_blank">blabla</a>

Liens spécifiques au flux RSS importé :
<a href="http://url/" class="type1" target="_blank">blabla</a>


Résultat global visible ici :
http://test.blackholesun.fr/index.php (site de test, le site en ligne est visible sur le domaine principal où l'import du flux RSS n'est pas encore publié).

Merci pour ton aide

PS : je passe le sujet en [résolu] avant de me faire taper sur les doigts par Laurie-Anne Smiley confused
Modifié par Black Hole Sun (25 Sep 2011 - 17:49)