Changeset 84301 in spip-zone for _plugins_/aspirateur


Ignore:
Timestamp:
Aug 23, 2014, 3:21:26 PM (6 years ago)
Author:
toutati@…
Message:

On peut exclure le contenu du ou des divs d'une class donnée, socialtags byebye !

Location:
_plugins_/aspirateur
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/aspirateur/formulaires/configurer_aspirateur.html

    r84299 r84301  
    5151                                                <legend><:configureraspirateur:legend_motifs_regex_aspirateur:></legend>
    5252                                                <ul>
     53                                                        [(#REM) content]
    5354                                                        #SET{name,div_id_contenu}#SET{obli,''}[(#SET{defaut,''})]#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
    5455                                                        <li class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
     
    6667                                                        [(#REM) <!-- fin contenu -->]
    6768                                                        #SET{name,motif_fin_contenu_regex}#SET{obli,''}[(#SET{defaut,''})]#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
     69                                                        <li class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
     70                                                                <label for="#GET{name}">[(#GET{fl}|concat{':label_',#GET{name}}|_T)]</label>[
     71                                                                <span class='erreur_message'>(#GET{erreurs})</span>
     72                                                                ]<input type="text" name="#GET{name}" class="text" value="#ENV*{#GET{name},#GET{defaut}}" id="#GET{name}" [(#HTML5|et{#GET{obli}})required='required']/>
     73                                                        </li>
     74                                                        [(#REM) socialtags ]
     75                                                        #SET{name,div_class_contenu_exclure}#SET{obli,''}[(#SET{defaut,''})]#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
    6876                                                        <li class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
    6977                                                                <label for="#GET{name}">[(#GET{fl}|concat{':label_',#GET{name}}|_T)]</label>[
  • _plugins_/aspirateur/inc/aspirer_curl.php

    r84299 r84301  
    6565        //Identifiant du div pour isoler le contenu via xpath
    6666        $div_id_contenu = trim(lire_config('aspirateur/div_id_contenu'));
    67         if($div_id_contenu){
     67        $div_class_contenu_exclure = trim(lire_config('aspirateur/div_class_contenu_exclure'));
     68
     69        if($div_id_contenu OR $div_class_contenu_exclure){
    6870                @$doc = new DOMDocument();
     71                $doc->preserveWhiteSpace = false;
    6972                @$doc->loadHTML($chaine);
    7073                $xpath = new DOMXpath($doc);
    71 
     74               
     75                if($div_id_contenu)
    7276                $tags = $xpath->query("//*[@id='$div_id_contenu']");
    73                    
     77                //sinon on prend large soit le noeud body de la page
     78                if (is_null($tags)){
     79                        $tags = $xpath->query("//body");
     80                }
     81               
     82                //on exclut un noeud div avec une class donnée (option*)
     83                if($div_class_contenu_exclure){
     84                        foreach($xpath->query(".//*[@class='$div_class_contenu_exclure']") as $node) {
     85                          $node->parentNode->removeChild($node);
     86                        }
     87                }
    7488                        if (!is_null($tags)) {
    7589                                foreach ($tags as $tag) {
     
    7993                                    $children = $tag->childNodes;
    8094                                    foreach ($children as $child) {
    81                                         $tmp_doc = new DOMDocument();
    82                                         $tmp_doc->appendChild($tmp_doc->importNode($child,true));      
     95                                        $tmp_doc = new DOMDocument();
     96                                        $tmp_doc->appendChild($tmp_doc->importNode($child,true));                                      
    8397                                        $innerHTML .= $tmp_doc->saveHTML();
    8498                                    }
    8599                               
    86                                     return trim($innerHTML);
     100                                    $chaine = trim($innerHTML);
    87101                                }
    88102                        }
    89103        }else{
    90         //Sinon ereg sur variables de début et de fin pour isoler le contenu
    91         $motif_debut_contenu_regex = lire_config('aspirateur/motif_debut_contenu_regex');
    92         $motif_fin_contenu_regex = lire_config('aspirateur/motif_fin_contenu_regex');
    93         if($motif_debut_contenu_regex && $motif_fin_contenu_regex && preg_match("/$motif_debut_contenu_regex(.*)$motif_fin_contenu_regex/sU", $chaine, $contenu))
     104        $chaine = $contenu;
     105        //2em méthode Sinon ereg sur variables de début et de fin pour isoler le contenu
     106        $motif_debut_contenu_regex = trim(lire_config('aspirateur/motif_debut_contenu_regex'));
     107        $motif_fin_contenu_regex = trim(lire_config('aspirateur/motif_fin_contenu_regex'));
     108        if(isset($motif_debut_contenu_regex) && isset($motif_fin_contenu_regex) && preg_match("/$motif_debut_contenu_regex(.*)$motif_fin_contenu_regex/sU", $chaine, $contenu))
    94109                $chaine = $contenu[1];
    95         else $chaine = $contenu;
    96110        }
    97 
     111       
    98112        return $chaine;   
    99113}
     114
     115function deleteNode($node) {
     116    deleteChildren($node);
     117    $parent = $node->parentNode;
     118    $oldnode = $parent->removeChild($node);
     119}
     120
     121function deleteChildren($node) {
     122    while (isset($node->firstChild)) {
     123        deleteChildren($node->firstChild);
     124        $node->removeChild($node->firstChild);
     125    }
     126}
    100127
    101128
  • _plugins_/aspirateur/inc/aspirer_nettoyer.php

    r84299 r84301  
    130130**/
    131131function char($chaine){
    132         return preg_replace_callback("/(&#[0-9]+;)/", function($m) { return mb_convert_encoding($m[1], "UTF-8", "HTML-ENTITIES"); }, $chaine);
    133         //return html_entity_decode($chaine, ENT_NOQUOTES, "UTF-8");
     132        //return preg_replace_callback("/(&#[0-9]+;)/", function($m) { return mb_convert_encoding($m[1], "UTF-8", "HTML-ENTITIES"); }, $chaine);
     133        return html_entity_decode($chaine, ENT_NOQUOTES, "UTF-8");
    134134}
    135135
  • _plugins_/aspirateur/inc/aspirer_rss.php

    r84297 r84301  
    4545                xmlns:dc='http://purl.org/dc/elements/1.1/'
    4646                xmlns:content='http://purl.org/rss/1.0/modules/content/'
     47                xmlns:wfw='http://wellformedweb.org/CommentAPI/'
     48                xmlns:sy='http://purl.org/rss/1.0/modules/syndication/'
     49                xmlns:slash='http://purl.org/rss/1.0/modules/slash/'
    4750                xmlns:atom='http://www.w3.org/2005/Atom'>\n";
    4851       
     
    109112               
    110113                //traitement du texte via SPIP pour rss
    111                 $texte = texte_backend($texte);
     114                //$texte = texte_backend($texte);
    112115               
    113116                //cree un item pour chaque page
     
    153156        $flux.= "<dc:creator>".$nom_site_aspirer."</dc:creator>\n";
    154157        $flux.= "<description></description>\n"; //todo
    155         $flux.= "<pubDate></pubDate>\n";
    156         $flux.= "<content:encoded>".$texte_encoded."</content:encoded>\n";
     158        $flux.= "<pubDate></pubDate>\n"; //todo
     159        $flux.= "<content:encoded><![CDATA[".$texte_encoded."]]>\n";
     160        $flux.= "</content:encoded>\n";
    157161       
    158162        return $flux;
  • _plugins_/aspirateur/lang/configureraspirateur_fr.php

    r84297 r84301  
    2424       
    2525        'label_div_id_contenu'=>'Identifiant du div pour isoler le contenu',
     26        'label_div_class_contenu_exclure'=>'Exclure tous les divs avec cette class',
    2627        'label_motif_debut_contenu_regex'=>'Sinon motif Regex pour le debut du contenu',       
    2728        'label_motif_fin_contenu_regex'=>'Sinon motif Regex pour la fin du contenu',
Note: See TracChangeset for help on using the changeset viewer.