[Résolu] Création d'articles à partir d'un flux rss

webwwwwebwww Member
juillet 2014 modifié dans Entraide
Bonjour, sur mon site pluxml je veut pouvoir créer des articles à partir d'un flux rss youtube. J'ai vu le plugin fables_de_la_fontaine mais je cherche en fait un code simple pour mettre en ligne un article en php.
Je récupère pour chaque item le titre ($video_title) et le lien de la vidéo ($video_id).

Il me faut un truc comme ça :
<?php 
  # mon code pour lire le flux rss
   ...

   # création nouvelle catégorie ( ? )
   $new_cat = "My Title";

foreach ($news as $post): ?>
   # création de l'article pour chaque item ( ? )
   ...
   $pluxml_article_title=$video_title;
   $pluxml_article_content="<iframe width="100%" height="468" src="http://www.youtube.com/embed/'.$video_id.'" frameborder="0" allowfullscreen></iframe>";

<?php endforeach; ?>

Voilà, j'attends votre aide avec impatience.
Merci.

Réponses

  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour

    Pour un affichage à partir d'un flux rss, il faut déjà un parser de flux rss, donc autant dire rien de simple dès le départ. Il faudra utiliser une librairie externe qui permet de récupérer des flux distants (comme simplepie).

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Parser le flux rss, ça j'y arrive.
    Mais pour chaque item, je voudrais remplacer le code qui affiche le contenu par la création d'un article pluxml, automatiquement.
    L'objectif, c'est mettre chaque item récupéré dans un article pluxml.
  • Ce que j'ai besoin se trouve dans /core/admin/article.php mais il y a beaucoup trop de code.

    Supposons que j'ai un titre, un contenu et que je sache dans quelle catégorie créer mon article :
    $id_catégorie = 1;
    $titre = "Titre numéro 1"
    $contenu = "Ceci est l'article numéro 1"

    Comment créer un nouvel article dans la catégorie numéro 1 avec pour titre "Titre numéro 1" et pour contenu "Ceci est l'article numéro 1" ?
  • Tu fais un plugin qui parse le flux et qui fait la moulinette que tu veux. Faut aller dans l'admin du plugin à chaque fois que tu veux mettre à jours ta bdd
    Après tu peux faire une simple pages static qui affiche automatiquement les X derniers articles du flux ...
  • webwwwwebwww Member
    juillet 2014 modifié
    Bonjour Danielsan.
    Je me suis penché sur la création d'article en php, et pluxml utilise des fichiers xml... :
    <?php
    # xml data
    # ............
    
    # data
    $titre_article = "Nouveau";//$video_title;
    $contenu_article = '<iframe width="100%" height="468" src="http://www.youtube.com/embed/kZEw2xlwgsM" frameborder="0" allowfullscreen></iframe>';
    
    # generate new xml filename
    	# next id article
    	#$aKeys = array_keys($this->plxGlob_arts->aFiles)) {
    	#rsort($aKeys);
    	#	$f1 = str_pad($aKeys['0']+1,4, '0', STR_PAD_LEFT);
    	#}
    	#} else {
    	#	$f1 = '0001';
    	#}
    	$f1 = "0046"; # id article
    	$f2 = "011"; # id category
    	$f3 = "001"; # author
    	$f4 = date("YmdHi"); # date time
    	$f5 = strtolower($titre_article); # filename
    	$f_title = "".$f1.".".$f2.".".$f3.".".$f4.".".$f5.""; #result
    	echo $f_title;
    
    # write new xml file
    $myfile = fopen("data/articles/".$f_title.".xml", "w");
    $src = "<?xml version='1.0' encoding='UTF-8'?>\n
    <document>\n
    	<title><![CDATA[".$titre_article."]]></title>\n
    	<allow_com>1</allow_com>\n
    	<template><![CDATA[article-full-width.php]]></template>\n
    	<chapo><![CDATA[]]></chapo>\n
    	<content><![CDATA[".$contenu_article."]]></content>\n
    	<tags><![CDATA[".$titre_min."]]></tags>\n
    	<meta_description><![CDATA[]]></meta_description>\n
    	<meta_keywords><![CDATA[]]></meta_keywords>\n
    	<title_htmltag><![CDATA[]]></title_htmltag>\n
    </document>\n";
    fwrite($myfile, $src);
    fclose($myfile);
    echo " - ok";
    ?> 
    

    Le code fonctionne très bien dans un fichier php mais ne fonctionne pas dans une page statique (sans éditeur).
    Je coince au niveau du choix de l'id suivant.
  • StéphaneStéphane Member, Former PluXml Project Manager
    Oula on peut difficilement faire plus crade comme solution :)

    Je te propose une solution à partir d'une page statique
    C'est pour te donner une méthode pour t'en inspirer et que tu vois comment utiliser la méthode editArticle de plxAdmin qui se charge de créer les articles (ou les mettre à jour). A adapter, modifier en fonction de tes besoins.
    <?php
    
    $title = 'titre de l\'article';
    $chapo = 'chapo';
    $content = 'contenu';
    $tags = 'PluXml, Youtube';
    $author = '001'; # remplacer par l'id de l'auteur concerné par la création de l'article
    $category = array('001'); # pour plusieurs categories écrire: $category = array('001', '002');
    
    include(PLX_ROOT.'core/lib/class.plx.admin.php');
    include(PLX_ROOT.'core/lib/class.plx.msg.php');
    
    $plxAdmin = plxAdmin::getInstance();
    $art=array();
    $art['title'] = trim($title);
    $art['allow_com'] = $plxAdmin->aConf['allow_com'];
    $art['template'] = 'article.php';
    $art['chapo'] = trim($chapo);
    $art['content'] =  trim($content);
    $art['tags'] = trim($tags);
    $art['meta_description'] = '';
    $art['meta_keywords'] =  '';
    $art['title_htmltag'] =  '';
    $art['author'] = $author;
    $art['categorie'] = $category;
    $art['year'] = date('Y');
    $art['month'] = date('m');
    $art['day'] = date('d');
    $art['time'] = date('Hi');
    $id='0000';
    $plxAdmin->editArticle($art,$id);
    
    ?>
    

    Suffit d'aller sur la page statique coté visiteur pour créer l'article

    Petites explications:

    l'objet plxAdmin n'est accessible qu'à partir de la zone d'administration.
    c'est pour cela que les 2 includes sont nécessaires, car le script est appelé coté visiteur.
    le tableau $art contient tout ce qui est nécessaire à la fonction editArticle pour créer l'article
    le reste du code me semble suffisamment simple et clair pour le comprendre, mais n'hésite pas à poser des questions si besoin.

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • J'ai essayé cette solution qui fonctionne uniquement dans un fichier php de pluxml.
    L'article est bien crée mais le choix de la catégorie n'est pas prise en compte.

    Est-ce que ce code fonctionne dans une page externe à pluxml ? depuis un site externe à pluxml ?

    Merci Stéphane ;)
  • StéphaneStéphane Member, Former PluXml Project Manager
    webwww a écrit:
    Est-ce que ce code fonctionne dans une page externe à pluxml ? depuis un site externe à pluxml ?

    Non car il faut inclure toutes les librairies nécessaires au fonctionnement de PluXml
    Sinon il faut partir sur une solution autonome (un peu comme tu l'as pensé) qui va créer le fichier .xml en respectant le balisage et le formatage des données du fichier. Les règles de gestion sont dans la méthode editArticles de plxAdmin

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • webwwwwebwww Member
    juillet 2014 modifié
    J'ai remplacé $art par $contents, et ["catégorie"] par pour que l'article soit créer dans la catégorie adéquate.
    $plxAdmin = plxAdmin::getInstance();
    $contents=array();
    $contents['title'] = trim($title);
    $contents['allow_com'] = $plxAdmin->aConf['allow_com'];
    $contents['template'] = 'article.php';
    $contents['chapo'] = trim($chapo);
    $contents['content'] =  trim($content);
    $contents['tags'] = trim($tags);
    $contents['meta_description'] = '';
    $contents['meta_keywords'] =  '';
    $contents['title_htmltag'] =  '';
    $contents['author'] = $author;
    $contents['catId'] = $category;
    $contents['year'] = date('Y');
    $contents['month'] = date('m');
    $contents['day'] = date('d');
    $contents['time'] = date('Hi');
    $id='0000';
    $plxAdmin->editArticle($contents,$id);
    

    Edité !
    Je marque le sujet résolu ;)
  • StéphaneStéphane Member, Former PluXml Project Manager
    fait attention de ne pas avoir un conflit ici:
    $content['content'] =  trim($content);
    

    tu utilises $content comme array et string à la fois

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Ah super !!! Exactement ce que je voulais savoir.
    Parce que l'article est créer avec le chapeau mais sans contenu.
    Merci.
  • salut:)
    ce serait bien de voir en ligne ce que cela donne, voire même d'en 'sortir' un ... plugin :)
  • Salut bg62
    Je suis sur un hébergeur qui n'affiche pas les erreurs php, le développement n'est pas facile dans ses conditions. Le script est presque terminé mais j'ai une page blanche. Lorsque j'aurais trouvé la solution je partagerai le code complet.
    Sinon pour le résultat en ligne, ben... c'est un PluXml avec des articles :D
  • StéphaneStéphane Member, Former PluXml Project Manager
    @webwww

    Pour afficher les erreurs dans PluXml, édite le fichier core/lib/config.php

    et remplace
    # Gestion des erreurs PHP
    error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);
    
    par
    # Gestion des erreurs PHP
    #error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);
    

    ça te permettra peut-être de voir les erreurs

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • @ Stéphane : c'est au niveau de l'hébergeur que ça ne marche pas.

    @ bg62 : je commence à hésiter, je voulais intégrer un item par article dans PluXml (pour le tri, et le sort_by random) mais une zoombox ne serait pas plus mal :)
    http://web3w.olympe.in/exemple
    http://web3w.olympe.in/exemple2
Connectez-vous ou Inscrivez-vous pour répondre.