Magpierss : Générer un flux rss

Toutes les questions et les aides qui concernent le langage PHP
Avatar de l’utilisateur
twin
Tutomaker Apprenti
Tutomaker Apprenti
 
Messages: 51
Enregistré le: Mar Aoû 19, 2008 3:53 pm
Localisation: Sur le serveur

Magpierss : Générer un flux rss

Messagepar twin le Mer Oct 08, 2008 6:34 pm

Hello,

Je reviens ici pour une nouvelle question qui dépasse mes compétences.

Je travail avec Magpierss où je récupère des flux de plusieurs sites. J'aimerais pouvoir générer un seul et unique flux rss via ceux que je récupère.

Plus clairement, j'ai :
- Flux 1
- Flux 2
- Flux 3
que j'affiche. Et je veux générer :
- Flux des 3 sites.

Est-ce que quelqu'un a déjà fait quelque chose de similaire. Sinon, par où commencer ?

Merki d'avance
Thomas

Avatar de l’utilisateur
Yoyo
Gérant
Gérant
 
Messages: 2031
Enregistré le: Mer Sep 27, 2006 4:54 pm

Re: Magpierss : Générer un flux rss

Messagepar Yoyo le Mer Oct 08, 2008 6:45 pm

Salut,

Si tes 3 flux ont en gros la même structure, tu peux surement t'amuser à générer un seul flux rss. Il suffit de récupérer toutes les entrées que tu voudras mettre dans ton flux xml avec magpierss et d'en créer un en y insérant les données provenant des 3 comme si il n'y en avait qu'un seul.

Si t'y arrives pas, tu peux tenter de passer par une base de données. Tu mets tout en base de données, puis tu génères un flux rss avec ce que tu as en bdd.

Il y a surement moyen d'en générer un à la volée à partir des 3, c'est pas plus dur que d'en faire un tout seul si ce n'est qu'il faut que tu saches jouer avec les valeurs des 3 en même temps.

Avant de penser à faire un flux rss compliqué, tu sais en générer un tout simple au moins ? Il vaudrait peut-être mieux commencer par là :mrgreen:
Vive les tutomakers ;)

Avatar de l’utilisateur
twin
Tutomaker Apprenti
Tutomaker Apprenti
 
Messages: 51
Enregistré le: Mar Aoû 19, 2008 3:53 pm
Localisation: Sur le serveur

Re: Magpierss : Générer un flux rss

Messagepar twin le Mer Oct 08, 2008 7:25 pm

Toujours aussi réactif et clair dans les réponses ! J'adore ce forum ;)
En fait les valeurs sont misent directement dans une bdd. Je pensais les récupérer par là.

Sinon, j'ai jamais était amené à créer un flux (j'utilise souvent des cms...), du coup, je vais déjà voir à en faire un...ensuite on verra :)

Il faut d'abord que je termine complètement la structure du site en question sur lequel j'intègre cela; et une fois terminé, je m'en occupe. En fait, je voulais surtout savoir pour l'instant si cela est techniquement possible.

Encore merci, je remonterais le topic d'ici quelques jours si j'ai réussi ou j'ai des problèmes ;)

Avatar de l’utilisateur
Yoyo
Gérant
Gérant
 
Messages: 2031
Enregistré le: Mer Sep 27, 2006 4:54 pm

Re: Magpierss : Générer un flux rss

Messagepar Yoyo le Mer Oct 08, 2008 7:50 pm

Tiens si ça peut t'aider, j'avais justement testé de générer un flux à partir d'une bdd il y a très longtemps :

Code: Tout sélectionner
<?php
echo 
'<?'.'xml version="1.0" encoding="iso-8859-1"'.'?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">';
?>
<channel>
<?php
$id_cat 
= intval($_GET['id_cat']);

//Connexion à la bdd ici

$retour = mysql_query('SELECT url,titre FROM categorie WHERE id = '.$id_cat);
mysql_close();

$donnees = mysql_fetch_array($retour);
echo '<title>Les Derniers '.html_entity_decode(strtolower($donnees['titre'])).'</title>
<link>http://www.monsite.net/'
.$donnees['url'].'.html</link>
<description>Liste des 30 derniers tests '
.$donnees['url'].'</description>
<language>fr</language>'
;

include(
"includes/db_conf.php");    
$retour 
= mysql_query('SELECT langue,marque,modele,site,lien FROM tests WHERE id_cat = '.$id_cat.' ORDER BY date DESC LIMIT 0,29');
mysql_close();

while ( $donnees = mysql_fetch_array($retour) )
{
            $donnees['lien'] = str_replace("&amp;","&",$donnees['lien']);
            //$donnees['lien'] = str_replace("&","&amp;",$donnees['lien']);
//list($annee,$mois,$jour) = explode("-", $donnees['date']); 
echo '<item><title><![CDATA['.$donnees['marque'].' - '.$donnees['modele'].']]></title>';
echo '<link><![CDATA['.$donnees['lien'].']]></link>';
echo '<description><![CDATA[Test de langue: <strong>'.$donnees['langue'].'</strong> provenant du site <strong>'.$donnees['site'].'</strong>]]></description></item>';
}
?>

</channel></rss>


Les CDATA servent à ignorer tous les caractères accentuées et spéciaux, sinon le flux ne fonctionne pas.
Vive les tutomakers ;)

Avatar de l’utilisateur
twin
Tutomaker Apprenti
Tutomaker Apprenti
 
Messages: 51
Enregistré le: Mar Aoû 19, 2008 3:53 pm
Localisation: Sur le serveur

Re: Magpierss : Générer un flux rss

Messagepar twin le Mer Oct 08, 2008 7:58 pm

Merki. Par contre, j'ai pas compris le flux ne marche pas ? :)

Avatar de l’utilisateur
Yoyo
Gérant
Gérant
 
Messages: 2031
Enregistré le: Mer Sep 27, 2006 4:54 pm

Re: Magpierss : Générer un flux rss

Messagepar Yoyo le Mer Oct 08, 2008 8:43 pm

Ou ça les flux ne marchent pas ? J'ai jamais dit ça, je t'ai parlé du fait de mettre les balises CDATA ou pas ^^
Vive les tutomakers ;)

Avatar de l’utilisateur
twin
Tutomaker Apprenti
Tutomaker Apprenti
 
Messages: 51
Enregistré le: Mar Aoû 19, 2008 3:53 pm
Localisation: Sur le serveur

Re: Magpierss : Générer un flux rss

Messagepar twin le Mer Oct 08, 2008 9:17 pm

Désolé, je suis complètement crevé et j'ai à moitié lu ta dernière réponse. :)

Avatar de l’utilisateur
twin
Tutomaker Apprenti
Tutomaker Apprenti
 
Messages: 51
Enregistré le: Mar Aoû 19, 2008 3:53 pm
Localisation: Sur le serveur

Re: Magpierss : Générer un flux rss

Messagepar twin le Mer Oct 15, 2008 2:56 pm

Hello,

C'est re-moi :)
J'ai testé ton code, et je me suis rapidement pris la tête avec. Du coup, je suis passé sur un tuto. Pour l'instant, je souhaite uniquement afficher mon titre dans les flux rss...la suite on verra après. J'ai donc le code suivant :

Code: Tout sélectionner
<?php

// édition du début du fichier XML
$xml '<?xml version="1.0" encoding="iso-8859-1"?><rss version="2.0">';
$xml .= '<channel>'
$xml .= '<title>ToileF1</title>';

// connexion a la base
include'function.php';
$ok='';
// connection a la base de donné
base($bdd1,$bdd2,$bdd3,$bdd4);


// selection des 5 dernieres news
$res=mysql_query("SELECT * FROM article_flux ORDER BY date DESC LIMIT, 5");

// extraction des informations et ajout au contenu
while($tab=mysql_fetch_array($res)){
    
$titre=$tab[titre];
    
$xml .= '<item>';
    
$xml .= '<title>'.$titre.'</title>';
    
$xml .= '</item>';    
}

// édition de la fin du fichier XML
$xml .= '</channel>';
$xml .= '</rss>';

// écriture dans le fichier
$fp fopen("flux.xml"'w+');
fputs($fp$xml);
fclose($fp);
@
mysql_close();

?>


Et je me retrouve avec :

Code: Tout sélectionner
Warningmysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/www/e41d50407c9353c59c356da18a6f73b3/web/en/rss.php on line 19

Warning
fopen(flux.xml) [function.fopen]: failed to open streamPermission denied in /home/www/e41d50407c9353c59c356da18a6f73b3/web/en/rss.php on line 31

Warning
fputs(): supplied argument is not a valid stream resource in /home/www/e41d50407c9353c59c356da18a6f73b3/web/en/rss.php on line 32

Warning
fclose(): supplied argument is not a valid stream resource in /home/www/e41d50407c9353c59c356da18a6f73b3/web/en/rss.php on line 33


Il se connecte bien à la BDD. Mais j'ai un problème avec la ligne 19, soit :
while($tab=mysql_fetch_array($res)){

J'ai compris que $res va sélectionner la table de la bdd (article_bdd pour moi)
Mais alors :
while($tab=mysql_fetch_array($res)){
$titre=$tab[titre];
Je ne suis pas certains de comprendre.

Quelqu'un aurait-il une solution ?

Merki d'avance ;)

Avatar de l’utilisateur
Yoyo
Gérant
Gérant
 
Messages: 2031
Enregistré le: Mer Sep 27, 2006 4:54 pm

Re: Magpierss : Générer un flux rss

Messagepar Yoyo le Mer Oct 15, 2008 5:26 pm

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/www/e41d50407c9353c59c356da18a6f73b3/web/en/rss.php on line 19

La requête est bien correcte ? La virgule qu'est-ce qu'elle fait la ? Toujours tester sa requête sur phpmyadmin !!!!!

Warning: fopen(flux.xml) [function.fopen]: failed to open stream: Permission denied in /home/www/e41d50407c9353c59c356da18a6f73b3/web/en/rss.php on line 31
Warning: fclose(): supplied argument is not a valid stream resource in /home/www/e41d50407c9353c59c356da18a6f73b3/web/en/rss.php on line 33
Warning: fputs(): supplied argument is not a valid stream resource in /home/www/e41d50407c9353c59c356da18a6f73b3/web/en/rss.php on line 32

Problème de permissions sur le fichier, règle les chmods à l'aide de ton client ftp
Vive les tutomakers ;)

Avatar de l’utilisateur
twin
Tutomaker Apprenti
Tutomaker Apprenti
 
Messages: 51
Enregistré le: Mar Aoû 19, 2008 3:53 pm
Localisation: Sur le serveur

Re: Magpierss : Générer un flux rss

Messagepar twin le Mer Oct 15, 2008 8:28 pm

La requête; tu parle de celle-ci ? : while($tab=mysql_fetch_array($res)){
Comment la tester sur phpmyadmin ? çà m'intéresse.

Désolé de le rappeler, mais je suis débutant en php; alors que sa fait des années que je souhaite apprendre correctement
Modifié en dernier par twin le Mer Oct 15, 2008 8:54 pm, modifié 2 fois.

Avatar de l’utilisateur
Yoyo
Gérant
Gérant
 
Messages: 2031
Enregistré le: Mer Sep 27, 2006 4:54 pm

Re: Magpierss : Générer un flux rss

Messagepar Yoyo le Mer Oct 15, 2008 8:51 pm

Pour apprendre, il existe des cours, ça sert pas à rien ;)

Dans phpmyadmin, tu as un onglet SQL oµ tu peux tester tes requêtes avant de les insérer dans ton code :D
Vive les tutomakers ;)

Avatar de l’utilisateur
twin
Tutomaker Apprenti
Tutomaker Apprenti
 
Messages: 51
Enregistré le: Mar Aoû 19, 2008 3:53 pm
Localisation: Sur le serveur

Re: Magpierss : Générer un flux rss

Messagepar twin le Mer Oct 15, 2008 8:54 pm

edit : Visiblement çà fonctionne mais j'ai toujours le problème pour modifier les chmod. Du coup, j'ai crée un fichier flux.xml, mais cela ne semble pas l'avoir aidé.

Avatar de l’utilisateur
Yoyo
Gérant
Gérant
 
Messages: 2031
Enregistré le: Mer Sep 27, 2006 4:54 pm

Re: Magpierss : Générer un flux rss

Messagepar Yoyo le Mer Oct 15, 2008 8:56 pm

Comment ça visiblement ça fonctionne, je peux t'assurer que tu vas te payer une belle erreur en testant ta requête dans la console phpmyadmin du type:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' 5' at line 1

C'est normal, il y a une virgule qui fait tout foirer, enlève la de ta requête et ça marchera mieux.

Pour le chmod, clic droit sur le fichier dans ton client ftp, puis tu dois avoir une option pour changer le chmod. Autorise l'écriture et le tour est joué ;)
Vive les tutomakers ;)

Avatar de l’utilisateur
twin
Tutomaker Apprenti
Tutomaker Apprenti
 
Messages: 51
Enregistré le: Mar Aoû 19, 2008 3:53 pm
Localisation: Sur le serveur

Re: Magpierss : Générer un flux rss

Messagepar twin le Mer Oct 15, 2008 9:18 pm

Oui, c'est bien la virgule qui faisait planter ;)
Pour le chmod, c'est bien en 777 que je dois mettre le répertoire, et le fichier xml ?

Avatar de l’utilisateur
twin
Tutomaker Apprenti
Tutomaker Apprenti
 
Messages: 51
Enregistré le: Mar Aoû 19, 2008 3:53 pm
Localisation: Sur le serveur

Re: Magpierss : Générer un flux rss

Messagepar twin le Mer Oct 15, 2008 9:31 pm

Bon çà fonctionne presque, voir :

Le problème, il affiche les premiers flux et non les derniers. J'ai donc modifié :
$res=mysql_query("SELECT * FROM article_flux ORDER BY date DESC LIMIT 5");
par
$res=mysql_query("SELECT * FROM article_flux ORDER BY date ASC LIMIT 5");

Mais cela ne fonctionne pas. Comment faire ?

En tout cas, merci beaucoup pour toute ton aide ;)

Edit : J'ai tout simplement modifié date par id, et cela fonctionne !
Génial, je pensais jamais y arriver et une fois de plus, les tutonaute m'ont donnée une super aide avec la rage de vaincre :) lol

Avatar de l’utilisateur
twin
Tutomaker Apprenti
Tutomaker Apprenti
 
Messages: 51
Enregistré le: Mar Aoû 19, 2008 3:53 pm
Localisation: Sur le serveur

Re: Magpierss : Générer un flux rss

Messagepar twin le Mer Oct 15, 2008 11:21 pm

Arf, finalement j'ai un gros problème. Mon flux fonctionne, mais le seul problème et que le champ actuel "URL" est utilisé pour afficher les adresse des sites sur lesquels je reprend les infos.

Comment faire pour créez et important mes urls dans la table ? Je suppose qu'il risque d'être très difficile de m'aider.

$ajout= "INSERT INTO article_flux (titre, texte, date, url, site) VALUES('$item[title]','$item[description]','$item[date]','$item[link]','$verification2[nom]')";

Je sais que je dois ajouter des données ici (function.php); mais ensuite ? Comment demander pour que les urls (en + rewriter) soit impotté dans cette table ?

----
Ou alors est-ce qu'il est possible de mettre (sans passer par mes url rewrinté) mettre :
$lien=$tab[id];

$xml .= '<link>'.$lien.'</link>';

Cela va donc afficher l'id de l'article. Mais devant, j'aimerais avoir "http://www.monsite.com/News_id.php"
Une solution ? Sa devrait être plus simple que d'importer mon url dans ma bdd pour ensuite l'afficher, non ?

Avatar de l’utilisateur
Yoyo
Gérant
Gérant
 
Messages: 2031
Enregistré le: Mer Sep 27, 2006 4:54 pm

Re: Magpierss : Générer un flux rss

Messagepar Yoyo le Mer Oct 15, 2008 11:41 pm

Oula pas trop bien saisi la suite, mais le flux xml fonctionne donc c'est bon ? lol
Vive les tutomakers ;)

Avatar de l’utilisateur
twin
Tutomaker Apprenti
Tutomaker Apprenti
 
Messages: 51
Enregistré le: Mar Aoû 19, 2008 3:53 pm
Localisation: Sur le serveur

Re: Magpierss : Générer un flux rss

Messagepar twin le Jeu Oct 16, 2008 12:01 am

Il fonctionne mais pas les url.

Mes url à intégrer aux articles de mon flux ne sont pas dans ma bdd. Du coup je souhaite afficher :
www.monsite.com/archive.php?lire=6253

Pour afficher l'id de l'article, je la récupère dans ma bdd avec :
$lien=$tab[id];
$xml .= '<link>'.$lien.'</link>';


Du coup, dans mon flux j'ai <link>6253</link>
Et j'aimerais avoir : <link>http://www.monsite.com/archive.php?lire=6253</link>

J'essaye d'ajouter une fonction avec http://www.monsite.com/archive.php?lire= à mettre avant '.$lien.', mais sans succès.

Avatar de l’utilisateur
Yoyo
Gérant
Gérant
 
Messages: 2031
Enregistré le: Mer Sep 27, 2006 4:54 pm

Re: Magpierss : Générer un flux rss

Messagepar Yoyo le Jeu Oct 16, 2008 12:33 am

Bah c'est pourtant la meilleur solution, mais encore une fois, si tu donnes pas le code, j'ai pas assez pour répondre...

Bonne nuit.
Vive les tutomakers ;)

Avatar de l’utilisateur
twin
Tutomaker Apprenti
Tutomaker Apprenti
 
Messages: 51
Enregistré le: Mar Aoû 19, 2008 3:53 pm
Localisation: Sur le serveur

Re: Magpierss : Générer un flux rss

Messagepar twin le Jeu Oct 16, 2008 1:18 am

Oups, excuse moi.

Le code de mon fichier rss.php :
Code: Tout sélectionner
    <?php

    
// édition du début du fichier XML
    $xml = '<?xml version="1.0" encoding="iso-8859-1"?><rss version="2.0">';
    $xml .= '<channel>'; 
    $xml 
.= '<title>ToileF1</title>';
    $xml .= '<link>http://en.toilef1.com/</link>';


    // connexion a la base
    include'function.php';
    $ok='';
    // connection a la base de donné
    base($bdd1,$bdd2,$bdd3,$bdd4);


    // selection des 5 dernieres news
    $res=mysql_query("SELECT * FROM article_flux ORDER BY id DESC LIMIT 5");

    // extraction des informations et ajout au contenu
    while($tab=mysql_fetch_array($res)){
        $titre=$tab[titre];
        $lien=$tab[id];
        $description=$tab[texte];



        $xml .= '<item>';
        $xml .= '<title>'.$titre.'</title>';
        $xml .= '<link>'.$lien.'</link>';
        $xml .= '<description>'.$description.'</description>';
        $xml .= '</item>';    
    
}

    // édition de la fin du fichier XML
    $xml .= '</channel>';
    $xml .= '</rss>';

    // écriture dans le fichier
    $fp = fopen("flux.xml", 'w+');
    fputs($fp, $xml);
    fclose($fp);
    @mysql_close();

    ?>


Code de function.php
Code: Tout sélectionner
<?php 

$bdd1
='mysql.mondomaine.com'; // adresse
$bdd2='xxx'; // login
$bdd3='xxx'; // password
$bdd4='xxxxx'; // base de donnée



//////// NE PAS TOUCHER /////////////

// système de connection
@require_once("../magpierss/rss_fetch.inc");
function base($bdd1,$bdd2,$bdd3,$bdd4){
$db = mysql_connect($bdd1, $bdd2, $bdd3)  or die('Erreur de connexion '.mysql_error());
mysql_select_db($bdd4,$db)  or die('Erreur de selection '.mysql_error()); 
}

// système de lecture du flux rss
function FeedParser($url_feed,$id_n, $nb_items_affiches=10)
{

  $rss = fetch_rss($url_feed);
  
  if 
(is_array($rss->items))
  {

   $items = array_slice($rss->items,
    0, $nb_items_affiches);
   foreach ($items as $item)
   {
   
   $item
['title'] = str_replace(array('\'','"'), array('&#39;','&quot;'), $item['title']);
$item['title']=htmlentities($item['title']);
$verification = mysql_num_rows(mysql_query("SELECT * FROM article_flux WHERE titre='".$item['title']."'"));
if(
$verification==0){  




$verification2 
= mysql_fetch_array(mysql_query("SELECT * FROM site2 WHERE id='".$id_n."'"));

$item['description'] = str_replace(array('\'','"'), array('&#39;','&quot;'), $item['description']);
$item['description']=htmlentities($item['description']);
 
$ajout
= "INSERT INTO article_flux (titre, texte, date, url, site) VALUES('$item[title]','$item[description]','$item[date]','$item[link]','$verification2[nom]')"; 
mysql_query
($ajout) or die('Erreur ajout !'.$ajout.'<br>'.mysql_error()); 

    
} 
   
}
 }
}


function remove_tags($tachaine)
{

return preg_replace('`<img src="[^"]+"(?: [[:alpha:]]+="[^"]+")* ?/?>`', '', $tachaine);
}
// système de mise a jour
base($bdd1,$bdd2,$bdd3,$bdd4);
$sql = "SELECT * FROM site2";
$req = mysql_query($sql) or die('Une Erreur SQL !<br>'.$sql.'<br>'.mysql_error());   
while($data = mysql_fetch_array($req)){ 
@FeedParser($data['url'],$data['id']); } 

$sql 
= "SELECT * FROM info WHERE id='1'";$data = mysql_fetch_array(mysql_query($sql));$nombre1=$data['info'];
$sql = "SELECT * FROM info WHERE id='2'";$data = mysql_fetch_array(mysql_query($sql));$nombre2=$data['info'];
?>


En fait, j'ai le problème décrit dans mon post précédent, et la date qui elle, ne s'insère dans la table "date". Si tu as le temps de jeter un oeil et de voir d'où sa peux venir, sa serait tip top :wink2:

Merci encore pour toute ton aide. Tes plutôt patient avec moi :wink:


Suivante

Retourner vers Langage PHP

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 0 invités