RSSFeed optimisation et dépannage

Rechercher

RSSFeed optimisation et dépannage

Par mikaweb  -  4 reponses  -  Le 08/12/2007 11:45  -  Editer  - 

Bonjour,

Je souhaiterais solliciter un coup de main de votre part pour la réalisation d'un petit "plugin" ou d'une astuce permettant de générer un Fil RSS par catégorie de news.

Je m'explique. J'ai dans ma base de donnée une table news qui regroupe les principales informations concernant la news, elle se présente comme cela :

CREATE TABLE `news` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`titre` varchar(80) NOT NULL,
`accroche` varchar(200) NOT NULL,
`contenu` text NOT NULL,
`id_categorie` int(11) NOT NULL,
`id_rubrique` int(11) NOT NULL,
`pseudo` varchar(20) NOT NULL DEFAULT '',
`timestamp_proposition` int(11) NOT NULL DEFAULT '0',
`timestamp_validation` int(11) NOT NULL DEFAULT '0',
`timestamp_modification` int(11) NOT NULL,
`hits` int(11) NOT NULL,
`valide` tinyint(1) NOT NULL DEFAULT '0',
KEY `id` (`id`),
KEY `id_categorie` (`id_categorie`),
KEY `id_rubrique` (`id_rubrique`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=450;

Puis j'ai une table catégorie.

CREATE TABLE `categorie_news` (
`id_cat` int(11) NOT NULL AUTO_INCREMENT,
`nom_cat` varchar(50) NOT NULL,
PRIMARY KEY (`id_cat`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;

Maintenant je souhaiterais faire en sorte grace à RSSFeed de pouvoir générer automatiquement un Fil par catégorie donc 7 dans le cas présent + 1 Fil RSS global. Je ne sais pas par ou commencer puis je ne m'ensort que moyennement avec l'OO donc j'aurais voulu savoir si tout d'abord c'était possible et si vous pouviez me donner un coup de main.

Sinon j'ai aussi un problème avec la date de publication. J'utilise un timestamp comme vous pouvez le constater et il m'affiche à chaque fois la même erreur comme quoi mon format date n'est pas correctm alors que dans le fichier RSSFeedtools il est sensé faire la conversion du timestamp au bon format non ?

J'ai absoluement besoin d'avoir la date vu que mes flux sont repris et classés par d'autres sites en fonctions de la date de publication de mes articles.

Cordialement et très bon boulot pour votre classe ;)

 

Réponses apportées à cette discussion

Par Emacs  -  Le 08/12/2007 12:25  -  Haut de page  - 

Bonjour,

Votre problème n'est pas compliqué à résoudre. Il s'agit seulement de faire passer une variable dans l'url indiquant quelle catégorie de news on souhaite solliciter.

Dans le fichier PHP qui génère votre flux, c'est à dire celui qui récupère les infos de la BDD et les affecte aux objets RSSFeed, vous devez vérifier si une variable (par exemple $idCategorie) lui est transmise par l'url. Si oui alors vous ajoutez une WHERE clause à votre requête SQL sinon vous la laissez telle quelle et votre flux renverra toutes les news quelle que soit leur catégorie respective.

Supposons que votre fichier se nomme flux-news.php. Si vous souhaitez récupérer toutes les news dans le flux alors vous appellez directement le fichier flux-news.php en faisant http://www.votresite.com/flux-news.php.

Maintenant, nous voulons récupérer que les news de la catégorie "Programmation". Nous admettons qu'il s'agit de l'identifiant 3 dans votre table de catégories. Vous appellez alors votre fichier de cette manière : http://www.votresite.com/flux-news.php?idCategorie=3

Dans le code de votre fichier flux-news.php, cela se résume de cette manière :

<?php
  $requete = 'SELECT id, titre, accroche, pseudo FROM news';
  // Récupère-t-on la catégorie via la variable de l'url ?
  if(!empty($_GET['idCategorie']) && is_numeric($_GET['idCategorie']))
  {
    // On ajoute la WHERE clause de filtrage par catégorie
    $requete.= ' WHERE id_categorie='. intval($_GET['idCategorie']);
  }
  // On continue la fin de la requête
  $requete.= ' ORDER BY timestamp_validation DESC LIMIT 10';
  // Exécution de la requête...
  // Récupération des enregistrements...
  // Génération du flux......
?>

Il ne vous reste alors plus qu'à faire autant de liens flux-news.php?idCategorie=xx qu'il n'y a de catégories enregistrées dans votre base de données.

Votre second problème est quant à lui aussi simple à résoudre que le premier. Il s'agit en fait d'un mauvais format envoyé dans la méthode d'ajout de date de publication. En effet, dans votre base de données, vos timestamps sont enregistrés avec un format INTEGER. C'est à dire le nombre de secondes écoulées depuis le premier janvier 1970. Or la méthode setPubDate() s'attend à recevoir un paramètre de type chaine de caractères et de format DATE US (exemple : 2007-12-08 ou 2007-12-08 23:45:13). Il faut donc que vous fassiez cette conversion avant de transmettre la valeur à la méthode. Dans votre cas, c'est extrêmement simple. Il vous suffit seulement de faire ceci :

<?php
  $dateFormatUs = date('Y-m-d H:i:s', intval($row['timestamp_validation']));
?>

Il ne vous restera plus qu'à transmette la variable $dateFormatUs à la méthode *setPubDate() *et aux autres méthodes manipulant des formats de date.

Enfin dernière chose. Je vous invite à revoir les types de données dans votre base afin d'optimiser les espaces de stockage. En effet, un INT(11) prendra plus de place qu'un TINYINT(). Dans le cas de vos catégories, je doute que votre site ait plus de 255 catégories de news ? Vous pouvez donc transformer vos id_categorie en TINYINT(3) UNSIGNED. Vous optimiserez ainsi les espaces de stockage de vos valeurs.

A bientôt.

 
Par mikaweb  -  Le 08/12/2007 12:35  -  Haut de page  - 

Merci de votre réponse.

Concernant les dates, j'avais tenté d'appliqué un filtre "maison" que j'utilisais pour une autre application qui avait pour même but de recoder le timestamp UNIX en datetime mais j'ai eu quelques complications.

Pour la génération de Flux, c'est vrai que une fois qu'on a compris le principe c'est tout simple.

Je vais tester tout ceci cet après midi et je repasserais vous donner mes résultats.

Encore merci et bon taff pour cette classe ainsi que l'ATOM.

 
Par mikaweb  -  Le 08/12/2007 21:01  -  Haut de page  - 

C'est tout bon,

merci de ton aide précieuse.

 
Par Emacs  -  Le 09/12/2007 01:05  -  Haut de page  - 

Pas de quoi ;)

Je mets ton post en résolu.

 

Ajouter une réponse à la discussion

Seuls les membres connectés sont autorisés à poster dans les forums !

Identifiez-vous
Join |  ID/MDP? |