Archives FluxBB.fr

Les archives de FluxBB.fr

Recherche rapide

Vous n'êtes pas identifié(e).

Version 1.4.13 : [.tar.gz][.zip] (maj 20/10/2014)
Pack langue française pour 1.4.x : [.zip] (maj 06/01/2012)

Branche 1.5.x : fluxbb.org

Version 1.2.24 fr (entièrement en français) : [.zip] (maj 26/08/2011)
Pack langue française pour 1.2.x : [.zip] [.rar] (maj 15/10/2006)

Vous avez un problème ?
Avant de poser votre question sur les forums d'entraide nous vous invitons à consulter :

#26 04-02-2009 22:31:08

renkei
Membre

Re : Recuperer des flux RSS distant dans un forum

Hors ligne

#27 04-02-2009 22:57:23

oldie-2
Habitué très actif

Re : Recuperer des flux RSS distant dans un forum

Ah oui, ça m'a lair très bien !

Hors ligne

#28 05-02-2009 19:38:11

renkei
Membre

Re : Recuperer des flux RSS distant dans un forum

mais par contre je n'ai pas les connaissance pour savoir l'utiliser tongue je doit le mettre ou ?
dans mon script ou sur un fichier du forum ?

Hors ligne

#29 05-02-2009 19:55:14

oldie-2
Habitué très actif

Re : Recuperer des flux RSS distant dans un forum

Tu copies-colles le code de vin100 à la fin du fichier functions.php (par exemple)

et le code pour le rss devient :

if (!$pun_user['is_guest'])
{
    $feed = "http://XXXXXXX"; //adresse du fil rss
    $rss = @simplexml_load_file($feed); 
    if ($rss !== false) 
    {
      $username = $pun_user['username'];
      $fid = X; // id du forum où doit s'insérer le topic
      foreach ($rss->channel->item as $item) 
      { 
        $now = time();
        $subject = $item->title;
        $message = parse_message(xhtml_to_bbcode($item->description), 0);
        // Create the topic
        $db->query('INSERT INTO '.$db->prefix.'topics (poster, subject, posted, last_post, last_poster, forum_id) VALUES(\''.$db->escape($username).'\', \''.$db->escape($subject).'\', '.$now.', '.$now.', \''.$db->escape($username).'\', '.$fid.')') or error('Unable to create topic', __FILE__, __LINE__, $db->error());
        $tid = $db->insert_id();
        // Create the post ("topic post")
        $db->query('INSERT INTO '.$db->prefix.'posts (poster, poster_id, poster_ip, message, posted, topic_id) VALUES(\''.$db->escape($username).'\', '.$pun_user['id'].', \''.get_remote_address().'\', \''.$db->escape($message).'\', '.$now.', '.$tid.')') or error('Unable to create post', __FILE__, __LINE__, $db->error());
      }
    }
 }

Hors ligne

#30 05-02-2009 20:23:22

renkei
Membre

Re : Recuperer des flux RSS distant dans un forum

merci !!!!!!

mais sa marche pas .. les balises html sont toujours visibles.

j'ai installez le mod allowhtml (ca permet d'afficher du html dans les post )
comment je peut faire pour que dans le script j'ai la balise [html] qui entoure tout l'article importé du flux rss ?

edit : faudrait aussi décoder l'utf8 des articles rss en ISO-8859-1 pour le forum ..


rhaaa je me sens ignorant T_T

Dernière modification par renkei (05-02-2009 21:09:54)

Hors ligne

#31 05-02-2009 21:09:28

oldie-2
Habitué très actif

Re : Recuperer des flux RSS distant dans un forum

Je serai étonné que le code de vin100 ne fonctionne pas ! Peux-tu montrer le code qui crée le topic pour le flux ?

Sinon pour ajouter le BBCode [html], là où il y a $item->description, remplacer par '[html]'.$item->description.'[/html]'

Hors ligne

#32 05-02-2009 21:14:56

renkei
Membre

Re : Recuperer des flux RSS distant dans un forum

ouep voila

{
    $feed = "http://feeds2.feedburner.com/Renkei-IncreaseYourPower"; //adresse du fil rss
    $rss = @simplexml_load_file($feed); 
    if ($rss !== false) 
    {
      $username = $pun_user['username'];
      $fid = 13; // id du forum où doit s'insérer le topic
      foreach ($rss->channel->item as $item) 
      { 
        $now = time();
        $subject = $item->title;
        $message = parse_message(xhtml_to_bbcode($item->description), 0);
        // Create the topic
        $db->query('INSERT INTO '.$db->prefix.'topics (poster, subject, posted, last_post, last_poster, forum_id) VALUES(\''.$db->escape($username).'\', \''.$db->escape($subject).'\', '.$now.', '.$now.', \''.$db->escape($username).'\', '.$fid.')') or error('Unable to create topic', __FILE__, __LINE__, $db->error());
        $tid = $db->insert_id();
        // Create the post ("topic post")
        $db->query('INSERT INTO '.$db->prefix.'posts (poster, poster_id, poster_ip, message, posted, topic_id) VALUES(\''.$db->escape($username).'\', '.$pun_user['id'].', \''.get_remote_address().'\', \''.$db->escape($message).'\', '.$now.', '.$tid.')') or error('Unable to create post', __FILE__, __LINE__, $db->error());
      }
    }
 }

et je test avec les balise html .. mmm ca ne marche pas non plus tongue

faudrait aussi décoder l'utf8 des articles rss en ISO-8859-1 pour le forum ..

désolé je ne m'y connais pas beaucoup .. c'est vraiment sympa de m'aider happy

Dernière modification par renkei (05-02-2009 21:15:57)

Hors ligne

#33 05-02-2009 21:16:07

oldie-2
Habitué très actif

Re : Recuperer des flux RSS distant dans un forum

pour convertir du utf-8 en iso-889-1, voici une fonction bien utile : utf8_decode

Hors ligne

#34 05-02-2009 21:27:35

renkei
Membre

Re : Recuperer des flux RSS distant dans un forum

ok donc rien ne marche même le :

    utf8_decode($rss);

(merci d'ailleurs tongue)

Dernière modification par renkei (05-02-2009 21:50:28)

Hors ligne

#35 05-02-2009 21:59:34

renkei
Membre

Re : Recuperer des flux RSS distant dans un forum

ca vient peut etre du rss .. voila le xml

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:atom="http://www.w3.org/2005/Atom"
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    >

<channel>
    <title>titre</title>
    <atom:link href="url du rss" rel="self" type="application/rss+xml" />
    <link>lien du blog</link>
    <description>blab  bla</description>
    <pubDate>date..</pubDate>

    <generator>http://wordpress.org/?v=2.7</generator>
    <language>en</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
            <item>

        <title>blabla</title>

        <link>url</link>
        <comments>commentaire</comments>
        <pubDate>date</pubDate>
        <dc:creator>auteur</dc:creator>
        
        <description>une petite description</description>
            <content:encoded> le contenu </content:encoded>

        </item>

Dernière modification par renkei (05-02-2009 22:00:05)

Hors ligne

#36 05-02-2009 23:27:03

Lyconide
Habitué

Re : Recuperer des flux RSS distant dans un forum

Pour les balises "html". Le but c'est de mettre le message dans la base converti en bbcode je crois.

Donc quand tu crées le message, "parse_message" est de trop (vu que cette fonction permet de passer le bbcode en html... (ouais j'me souvenais plus tongue) et pour le coup, la tu fais html->bbcode->html)

ce qui donne :
$message = xhtml_to_bbcode($item->description);

Logiquement, tu devrais un message correct au niveau balise, enfin je crois tongue

Hors ligne

#37 06-02-2009 00:47:29

renkei
Membre

Re : Recuperer des flux RSS distant dans un forum

ouaaa merci énormément sa marche parfait !

et aussi autre problème je voudrais récupérer la balise "content" du flux rss mais le problème c'est que elle s'appelle <content:encoded> du coup quand je fait ça $message = xhtml_to_bbcode($item->content:encoded); 
ba ca peut pas marcher à cause du ":" ...
car dans <description> il n'y a n'y liens ni images ..

et sinon j'ai resolu le problème de codage du texte sa s'affiche parfait avec les accents et tout

Hors ligne

#38 06-02-2009 08:44:36

renkei
Membre

Re : Recuperer des flux RSS distant dans un forum

et op la j'ai réussi ! avec ca :

$data = file_get_contents("http://feeds2.feedburner.com/Renkei-IncreaseYourPower?format=xml");
    $data = str_replace("content:encoded>","content>",$data);
    $rss = @simplexml_load_string($data);

bon ba il reste juste le problème de vérifier si le topic na pas déjà été crée ... parce que la a chaque fois ca re-crée tous les articles sur le forum

Hors ligne

#39 06-02-2009 18:44:17

renkei
Membre

Re : Recuperer des flux RSS distant dans un forum

j'ai essayé ça siffle:

mysql_connect(mot de passe et toussa);
        mysql_select_db(le nom dla base);
        $titre_deja = mysql_query("SELECT subject FROM  for_topics ");
        
        if ($subject != mysql_fetch_array($titre_deja) )

Mais bon bien sur sa marche pas ... lol
ou sinon comment je peux faire pour juste prendre le dernier article ?
comme ça je lance une première fois le script et âpres je le relance des que j'écris des nouveaux articles


dzl pour le mutli post... ange

Dernière modification par renkei (06-02-2009 18:56:11)

Hors ligne

#40 06-02-2009 20:08:29

oldie-2
Habitué très actif

Re : Recuperer des flux RSS distant dans un forum

renkei a écrit :

et op la j'ai réussi ! avec ca :

$data = file_get_contents("http://feeds2.feedburner.com/Renkei-IncreaseYourPower?format=xml");
    $data = str_replace("content:encoded>","content>",$data);
    $rss = @simplexml_load_string($data);

ça marche mais ce n'est pas très élegant !
Dans un fichier xml, la chaine de caractères qui se trouve avant le ':' s'appelle un 'namespace' (espace de noms en français). Cela permet d'avoir, dans un même fichier xml, des balises de plusieurs sources xml et on peut ainsi désambiguiser les noms identiques des différentes sources en les préfixant par le namespace.

Les namespaces sont définis au début du fichier xml. dans ton exemple c'est :

xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:atom="http://www.w3.org/2005/Atom"
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"

xmlns signifie xml namespace.

Avec simplexml_load_file pour accéder au contenu d'une balise préfixé par un namespace, on utilise la fonction children appliquée à la balise parente, ce qui donne dans tons cas :

$description = $item->description->children(http://purl.org/rss/1.0/modules/content/'); 
$message = xhtml_to_bbcode($description->encoded);

Hors ligne

#41 06-02-2009 20:10:11

oldie-2
Habitué très actif

Re : Recuperer des flux RSS distant dans un forum

renkei a écrit :

et op la j'ai réussi ! avec ca :

$data = file_get_contents("http://feeds2.feedburner.com/Renkei-IncreaseYourPower?format=xml");
    $data = str_replace("content:encoded>","content>",$data);
    $rss = @simplexml_load_string($data);

ça marche mais ce n'est pas très élegant !
Dans un fichier xml, la chaine de caractères qui se trouve avant le ':' s'appelle un 'namespace' (espace de noms en français). Cela permet d'avoir, dans un même fichier xml, des balises de plusieurs sources xml et on peut ainsi désambiguiser les noms identiques des différentes sources en les préfixant par le namespace.

Les namespaces sont définis au début du fichier xml. dans ton exemple c'est :

xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:atom="http://www.w3.org/2005/Atom"
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"

xmlns signifie xml namespace.

Avec simplexml_load_file pour accéder au contenu d'une balise préfixé par un namespace, on utilise la fonction children appliquée à la balise parente, ce qui donne dans tons cas :

$description = $item->description->children('http://purl.org/rss/1.0/modules/content/'); 
$message = xhtml_to_bbcode($description->encoded);

Hors ligne

#42 06-02-2009 21:42:57

renkei
Membre

Re : Recuperer des flux RSS distant dans un forum

Cool merci ! ou est ce que je peut apprendre des trucs sur le xml ?


et je trouve pas comment filtrer les messages qui on déjà été crée ...

bonne soirée !

Hors ligne

#43 06-02-2009 23:28:29

Lyconide
Habitué

Re : Recuperer des flux RSS distant dans un forum

Si tu n'es pas plus exigeant sur l'unicité d'un post que le nom de son sujet, ce bout de code devrait aller (donc remplacer les 7 lignes à partir de $subject) :

        $subject = $item->title;
        $result = $db->query('SELECT id FROM '.$db->prefix.'topics WHERE subject LIKE '.$subject) or error('Unable to fetch topics subject', __FILE__, __LINE__, $db->error());;
        $num_subject = $db->num_rows($result);

        if ($num_subject == 0) {
            $message = parse_message(xhtml_to_bbcode($item->description), 0);
            
            // Create the topic
            $db->query('INSERT INTO '.$db->prefix.'topics (poster, subject, posted, last_post, last_poster, forum_id) VALUES(\''.$db->escape($username).'\', \''.$db->escape($subject).'\', '.$now.', '.$now.', \''.$db->escape($username).'\', '.$fid.')') or error('Unable to create topic', __FILE__, __LINE__, $db->error());
            $tid = $db->insert_id();
            
            // Create the post ("topic post")
            $db->query('INSERT INTO '.$db->prefix.'posts (poster, poster_id, poster_ip, message, posted, topic_id) VALUES(\''.$db->escape($username).'\', '.$pun_user['id'].', \''.get_remote_address().'\', \''.$db->escape($message).'\', '.$now.', '.$tid.')') or error('Unable to create post', __FILE__, __LINE__, $db->error());
        }

Si je n'ai pas fait d'erreur, ça devrait le faire big_smile

Hors ligne

#44 07-02-2009 00:22:35

renkei
Membre

Re : Recuperer des flux RSS distant dans un forum

arf erreur :

Error: Unable to fetch topics subject. ..

et un warning au dessus : Warning: ob_start() [ref.outcontrol]: output handler 'ob_gzhandler' cannot be used twice in /homepages/2/d196531865/htdocs/forum/include/functions.php on line 971

Hors ligne

#45 07-02-2009 01:00:34

Lyconide
Habitué

Re : Recuperer des flux RSS distant dans un forum

Ouais si j'oublie de mettre $subject entre guillemet, ça va pas le faire :-/

$result = $db->query('SELECT id FROM '.$db->prefix.'topics WHERE subject LIKE "'.$subject.'"') or error('Unable to fetch topics subject', __FILE__, __LINE__, $db->error());

Dernière modification par Lyconide (07-02-2009 01:00:53)

Hors ligne

#46 07-02-2009 02:11:28

renkei
Membre

Re : Recuperer des flux RSS distant dans un forum

la ça fait un truc bizarre :
je lance une première fois le script ça crée les topic ok, op justes âpres je le relance pour tester et la il me recopie pas tous les topic mais juste 3 .. Et si je relance encore une fois le script  il me re-recopie les 3 même articles, mais pas les autres ...

mmm c'est peut être pas clair.. en gros ya 10 articles dans le rss, au premier lancement les 10 sont recopiés et quand je relance le script il me recopie 3articles sur les 10

Dernière modification par renkei (07-02-2009 02:11:59)

Hors ligne

#47 07-02-2009 10:02:30

Lyconide
Habitué

Re : Recuperer des flux RSS distant dans un forum

$result = $db->query('SELECT id FROM '.$db->prefix.'topics WHERE subject LIKE "'.$db->escape($subject).'"') or error('Unable to fetch topics subject', __FILE__, __LINE__, $db->error());

Et comme ça ? siffle (*avait pas pensé au db->escape* enfin j'espère que c'est ca tongue)

Dernière modification par Lyconide (07-02-2009 10:03:37)

Hors ligne

#48 07-02-2009 11:35:17

renkei
Membre

Re : Recuperer des flux RSS distant dans un forum

la ca marche carrément pas tongue ca recopie tous à chaque fois

Hors ligne

#49 07-02-2009 11:54:11

oldie-2
Habitué très actif

Re : Recuperer des flux RSS distant dans un forum

Essaie de remplacer :

$num_subject = $db->num_rows($result);

par :

$num_subject = $result ? $db->num_rows($result) : 0;

pour voir

Et si ça ne marche pas, montre-nous tout le code, il y a peut-être une coquille quelquepart ....

Hors ligne

#50 07-02-2009 12:08:46

renkei
Membre

Re : Recuperer des flux RSS distant dans un forum

non ca ne marche ca doit être un truc que j'ai mal fait tongue

if (!$pun_user['is_guest'])
{
    $data = file_get_contents("http://feeds2.feedburner.com/Renkei-IncreaseYourPower?format=xml");
    $data = str_replace("content:encoded>","content>",$data);
    $rss = @simplexml_load_string($data); 
    if ($rss !== false) 
    {
      $username = $pun_user['username'];
      $fid = 15; // id du forum ou doit s'inserer le topic
      foreach ($rss->channel->item as $item) 

      { 
        $now = time();
        $subject = $item->title;
        $result = $db->query('SELECT id FROM '.$db->prefix.'topics WHERE subject LIKE "'.$db->escape($subject).'"') or error('Unable to fetch topics subject', __FILE__, __LINE__, $db->error());
        $num_subject = $result ? $db->num_rows($result) : 0;        
            if ($num_subject == 0) {
            $message = xhtml_to_bbcode($item->content);
            $message = utf8_decode($message);
            $subject = utf8_decode($subject);
       
            // Create the topic
            $db->query('INSERT INTO '.$db->prefix.'topics (poster, subject, posted, last_post, last_poster, forum_id) VALUES(\''.$db->escape($username).'\', \''.$db->escape($subject).'\', '.$now.', '.$now.', \''.$db->escape($username).'\', '.$fid.')') or error('Unable to create topic', __FILE__, __LINE__, $db->error());
            $tid = $db->insert_id();
            
            // Create the post ("topic post")
            $db->query('INSERT INTO '.$db->prefix.'posts (poster, poster_id, poster_ip, message, posted, topic_id) VALUES(\''.$db->escape($username).'\', '.$pun_user['id'].', \''.get_remote_address().'\', \''.$db->escape($message).'\', '.$now.', '.$tid.')') or error('Unable to create post', __FILE__, __LINE__, $db->error());
        }
      }
    }
 }

Hors ligne

Pied de page des forums