:-y

Une nouvelle bibliothèque pour gérer les flux RSS

samedi 31 août 2013 - 12:12

Comme vous l'avez sans doute remarqué, je n'ai pas trop donné de nouvelles sur la nouvelle version de KrISS feed. J'avais prévu un grand bouleversement du code pour le rendre encore plus flexible et chouette avant de sortir la version 8. La conséquence, c'est qu'il n'y a pas beaucoup de nouvelles fonctionnalités par rapport aux dernières nouvelles. Avec les vacances, la rentrée et le boulot, je suis pas mal pris en ce moment et je ne pourrai donc pas sortir la version 8 telle que je l'avais imaginée. Je vais donc la sortir moins aboutie que ce j'avais prévu et je repousserai la mise à jour du code reformaté à la version 9. Je vais donc tout faire pour sortir cette version 8 mi-septembre !

En attendant je voulais vous présenter certaines modifications plus ou moins récentes que j'ai intégrées pour converger vers un code encore plus chouette :-)

Session.php
Tout d'abord j'ai légèrement modifié ma classe Session. Celle que je vous avais présentée lors de mon tout premier article : http://tontof.net/?2012/04/18/19/00/00-joyeux-anniversaire
J'ai viré le singleton que je trouvais inutile et ajouté un test pour le brute force basé sur les fonctions de Sebsauvage dans Shaarli.
Vous trouverez plus de détails sur la page dédiée : http://tontof.net/kriss/php5/session

Rss.php
Ensuite, je me suis dit que ce serait une bonne chose d'utiliser une bibliothèque dédiée pour les flux RSS. J'ai cherché du côté de syndexport, picoFeed et lastRss (je n'ai pas considéré les poids lourds du style simplePie) mais j'avais toujours des reproches : fait trop de choses à mon goût, utilise des dépendances pas nécessaires, ne gère pas tous les types de format comme rdf, n'est pas suffisamment paramétrable, etc.

Je tiens à signaler qu'il y a lastRss qui m'a beaucoup intéressé car il fonctionne avec PHP4 et ne nécessite même pas DOMDocument contrairement à tout ce qui existe. Le problème c'est que ça nécessitait trop de modifications pour que je l'intègre facilement à KrISS feed. En tout cas je le garde sous le coude parce que je pense que ça peut être une bonne chose pour éventuellement gérer les flux XML invalides. J'étudierai ça quand les plugins seront fonctionnels.

Maintenant on peut compter sur une nouvelle alternative : http://tontof.net/kriss/php5/rss

Elle ne fait rien d'autres que gérer des flux XML à l'aide de DOMDocument. Son but n'est pas de gérer le téléchargement d'un flux, la gestion du cache ou autres fantaisies. En gros, on a un flux RSS/atom sous forme de chaîne de caractères et on veut récupérer des infos sous la forme d'un tableau.

Vous pouvez tester avec une petite démo ici : http://tontof.net/kriss/php5/rss/#demo

Je suis assez content du résultat car je la trouve extrêmement fonctionnelle et flexible : http://tontof.net/kriss/php5/rss/#options

Elle permet des choses que je n'utilise pas encore dans KrISS feed comme vous pouvez le voir sur la démo avancée : http://tontof.net/kriss/php5/rss/#advanced-demo

KrISS php5
Pour regrouper tout ça, j'ai donc créer KrISS php5 qui contiendra plein de choses utiles en PHP pour mes différents projets présents et à venir !

KrISS php5 ne contient que des classes statiques sans vraiment de dépendance. En ce moment je travaille beaucoup avec Symfony et l'injection de dépendances est quelque chose que je trouve vraiment chouette. Je n'arrive pas à savoir si c'est une bonne chose de faire comme je fais avec mes classes statiques mais pour des projets comme les miens (KrISS feed, blog, etc.), l'avantage de l'injection de dépendances reste relativement limité même si elle permettrait d'avoir un code encore plus propre et flexible. En fait, le côté statique est sensé être plus efficace (en pratique, ça dépend de la version de php mais la tendance est à l'amélioration au cours du temps). Mais en gros est-ce que vous pensez que l'injection de dépendances c'est KISS :-)
Si des spécialistes PHP ont des conseils/suggestions, je suis tout ouïe !

En attendant encore un peu de patience pour la version 8, mais elle arrive !

Comments

1 - @ - totop

C'est marrant, cet article tombe pile au moment où j'installe un shaarli et que je me rends compte que KrISS feed n'en veut pas (flux invalide, qu'il dit)... Avec ces nouvelles avancées, j'imagine que le souci n'aura plus lieu d'être avec la v8 ?
Merci pour ce travail !

2 - @ - tontof

@totop: Tu peux tester avec la version instable qui correspond à la future v8 : https://raw.github.com/tontof/kriss_feed/master/src/index.php
Les messages d'erreur sont maintenant plus explicites par rapport aux flux invalides. Souvent c'est à cause d'une erreur de timeout que j'ai fixé à 4 secondes et pas vraiment de flux.

3 - @ - bg62

super boulot, chapeau bas encore une fois, mais niveau mise à jour, cela va se passer comment ?

4 - @ - Tontof

@bg62 : La mise à jour sera comme toutes les autres, juste le fichier index.php à changer. La mise à jour sera transparente car il n'y a rien qui a changé dans la structure de données. C'est juste le code qui s'améliore :-)

5 - @ - cid

Je viens de tester avec la version instable, mon problème est identifié : SSL certificate problem: self signed certificate. Damnaide, pas trouvé de quoi passer outre dans la configuration... Une idée ?
Merci !

6 - @ - totopcid

oups, trompé de pseudo, désolé...

7 - @ - Anonymous

Salut,

Merci pour ce bon programme ! Pour info, à propos de l'Issue #264 (Firefox on Android with portrait orientation: impossible to scroll with some styles), il suffit de supprimer les lignes 513 à 515 de greader.css pour corriger le bug :
@media screen and (max-width: 768px) {
html, body {
height: 100%;
}


Je ne suis pas expert en CSS, je ne peux pas dire pourquoi.

8 - @ - tontof

@cid :
L'idéal est d'installer les certificats :
curl_setopt($ch, CURLOPT_CAINFO, "/etc/cacert.pem");
Sinon tu peux indiquer que tu ne veux pas considérer les certificats :
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

Par contre il te faudra modifier le fichier index.php vers ces lignes en ajoutant celle du dessus en fonction de ton choix :
curl_setopt($ch, CURLOPT_ENCODING, '');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);

À terme ce genre de modifications pourra se faire à l'aide des plugins.

Sinon tu dois pouvoir ajouter le lien shaarli sans le https pour t'éviter de modifier le code ?

@Anonymous : Merci j'ai transmis :-)

9 - @ - matttbe

@Anonymous: Merci, je confirme que ça fixe le bug :)

@Tontof: Merci pour ces avancées! :)

10 - @ - TitaX

Super !!!
Merci beaucoup pour le partage.
Je suis impatient de mettre à jour :-)

11 - @ - cid

Merci pour l'astuce, ça fonctionne :)

12 - @ - fpp

Bonne nouvelle !
Une fois résolus mes problèmes d'hébergement et de sessions, KF est devenu mon lecteur RSS au quotidien, sur toutes mes machines (une demi douzaine :-).
Il a remplacé notamment Feedly, qui était original au départ mais a pris la grosse tête depuis...
Le seul petit souci qui me reste c'est que sur la tablette 7" il ne bascule pas en mode mobile comme sur le smartphone, et sur cet écran l'interface "bureau" est inadaptée (taille des caractères et des boutons).
Impatient de voir la suite !

13 - @ - Tontof

@fpp : Cool :-)
Pour l'adaptation tablette, il doit juste falloir changer le css. Faudrait que je regarde le nouveau bootstrap 3 pour voir s'ils ont changé des valeurs.

14 - @ - Bobinours

Je viens de tester la démo : http://tontof.net/kriss/php5/rss/demo.php
et lorsqu'on saisit un nombre trop grand dans "Max items" (exemple: 51), on obtient cette erreur.

Fatal error: Call to a member function getElementsByTagName() on a non-object in /homez.527/tontof/www/kriss/php5/rss/Rss.php on line 95


Je ne peux m'empêcher de penser que ce n'est pas une feature mais bien un bug :)

Désolé, je n'ai pas eu le courage de vérifier le code et proposer un patch, il est tard, et je ne sais pas non plus si c'est ici le meilleur endroit pour reporter des bugs.

Bonne continuation.

PS: j'ai aussi eu ces erreurs en voulant poster mon commentaire via Firefox...

Notice: Undefined index: captcha in /homez.527/tontof/www/index.php on line 2304
Notice: Undefined index: captcha in /homez.527/tontof/www/index.php on line 2312

15 - @ - Tontof

@Bobinours : Merci c'est corrigé pour la démo :-) https://github.com/tontof/kriss_php5/commit/fa26bf8e6f032a647f4527f026d3f4f54fbc7e93#commitcomment-4019116


Pour le problème sous Firefox, est-ce que tu as désactivé les cookies ? Parce qu'on dirait que c'est un problème de session et je vois pas trop pourquoi.

16 - @ - Bobinours

Oui en effet. Cookies désactivés.
Mais dans l'absolue, la notice ne devrait pas apparaître et un joli message d'information devrait la remplacer "Vous devez activer les cookies... Blabla..." (m'enfin, je dis ça, je dis rien).

17 - @ - Tontof

@Bobinours: Oula mais ça c'est si c'était bien codé :-p
J'ai ouvert une issue sur github pour m'en souvenir : https://github.com/tontof/kriss_blog/issues/5
New comment







      __        __   __  
 /|  /  \ |  / /  \ |  \ 
/ |    _/ |_/  | /| |__/ 
  |   /   | \  |/ | | \  
 _|_ /___ |  \ \__/ |  \