Superbaillot.net
Superbaillot.net
Rss-Bridge
Mes Rss-Bridges
Superbaillot le 11/11/2013

Mes Rss-Bridges

Rss-Bridge est un script développé par Sebsauvage qui permet de générer un flux RSS à partir d'une page HTML.
Il faut ajouter un "pont" par site dont vous voulez le flux RSS.

Voici les "ponts" que j'ai développé.
Ils sont disponible ici.
Mon serveur n'étant pas un monstre, je risque de fermer cet accès si ça le surcharge de trop. C'est pourquoi je met à disposition les sources de mes ponts, pour que vous puissiez les utiliser sur votre propre serveur.

  • AlestormBridge.php :
    
    <?php

    /**
     * Créé le    30/04/2016
     * Update    07/05/2018 :    mise à jour de RSS-Bridge
     */
    class AlestormBridge extends BridgeAbstract
    {

        const 
    MAINTAINER 'superbaillot.net';
        const 
    NAME 'alestorm.net';
        const 
    URI 'https://alestorm.net/';
        const 
    CACHE_TIMEOUT 43200// 12h hours
        
    const DESCRIPTION 'alestorm.net via Rss-bridge';

        public function 
    collectData()
        {
            
    $html file_get_html($this->getURI()) or $this->returnError('Could not request alestorm.'404);
            
    $element $html->find('section .inner'0);
            
    $titre $element->find('h1'0);

            
    $item = array();
            
    $item['title'] = 'Alestorm - ' $titre->innertext;
            
    $item['uri'] = $this->getURI() . "#" md5($item['title']);
            
    $item['content'] = $element->innertext;
            
    $this->items[] = $item;
        }
    }
    ?>
  • AllocineEmissionsActusBridge.php :
    
    <?php
    require_once("AllocineEmissionsBridge.php");

    /**
     * Créé le    08/09/2018
     */
    class AllocineEmissionsActusBridge extends AllocineEmissionsBridge
    {
        const 
    NAME "Allo Cine : Emissions Actus";
        const 
    DESCRIPTION "Allo Cine : Actus Bonus via rss-bridge";
        const 
    URI "https://www.allocine.fr/video/cat-158004/date-ajout/";
    }
    ?>
  • AllocineEmissionsBonusBridge.php :
    
    <?php
    require_once("AllocineEmissionsBridge.php");

    /**
     * Créé le    08/09/2018
     */
    class AllocineEmissionsBonusBridge extends AllocineEmissionsBridge
    {
        const 
    NAME "Allo Cine : Emissions Bonus";
        const 
    DESCRIPTION "Allo Cine : Emissions Bonus via rss-bridge";
        const 
    URI "https://www.allocine.fr/video/cat-158005/date-ajout/";
    }
    ?>
  • AllocineEmissionsBridge.php :
    
    <?php

    /**
     * Classe abstraite pour gérer les émissions d'Allo-Ciné.
     * La classe principale doit juste définir les constantes NOM et URI
     *
     * Créé le    29/10/2018
     */
    abstract class AllocineEmissionsBridge extends BridgeAbstract
    {

        const 
    MAINTAINER 'Superbaillot';
        const 
    CACHE_TIMEOUT 25200// 7 hours
        
    const URI "";

        public function 
    collectData()
        {
            
    $html file_get_html($this->getURI()) or $this->returnError('Could not request Allo cine.'404);

            foreach (
    $html->find('article') as $element)
            {
                
    $item = array();
                
    $img $element->find(".thumbs img"0);
                
    $time $element->find("time"0);
                
    $aTitre $element->find("h2.title a"0);
                
    $p $element->find("p"0);

                
    $content = ($img->outertext);
                if(
    $time != null)
                {
                    
    $content .= $time->innertext;
                }
                if(
    $p != null)
                {
                    
    $content .= trim($p->outertext);
                }
                
    $content str_replace('src="/''src="http://www.allocine.fr/'$content);
                
    $content str_replace('href="/''href="http://www.allocine.fr/'$content);
                
    $content str_replace('src=\'/''src=\'http://www.allocine.fr/'$content);
                
    $content str_replace('href=\'/''href=\'http://www.allocine.fr/'$content);

                
    $item['content'] = $content;
                if(
    $aTitre != null)
                {
                    
    $item['title'] = trim($aTitre->innertext);
                    
    $item['uri'] = "http://www.allocine.fr" $aTitre->href;
                    
    $this->items[] = $item;
                }
            }
        }
    }
    ?>
  • AllocineSortieBridge.php :
    
    <?php

    /**
     * Créé le    06/02/2014
     * Update    24/04/2016 : mise à jour de RSS-Bridge
     *             13/08/2016 : changement du site allociné
     *             31/08/2016 : changement de la classe du div d'un film
     *             11/01/2017 : Correction pour afficher à nouveau les affiches des films
     *          07/05/2018 : mise à jour de RSS-Bridge
     *          19/01/2019 : mise à jour le l'url, des classes utilisées et du contenu
     */
    class AllocineSortieBridge extends BridgeAbstract
    {

        const 
    MAINTAINER 'Superbaillot';
        const 
    NAME "Allo Cine : sorties de la semaine";
        const 
    URI "https://www.allocine.fr/film/sorties-semaine/";
        const 
    CACHE_TIMEOUT 3*3600;
        const 
    DESCRIPTION "Allo Cine : sorties de la semaine via rss-bridge";

        public function 
    collectData()
        {
            
    $html file_get_html($this->getURI()) or $this->returnError('Could not request Allo cine.'404);

            
    $pageAAnalyser true;
            
    $cpt 59;     // pour les classer comme sur le site qui est un ordre, certe
                        // subjectif, mais qui est à peu près correct en fonction de
                        // l'attente des films (basé sur le nombre de salle qui diffuse
                        // le film

            
    foreach ($html->find('div.entity-card-list') as $element)
            {
                
    $aTitre $element->find("h2.meta-title a"0);

                
    $dateContainer $element->find(".meta-body-info span"0);
                
    $list explode(" "trim($dateContainer->innertext));
                if(
    is_array($list) && sizeof($list)>=3)
                {
                    
    $jour $list[0];
                    
    $mois 1;
                    
    $annee $list[2];

                    switch (
    strtolower($list[1]))
                    {
                        case 
    "janvier":
                            
    $mois 1;
                            break;
                        case 
    "février":
                        case 
    "fevrier":
                            
    $mois 2;
                            break;
                        case 
    "mars":
                            
    $mois 3;
                            break;
                        case 
    "avril":
                            
    $mois 4;
                            break;
                        case 
    "mai":
                            
    $mois 5;
                            break;
                        case 
    "juin":
                            
    $mois 6;
                            break;
                        case 
    "juillet":
                            
    $mois 7;
                            break;
                        case 
    "aout":
                        case 
    "août":
                            
    $mois 8;
                            break;
                        case 
    "septembre":
                            
    $mois 9;
                            break;
                        case 
    "octobre":
                            
    $mois 10;
                            break;
                        case 
    "novembre":
                            
    $mois 11;
                            break;
                        case 
    "decembre":
                        case 
    "décembre":
                            
    $mois 12;
                            break;
                    }

                    
    $content trim($element->find('figure'0)->outertext);
                    
    $contTemp $element->find('div.meta'0);
                    if(
    $contTemp != null)
                    {
                        
    $content .= trim($contTemp->outertext);
                    }
                    
    $contTemp $element->find('div.synopsis'0);
                    if(
    $contTemp != null)
                    {
                        
    $content .= trim($contTemp->outertext);
                    }

                    
    $content str_replace('src="/''src="http://www.allocine.fr/'$content);
                    
    $content str_replace('href="/''href="http://www.allocine.fr/'$content);
                    
    $content str_replace('src=\'/''src=\'http://www.allocine.fr/'$content);
                    
    $content str_replace('href=\'/''href=\'http://www.allocine.fr/'$content);
                    
    $content str_replace('data-src=''src='$content);
                    
    $content str_replace('src="data''srcData="data'$content);

                    
    $item = array();
                    
    $item['content'] = $content;
                    
    $item['timestamp'] = mktime(00$cpt$mois$jour$annee);
                    
    $item['title'] = $aTitre->innertext;
                    
    $item['uri'] = "http://www.allocine.fr" $aTitre->href;
                    
    $this->items[] = $item;
                    
    $cpt --;
                }
            }
        }
    }
    ?>
  • BeastInBlackBridge.php :
    
    <?php

    /**
     * Créé le    01/12/2018
     */
    class BeastInBlackBridge extends BridgeAbstract
    {
        const 
    MAINTAINER 'Superbaillot';
        const 
    NAME "Beast In Black";
        const 
    URI "https://beastinblack.com/index.php/";
        const 
    CACHE_TIMEOUT 7*3600;
        const 
    DESCRIPTION "Beast In Black Rss-bridge";

        public function 
    collectData()
        {
            
    $str file_get_contents($this->getURI()) or $this->returnError('Could not request Beast In Black.'404);
            
    // $str = str_replace('</iframe>', '</iframe></div>', $str);
            
    $html str_get_html($str);
            
    $cpt 1;
            foreach (
    $html->find('#content-container div.hir') as $element)
            {
                
    $dateStr $element->find('div.bgcsik'0)->innertext;
                
    $title trim($dateStr);
                
    $title substr($title0strpos($title'<a'));
                
    $item = array();
                
    $item['timestamp'] = $this->getDate($dateStr);
                
    $item['title'] = 'Beast In Black - ' $title;
                
    $item['content'] = $this->getContent($element);
                
    $item['uri'] = $this->getUri() . '#' $cpt++;
                
    $this->items[] = $item;
            }
        }

        
    /**
         * Récupère le contenu d'une news
         */
        
    private function getContent($element) {
            
    $content '';
            
    $textElm $element->find('div.newsleft'0);
            if(
    $textElm)
            {
                
    $content .= '<div>' $textElm->innertext '</div>';
            }
            
    $textElm2 $element->find('div.newstext'0);
            if(
    $textElm2)
            {
                
    $content .= '<div>' $textElm2->innertext '</div>';
            }
            return 
    $content;
        }

        
    /**
         * Retourne le timestamp d'une date en toute lettre
         */
        
    private function getDate($dateStr) {
            list(
    $jour$mois$annee) = explode(' 'trim($dateStr));

            switch(
    strtolower($mois))
            {
                case 
    "january" $mois 1;
                break;
                case 
    "february" $mois 2;
                break;
                case 
    "march" $mois 3;
                break;
                case 
    "april" $mois 4;
                break;
                case 
    "may" $mois 5;
                break;
                case 
    "june" $mois 6;
                break;
                case 
    "july" $mois 7;
                break;
                case 
    "august" $mois 8;
                break;
                case 
    "september" $mois 9;
                break;
                case 
    "october" $mois 10;
                break;
                case 
    "november" $mois 11;
                break;
                case 
    "december" $mois 12;
                break;
            }

            return 
    mktime(000$moisintval($jour), intval($annee));
        }
    }
  • CommitstripBridge.php :
    
    <?php

    /**
     * Créé le    04/09/2019
     */
    class CommitstripBridge extends BridgeAbstract
    {
        const 
    MAINTAINER 'Superbaillot';
        const 
    NAME "commitstrip";
        const 
    URI "https://www.commitstrip.com/fr/?";
        const 
    CACHE_TIMEOUT 3500 3// < 1 heures
        
    const DESCRIPTION "commitstrip séries via Rss-bridge";

        public function 
    collectData()
        {
            
    $html file_get_html($this->getURI());

            foreach (
    $html->find('.excerpt') as $element)
            {
                
    $a $element->find("a"0);
                
    $content "<div>" $a->innertext "</div>";

                
    $item = array();
                
    $content str_replace('src="/wp-content/''src="https://www.commitstrip.com/wp-content/'$content);
                
    $item['content'] = $content;
                
    $item['title'] = $a->find('strong'0)->innertext;
                
    $item['uri'] = $a->href;
                
    $this->items[] = $item;
            }
        }
    }
    ?>
  • DansTonChatBridge.php :
    
    <?php
    class DansTonChatBridge extends BridgeAbstract {

        const 
    MAINTAINER 'Astalaseven';
        const 
    NAME 'DansTonChat Bridge';
        const 
    URI 'https://danstonchat.com/';
        const 
    CACHE_TIMEOUT 3600*2;
        const 
    DESCRIPTION 'Returns latest quotes from DansTonChat.';

        public function 
    collectData(){

            
    $html getSimpleHTMLDOM(self::URI 'latest.html')
                or 
    returnServerError('Could not request DansTonChat.');

            foreach(
    $html->find('div.item') as $element) {
                
    $item = array();
                
    $item['uri'] = $element->find('a'0)->href;
                
    $titleContent $element->find('h3 a'0);
                if(
    $titleContent) {
                    
    $item['title'] = html_entity_decode($titleContent->plaintextENT_QUOTES);
                } else {
                    
    $item['title'] = 'DansTonChat';
                }
                
    $item['content'] = $element->find('div.item-content a'0)->innertext;
                
    $this->items[] = $item;
            }
        }
    }
    ?>
  • DragonarteBridge.php :
    
    <?php

    /**
     * Créé le    22/06/2015
     * Update    24/04/2016 : mise à jour de RSS-Bridge
     * Update    09/11/2017
     * Update   07/05/2018 : mise à jour de RSS-Bridge
     * Update   29/10/2018
     */
    class DragonarteBridge extends BridgeAbstract
    {
        const 
    MAINTAINER 'Superbaillot';
        const 
    NAME "Dragonarte";
        const 
    URI "http://dragonarte.com.br/";
        const 
    CACHE_TIMEOUT 12*3600;
        const 
    DESCRIPTION "Dragonarte Rss-bridge";
        
        public function 
    collectData()
        {
            
    $html file_get_html($this->getURI()) or $this->returnError('Could not request Dragonarte.'404);
            
    $trTable $html->find("table table"2);
            
            foreach (
    $trTable->find('table') as $element)
            {
                
    $trTitre $element->find('tr'0)->find("strong"0);
                if(
    $trTitre != null)
                {
                    
    $titre $trTitre->innertext;
                    
    $trImg $element->find('tr'2);
                
                    
    $item = array();
                
                    
    $item['uri'] = $this->getURI() . "#" urlencode($titre); // pour un id unique
                    
    $item['title'] = $trTitre->innertext;
                
                    
    $content $trImg->find("td"0)->innertext;
                    
    $content str_replace('src="''src="' $this->getURI(), $content);
                    
    $item['content'] = $content;
                
                    
    $this->items[] = $item;
                }
                
            }
        }
    }
    ?>
  • FcMetzBridge.php :
    
    <?php

    /**
     * Créé le    20/08/2015
     * Update    24/04/2016 : mise à jour de RSS-Bridge
     * Update   07/05/2018 : mise à jour de RSS-Bridge
     */
    class FcMetzBridge extends BridgeAbstract
    {
        const 
    MAINTAINER 'Superbaillot';
        const 
    NAME "FC Metz";
        const 
    URI "https://www.fcmetz.com/actualites/news";
        const 
    CACHE_TIMEOUT 7*3600;
        const 
    DESCRIPTION "FC Metz Rss-bridge";

        public function 
    collectData()
        {
            
    $html file_get_html($this->getURI()) or $this->returnError('Could not request FC Metz.'404);
            
    $cpt 0;
            foreach (
    $html->find('div.row-wrapper') as $element)
            {
                
    $h3Titre $element->find("h3"0);
                
    $jour $h3Titre->find(".jour-actu"0)->innertext;
                
    $mois $h3Titre->find(".mois-actu"0)->innertext;
                
    $annee $h3Titre->find(".annee-actu"0)->innertext;
                    
                switch(
    strtolower($mois))
                {
                    case 
    "jan" $mois 1;
                    break;
                    case 
    "fév" $mois 2;
                    break;
                    case 
    "mar" $mois 3;
                    break;
                    case 
    "avr" $mois 4;
                    break;
                    case 
    "mai" $mois 5;
                    break;
                    case 
    "juin" $mois 6;
                    break;
                    case 
    "juil" $mois 7;
                    break;
                    case 
    "aoû" $mois 8;
                    break;
                    case 
    "sep" $mois 9;
                    break;
                    case 
    "oct" $mois 10;
                    break;
                    case 
    "nov" $mois 11;
                    break;
                    case 
    "déc" $mois 12;
                    break;
                }

                foreach (
    $element->find('div.row-content>div.views-row') as $sselement)
                {
                    
    $item = array();
                    
    $content $sselement->innertext;
                    
    $content str_replace('src="/''src="http://fcmetz.com/'$content);
                    
    $content str_replace('href="/''href="http://fcmetz.com/'$content);
                    
    $content str_replace('src=\'/''src=\'http://fcmetz.com/'$content);
                    
    $content str_replace('href=\'/''href=\'http://fcmetz.com/'$content);
                    
    $item['content'] = $content;
                        
                    
    $titre $sselement->find("div.title span a"0);
                    
    $item['timestamp'] = mktime(000intval($mois), intval($jour), intval($annee));
                    
    $item['title'] = trim($titre->innertext);
                    
    $item['uri'] = "http://fcmetz.com" $titre->href;
                    
    $this->items[] = $item;
                }
            }
        }
    }
  • HopBridge.php :
    
    <?php

    /**
     * Créé le    01/01/2020
     * Update    13/02/2020 : update si plusieurs images
     */
    class HopBridge extends BridgeAbstract
    {
        const 
    MAINTAINER 'Superbaillot';
        const 
    NAME "HOP";
        const 
    URI "https://www.luc-damas.fr/hop/";
        const 
    CACHE_TIMEOUT 14600// 4 hours
        
    const DESCRIPTION "HOP via Rss-bridge";

        public function 
    collectData()
        {
            
    $html file_get_html($this->getURI()) or $this->returnError('Could not request Tuxboard.'404);

            foreach (
    $html->find('article') as $element)
            {
                
    $titre $element->find("h2 a"0);

                
    $date $element->find(".postdate"0);
                
    $img $element->find("img"0);
                
    $tags $element->find('.tags'0);

                
    $content str_replace('src="./''src="https://www.luc-damas.fr/hop/'$element->innertext);
                
    $content str_replace('src=\'./''src=\'https://www.luc-damas.fr/hop/'$content);

                
    $item = array();

                
    $item['uri'] = "https://www.luc-damas.fr/hop/" $titre->href;
                
    $item['title'] = $titre->innertext;
                
    $item['content'] = trim($content);

                
    $this->items[] = $item;
            }
        }
    }
    ?>
  • IndoBridge.php :
    
    <?php

    /**
     * Créé le    18/11/2018
     */
    class IndoBridge extends BridgeAbstract
    {
        const 
    MAINTAINER 'Superbaillot';
        const 
    NAME "Indo.fr";
        const 
    URI "https://indo.fr/indonews/";
        const 
    CACHE_TIMEOUT 12*3600;
        const 
    DESCRIPTION "Indo.fr via Rss-bridge";

        public function 
    collectData()
        {
            
    $html file_get_html($this->getURI()) or $this->returnError('Could not request Indo.fr'404);
            foreach (
    $html->find('div.item-has-details') as $element)
            {
                
    $item = array();

                
    $title "";

                
    $detail $element->find('.details'0);
                
    $titleElementCompl $detail->find('.header .title'0);
                if(
    $titleElementCompl != null) {
                    
    $title .= $titleElementCompl->innertext;
                }
                
    $titleElementCompl $detail->find('.sub-title'0);
                if(
    $titleElementCompl != null) {
                    
    $title .= ($title == '' '' ' - ') . $titleElementCompl->innertext;
                }
                
    $dateStr $detail->find('.date'0)->innertext;
                list(
    $jour$mois$annee) = explode('.'$dateStr3);

                
    $content '';

                
    $iframe $detail->find('.iframe-wrapper'0);
                if(
    $iframe != null) {
                    
    $content .= $iframe->innertext;
                }

                
    $content .= $detail->find('.txt'0)->innertext;

                
    $content str_replace('365x365.jpg\');''365x365.jpg\'); height: 365px;width:365px'$content);

                
    $item['title'] = $title;
                
    $item['timestamp'] = mktime(000$mois$jour$annee);
                
    $item['uri'] = $this->getURI() . "#" md5($title);
                
    $item['content'] = $content;
                
    $this->items[] = $item;
            }
        }
    }
    ?>
  • KanaBridge.php :
    
    <?php

    /**
     * Créé le    18/06/2018
     */
    class kanaBridge extends BridgeAbstract
    {
        const 
    MAINTAINER 'Superbaillot';
        const 
    NAME "Kana - Sorties du mois";
        const 
    URI "https://www.kana.fr/planning/";
        const 
    CACHE_TIMEOUT 3600 12*0;
        const 
    DESCRIPTION "Kana via Rss-bridge";

        public function 
    collectData()
        {
            
    $html file_get_html($this->getURI()) or $this->returnError('Could not request ' $this->getName(), 404);
            foreach (
    $html->find('.cc-block-date') as $element)
            {
                
    $jour $element->find(".day"0)->innertext;
                
    $moisStr $element->find(".month"0)->innertext;
                
    $mois 1;
                
    $annee date("Y");

                switch (
    strtolower($moisStr))
                {
                    case 
    "janvier":
                        
    $mois 1;
                        break;
                    case 
    "février":
                    case 
    "fevrier":
                        
    $mois 2;
                        break;
                    case 
    "mars":
                        
    $mois 3;
                        break;
                    case 
    "avril":
                        
    $mois 4;
                        break;
                    case 
    "mai":
                        
    $mois 5;
                        break;
                    case 
    "juin":
                        
    $mois 6;
                        break;
                    case 
    "juillet":
                        
    $mois 7;
                        break;
                    case 
    "aout":
                    case 
    "août":
                        
    $mois 8;
                        break;
                    case 
    "septembre":
                        
    $mois 9;
                        break;
                    case 
    "octobre":
                        
    $mois 10;
                        break;
                    case 
    "novembre":
                        
    $mois 11;
                        break;
                    case 
    "decembre":
                    case 
    "décembre":
                        
    $mois 12;
                        break;
                }
                
    $timeItem mktime(000$mois$jour$annee);

                if(
    $timeItem time())
                {
                    foreach (
    $element->find('li') as $li)
                    {
                        
    $title $li-> find('.loop__name__inner span'0);
                        
    $titleStr '';
                        if (
    $title != null) {
                            
    $titleStr $title->innertext;
                            
    $titleStr str_replace('<br />'' - '$titleStr);
                        }
                        
    $a $li-> find('a'0);
                        
    $url '';
                        if (
    $a != null) {
                            
    $url $a->href;
                        }


                        
    $item = array();

                        
    $item['title'] = $titleStr;
                        
    $item['timestamp'] = $timeItem;
                        
    $item['uri'] = $url;
                        
    $item['content'] = $li->innertext;
        
                        
    $this->items[] = $item;


                    }

                }
            }
        }
    }
    ?>
  • LesJoiesDuCodeBridge.php (depuis qu'ils ont eu la "merveilleuse" idée de supprimer les gif de leur flux. MAJ 05/06/2015 : pour la nouvelle version du site) :
    
    <?php

    /**
     * Créé le    30/01/2014
     * Update    03/01/2015 : transformation des jpg en gif
     *            04/06/2015 : nouvelle version du site
     *            03/12/2015 : il n'y avait plus qu'une gif d'affichée
     *             24/04/2016 : mise à jour de RSS-Bridge
     *          07/05/2018 : mise à jour de RSS-Bridge
     *          21/09/2021 : Correction des src des imag
     *          14/05/2022 : Correction suite à la refont html
     */
    class LesJoiesDuCodeBridge extends BridgeAbstract
    {
        const 
    MAINTAINER 'Superbaillot';
        const 
    NAME "Les Joies Du Code";
        const 
    URI "https://lesjoiesducode.fr";
        const 
    CACHE_TIMEOUT 1*3600;
        const 
    DESCRIPTION "Les Joies Du Codevia Rss-bridge";

        public function 
    collectData()
        {
            
    $str file_get_contents($this->getURI()) or $this->returnError('Could not request Beast In Black.'404);

            
    // La non fermeture de la balise empĉhe le reste d'être analysé correctement
            
    $str str_replace('</script
            </div>'
    '</script>
            </div>'
    $str);
            
    $html str_get_html($str);

            foreach (
    $html->find('article') as $element)
            {
                
    $item = array();
                
    $temp $element->find('h1 a'0);

                
    $titre trim($temp->innertext);
                
    $url $temp->href;

                
    $auteur $element->find('span.post-author'0)->innertext;

                
    $infoStr $element->find('.post-meta-info'0)->innertext;
                
    $pos strpos($infoStr"commit du ");
                
    $dateStr substr($infoStr$pos 10);

                
    $temp $element->find('div.blog-post-content'0);
                
    $content $temp->innertext;
                if (
    $temp->find('img'0)) {
                    
    $content str_replace('src-bouhh''src'$content);
                }

                
    $item['content'] = trim($content);
                
    $item['uri'] = $url;
                
    $item['title'] = trim($titre);
                
    $item['author'] = $auteur;
                
    $item['timestamp'] = $this->dateToStr($dateStr);

                
    $this->items[] = $item;
            }
        }
        
        private function 
    dateToStr($dateStr) {
            
            
    $list explode(' '$dateStr3);
            
    $jour $list[0];
            
    $mois $list[1];
            
    $annee $list[2];

            switch (
    strtolower($mois))
            {
                case 
    "janvier":
                    
    $mois 1;
                    break;
                case 
    "février":
                case 
    "fevrier":
                    
    $mois 2;
                    break;
                case 
    "mars":
                    
    $mois 3;
                    break;
                case 
    "avril":
                    
    $mois 4;
                    break;
                case 
    "mai":
                    
    $mois 5;
                    break;
                case 
    "juin":
                    
    $mois 6;
                    break;
                case 
    "juillet":
                    
    $mois 7;
                    break;
                case 
    "aout":
                case 
    "août":
                    
    $mois 8;
                    break;
                case 
    "septembre":
                    
    $mois 9;
                    break;
                case 
    "octobre":
                    
    $mois 10;
                    break;
                case 
    "novembre":
                    
    $mois 11;
                    break;
                case 
    "decembre":
                case 
    "décembre":
                    
    $mois 12;
                    break;
            }
            return 
    mktime(000$mois, (int)$jour, (int)$annee);
        }
    }
    ?>
  • MmmLaBdBridge.php :
    
    <?php

    /**
     * Créé le    17/10/2013
     * Update    24/04/2016 : mise à jour de RSS-Bridge
     * Update   07/05/2018 : mise à jour de RSS-Bridge
     */
    class MmmLaBdBridge extends BridgeAbstract
    {
        const 
    MAINTAINER 'Superbaillot';
        const 
    NAME "Mmm La Bd";
        const 
    URI "https://hmm-la-bd.eu";
        const 
    CACHE_TIMEOUT 12*3600;
        const 
    DESCRIPTION "Mmm La Bd via Rss-bridge";

        public function 
    collectData()
        {
            
    $nbItem 10;     // nombre d'item dans le flux. ATTENTION, hormis la dernière
                            // image, toutes les requêtes sont simultanées! Vérifiez donc
                            // que votre serveur supporte ce nombre de requête simultanées

            
    $html file_get_html($this->getURI()) or $this->returnError('Could not request mmm la bd.'404);
            
    $nb 0;
            foreach (
    $html->find('div#main_page') as $element)
            {
                
    $a $element->find('a'5);
                
    $img $a->find('img'0);

                
    $item = array();
                
    $item['content'] = $img->title "<br>\n" $a->innertext;
                
    $item['uri'] = $a->href;
                
    $item['title'] = $img->alt;
                
    $nb intval($img->alt);     // l'attibut alt contient quelque chose du
                                            // genre "240 - Ascenseur" et je ne veut que le
                                            // "240".
                
    $this->items[] = $item;
            }

            if (
    $nb $nbItem)
            {
                
    // Création du gestionnaire multiple
                
    $mh curl_multi_init();
                
    $timeoutCurl 30;
                
    // servira pour les traitements qui seront fait une fois que tous
                // les sites auront répondus
                
    $listeCurl = array();

                for (
    $i = ($nb 1); $i > ($nb - ($nbItem 1)); $i --)
                {
                    
    $uri 'http://hmm-la-bd.eu/' $i;
                    
    $ch curl_init($uri);
                    
    // curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
                    
    curl_setopt($chCURLOPT_FRESH_CONNECTtrue);
                    
    curl_setopt($chCURLOPT_TIMEOUT$timeoutCurl);
                    
    curl_setopt($chCURLOPT_CONNECTTIMEOUT$timeoutCurl);
                    
    curl_setopt($chCURLOPT_FOLLOWLOCATIONtrue);
                    
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue);

                    
    $listeCurl[] = array(
                            
    "ch" => $ch,
                            
    "uri" => $uri
                    
    );

                    
    curl_multi_add_handle($mh$ch);
                }

                
    $running null;
                do
                {
                    
    curl_multi_exec($mh$running);
                } while (
    $running 0);

                
    // traitement des résultats
                
    foreach ($listeCurl as $lc)
                {
                    
    $xmlStr curl_multi_getcontent($lc["ch"]);
                    
    $html str_get_html($xmlStr) or $this->returnError('Could not request mmm la bd.'404);
                    
    $nb 0;
                    foreach (
    $html->find('div#main_page') as $element)
                    {
                        
    $a $element->find('a'5);
                        
    $img $a->find('img'0);

                        
    $item = array();
                        
    $item['content'] = $img->title "<br>\n" $a->innertext;
                        
    $item['uri'] = $lc["uri"];
                        
    $item['title'] = $img->alt;
                        
    $this->items[] = $item;
                    }
                    
    curl_multi_remove_handle($mh$lc["ch"]);
                }
                
    curl_multi_close($mh);
            }
        }
    }
    ?>
  • NintendoBridge.php :
    
    <?php
    /**
     * Créé le    17/09/2021
     */
    class NintendoBridge extends BridgeAbstract
    {
        const 
    MAINTAINER 'Superbaillot';
        const 
    NAME "My Nintendo";
        const 
    URI "https://my.nintendo.com/news?lang=fr";
        const 
    CACHE_TIMEOUT 12*3600;
        const 
    DESCRIPTION "My Nintendo via Rss-bridge";

        public function 
    collectData()
        {
            
    $html file_get_html($this->getURI()) or $this->returnError('Could not request My Nintendo.'404);
            
    $htmlStr $html->innertext;

            
    // Récupération du JSON
            
    $needle 'embeddedResponses: JSON.parse("';
            
    $posStart strpos($htmlStr$needle) + strlen($needle);
            
    $posEnd strpos($htmlStr'context: JSON.parse("');
            
    $str substr($htmlStr$posStart$posEnd $posStart);
            
    $str substr($str0strrpos($str'"'));
            
    $str str_replace('\"''"'$str);
            
    $str str_replace('\\\\''\\'$str);
            
    $json json_decode($str);
            
            
    // on parcours les items du JSON
            
    foreach ($json->{'api_news_list'}->{'data'}->{'items'} as $element) {
                
    // var_dump($element);
                
    $item = array();
                
    $item['content'] = $element->{'content'};
                
    $item['title'] = $element->{'title'};
                
    $item['timestamp'] = $element->{'publishedAt'};
                
    $this->items[] = $item;

            }
        }
    }
    ?>
  • RigolotesBridge.php :
    
    <?php

    /**
     * Créé le    20/09/2020
     */
    class RigolotesBridge extends BridgeAbstract
    {
        const 
    MAINTAINER 'Superbaillot';
        const 
    NAME "Images Rigolotes";
        const 
    URI "https://rigolotes.fr";
        const 
    CACHE_TIMEOUT 3600;
        const 
    DESCRIPTION "Images Rigolotes Rss-bridge";

        public function 
    collectData()
        {
            
    $str file_get_contents($this->getURI()) or $this->returnError('Could not request Beast In Black.'404);
            
    $html str_get_html($str);
            foreach (
    $html->find('.articles-container >div.article-box') as $element)
            {
                
    $aTitle $element->find('h2 a'0);
                
    $img $element->find('div'1);
                
    $content $img->outertext;
                
    $content str_replace('src="/''src="'$this->getURI() . '/'$content);
                
    $content str_replace('poster="/''controls poster="'$this->getURI() . '/'$content);
                
    $content str_replace(' loop '' '$content);
                
    $video $img->find('video'0);
                
    // if ($video != null) {
                //     $src = $video->src;
                //     $content = "video : " . htmlentities;
                // }
                
    $divDate $element->find('.info-row .is-new-span'0);
                
    $item = array();
                
    $item['timestamp'] = $this->getDate($divDate);
                
    $item['title'] = $aTitle->innertext;
                
    $item['content'] = $content;
                
    $item['uri'] = $this->getUri() . $aTitle->href;
                
    $this->items[] = $item;
            }
        }


        
    /**
         * Retourne le timestamp du div date
         */
        
    private function getDate($date) {

            if (
    $date) {
                
    $dateFormat $date->getAttribute('data-published');
                if (
    $dateFormat) {
                    
    $annee =  substr($dateFormat04);
                    
    $mois =  substr($dateFormat42);
                    
    $jour =  substr($dateFormat62);
                    
    $heure =  substr($dateFormat82);
                    
    $min =  substr($dateFormat102);

                    return 
    mktime($heure-2$min0$mois$jour$annee);
                }
            }

            return 
    null;
        }
    }
  • ScmbBridge.php (script initial de supitalp que j'ai modifié) :
    
    <?php

    /**
     * Auteur initial    supitalp
     * Update    24/04/2016 : mise à jour de RSS-Bridge
     * Update   07/05/2018 : mise à jour de RSS-Bridge
     */
    class ScmbBridge extends BridgeAbstract
    {
        const 
    MAINTAINER 'Superbaillot';
        const 
    NAME "Se Coucher Moins Bête";
        const 
    URI "https://secouchermoinsbete.fr";
        const 
    CACHE_TIMEOUT 6*3600;
        const 
    DESCRIPTION "Se Coucher Moins Bête via Rss-bridge";

        public function 
    collectData()
        {
            
    $html '';
            
    $html file_get_html($this->getURI()) or $this->returnError('Could not request Se Coucher Moins Bete.'404);
            
    $cpt 0;
            
    $cptMax 7;
            foreach (
    $html->find('article') as $article)
            {
                
    $item = array();
                
    // get publication date
                
    $str_date $article->find('time'0)->datetime;
                
                
    // les news ne seront plus prise en compte. Le test n'est pas super
                // explicite, mais ça marche
                
    if (strlen($str_date) >= 16)
                {
                    
    $item['uri'] = 'http://secouchermoinsbete.fr' $article->find('p.summary a'0)->href;
                    
    $item['title'] = $article->find('header h1 a'0)->innertext;
                    
                    list (
    $date$time) = explode(' '$str_date);
                    list (
    $y$m$d) = explode('-'$date);
                    list (
    $h$i) = explode(':'$time);
                    
    $timestamp mktime($h$i0$m$d$y);
                    
    $item['timestamp'] = $timestamp;
                    
                    
    $adresse $article->find('address span'0);
                    
    $temp $adresse->find("a"0);
                    if (! 
    is_null($temp))
                    {
                        
    $adresse $temp;
                    }
                    
    $item['author'] = $adresse->innertext;
                    
                    
    // TODO: this should be optional since it is highly time and
                    // broadband consuming
                    // check if the anecdote has more content to offer (text
                    // details, picture, video) and follow link to retrieve it if
                    // that is the case
                    
    $optcontent $article->find('div.metadata-list a');
                    
    $hasPic = (preg_match("#pas#"$optcontent[0]->innertext)) ? false true;
                    
    $hasVid = (preg_match("#pas#"$optcontent[1]->innertext)) ? false true;
                    
    $hasDetails = (preg_match("#pas#"$optcontent[2]->innertext)) ? false true;
                    
                    
    $temp $article->find('span.read-more'0);
                    if (
    $temp) {
                    
    $temp->outertext ''// remove text "En
                                                                      // savoir plus" from
                                                                      // anecdote content
                    
    }
                    
    $content $article->find('p.summary a'0)->innertext;
                    
    $content substr($content0strlen($content) - 17); // remove
                                                                       // superfluous spaces at
                                                                       // the end
                    
                    
    if ($hasDetails || $hasPic || $hasVid)
                    {
                        
    $cpt ++;
                        if (
    $cpt $cptMax)
                        {
                            
    $opt_html file_get_html($item['uri']);
                        }
                    }
                    if (
    $hasDetails && $cpt $cptMax)
                    {
                        
    $details $opt_html->find('p.details'0);
                        if(
    $details != null)
                        {
                            
    $content $content '<br />' $details->innertext;
                        }
                    }
                    if (
    $hasPic && $cpt $cptMax)
                    {
                        
    $picUri $opt_html->find('div#sources-image-wrapper a'0);
                        if(
    $picUri != null)
                        {
                            
    $content $content '<br /><img src="' $picUri->href '" />';
                        }
                    }
                    if (
    $hasVid && $cpt $cptMax)
                    {
                        
    $vidUri $opt_html->find('div#sources-video-wrapper iframe'0);
                        if (
    $vidUri != null)
                        {
                            
    $vidUri explode('?'$vidUri->src); // remove "?autoplay=0"
                            
    $content $content '<br /><a href="' $vidUri[0] . '">Vidéo</a>';
                        }
                    }
                    
                    
    $item['content'] = $content;
                    
    $this->items[] = $item;
                }
            }
        }
    }
    ?>
  • TheCodingLoveBridge.php (depuis qu'il a subit le même sort que les joies du code...) :
    
    <?php

    /**
     * Créé le    30/01/2014
     * Update    24/04/2016 : mise à jour de RSS-Bridge
     * Update   07/05/2018 : mise à jour de RSS-Bridge
     *          21/09/2021 : Correction des src des imag
     */
    class TheCodingLoveBridge extends BridgeAbstract
    {
        const 
    MAINTAINER 'Superbaillot';
        const 
    NAME "The Coding Love";
        const 
    URI "https://thecodinglove.com/";
        const 
    CACHE_TIMEOUT 3600;
        const 
    DESCRIPTION "The Coding Love via Rss-bridge";

        public function 
    collectData()
        {
            
    $html file_get_html($this->getURI()) or $this->returnError('Could not request LesJoiesDuCode.'404);

            foreach (
    $html->find('article.blog-post') as $element)
            {
                
    $temp $element->find('h1 a'0);

                
    $titre trim($temp->innertext);
                
    $url $temp->href;

                
    $temp $element->find('div.blog-post-content'0);

                
    $auteur $temp->find('p.post-author'0);
                if(
    $auteur != null)
                {
                    
    $pos strpos($auteur->innertext"par");
                    
    $item = array();

                    if (
    $pos 0)
                    {
                        
    $auteur trim(substr($auteur->innertext, ($pos 4)));
                        
    $item['author'] = $auteur;
                    }
                }

                
    $content $temp->innertext;
                if (
    $temp->find('img'0)) {
                    
    $content str_replace('src''src-bouhh'$content);
                    
    $content str_replace('data-src-bouhh''src'$content);
                }

                
    $item['content'] = trim($content);
                
    $item['uri'] = $url;
                
    $item['title'] = trim($titre);

                
    $this->items[] = $item;
            }
        }
    }
    ?>

Commentaires Flux RSS des Commentaires.

# Pazns le 30/01/2014 23:11:40

Ah, sebsauvage qui parle d'ici !
http://sebsauvage.net/links/?wVLb1g

Ça va faire un bon coup de pub, pour sûr.

# Anabis le 31/01/2014 09:26:18

Pourquoi tu en as un pour Dilbert ? Ils ont un RSS de base : http://dilbert.com/rss/

# Adrien le 31/01/2014 09:34:37

Arf, merci pour les joies du code, j'ai cru que les gifs étaient bloqués par AB Plus ;)

# Riduidel le 31/01/2014 10:23:01

@Anabis le flux RSS de Dilbert ne contient plus depuis un sacré moment les images, ce qui le rend à peu près inutile.

# Epsilon le 31/01/2014 12:27:57

Même question qu'Anabis mais pour se coucher moins bête ?
(https://www.blogger.com/feeds/1879199009612029553/posts/default).
Sinon merci pour top 5 et faux raccord, ça faisait un momnet que je pestais contre allociné.
Merci aussi pour les joies du code ça fait du bien de revoir les gif dans ses flux ;).

# Greg le 31/01/2014 13:00:00

Bonjour,
ce ne doit pas être l'endroit pour, mais j'ai une question technique pour RSS-Bridge. Je l'ai installé, mais quand je clique un bouton, ça me propose de télécharger le fichier (et pas d'ajouter le lien dans tt-rss). J'ai vérifié les headers, etc. Rien.
Une idée ?

P.S : merci beaucoup pour ces Bridges, j'suis heureux d'en voir un pour Allociné/Faux-Raccord :)

# PoGo le 31/01/2014 13:28:23

Salut !
Merci pour tous ces nouveaux Bridges o/

J'ai mis en place une instance ici : https://wtf.roflcopter.fr/rss-bridge/

Si jamais ça peut aider à décharger ton serveur :)

# Greg le 31/01/2014 15:03:05

Mince, j'ai trouvé tout seul !
En recopiant les scripts, j'ai laissé un espace au début du fichier de bridge. Du coup, mon Firefox n'interprétait plus comme un flux ATOM/XML.
Pfff…

# Superbaillot le 31/01/2014 23:27:10

Un petit effet sebsauvage, en effet :)

Ça me fait plaisir que ce que j'ai fait sert à d'autre.


@Epsilon : tu confonds "Se coucher moins bête" et "Tu mourras moins bête" :)

Et oui, il y a un RSS de "Se coucher moins bête", mais certains articles ne sont pas complet.

# Epsilon le 05/02/2014 18:27:32

@Superbaillot : my bad j'ai lu un peu vite ;)
sinon encore merci pour les flux allociné et joie du code.

# lieo le 07/02/2014 21:08:34

Merci bien, vraiment génial ce petit rss-bridge, perso j'ai juste un peu modifier pour LesJoiesDuCode une petite duplication pour rajouter la page2 :D .

# Superbaillot le 08/02/2014 08:23:50

C'est vrai qu'il en a que 4 sur la première page.
Mais il n'y en pas de nouveau tous les quarts d'heure :)
Et comme chez moi, les flux sont rafraichis toutes les heures, j'ai pas jugé utile de prendre en compte la page 2.
Mais je comprends que ça peut être utile pour d'autre.

# brouillon le 03/01/2015 14:57:13

Petit problème avec celui des joies du code où ils utilisent un .jpg à la place du .gif, ce dernier est remplacé lors du onload en js sur leur site avec en commentaire en prévision de la version 2 de ljdc.
Une correction est elle prévue ?

# Superbaillot le 03/01/2015 17:52:45

J'ai vu ça pour il y a quelques jours.
Je viens de faire la correction pour Les joies du code et pour The coding love, car si c'est comme pour la disparition des images dans le flux RSS d'origine, ça ne va pas tarder :)

# brouillon le 04/01/2015 13:19:56

Super, merci à toi !

# Jaguar le 20/10/2015 20:01:45

BOnjour,

J'aimerai installer cette petite perle sur mon mutualiser, mais je ne trouve pas d'infos !

J'ai téléchargé le script sur github, décompresser sur mon espace mais ca m'affiche une page blanche !

Quelqu'un sait ? svp

# Superbaillot le 20/10/2015 20:22:03

Normalement, il suffit de décompresser et de lancer le index.php
Si tu as une page blanche, tu dois avoir une erreur quelque part. Pour afficher un message d'erreur, décommente la ligne :

ini_set('display_errors','1'); error_reporting(E_ALL); // For debugging only.

# Jaguar le 21/10/2015 06:41:33

Ou ce trouve la ligne pour le debug ?

J'ai re fait le test, je télécharge, décompresse et envoi le dossier complet, toujours pareil... Page blanche !

# Superbaillot le 21/10/2015 07:05:05

Elle se trouve dans le fichier index.php.

# Jaguar le 23/10/2015 12:26:11

Re ! Pardon pour le retard.

Alors j'ai ca :

date_default_timezone_set('UTC');
error_reporting(0);
//ini_set('display_errors','1'); error_reporting(E_ALL); // For debugging only.

# Superbaillot le 23/10/2015 22:57:26

Pour afficher le message d'erreur, il faut que tu supprimes les // avant ini_set('display_errors','1')…

# Jaguar le 24/10/2015 08:07:27

On va y arriver !

Fatal error: Cannot redeclare class HttpException in /home/clients/992dcef983fca4ab050e7ed1a163189e/web/rssbridge/lib/Exceptions.php on line 2

# Superbaillot le 27/10/2015 06:57:53

Heu… la, comme ça, je vois pas pourquoi tu as cette erreur.
Je ne sais pas si ça peut venir de là, mais ton hébergeur est bien en php 5.3 ou supérieur?
Moi, je viens de mettre à jour ma version de Rss-Bridge, et comme mon hébergeur est en 5.2, j'ai eu quelques soucis, mais pas le tien.

# Jaguar le 27/10/2015 19:05:48

Je suis en php 5.5

C'est bizarre, mais j'ai cru lire je sais plus trop ou par contre !

Je suis en httpS, c'est peut etre ca non ?!

# Superbaillot le 27/10/2015 22:56:42

Je vois pas le rapport avec l'erreur en question.
Désolé de pas pouvoir t'aider.

Veuillez, s'il vous plait respecter quelques règles lorsque vous postez un commentaire, merci.