source: spip-zone/_plugins_/aspirateur/inc/aspirer_dom.php @ 84900

Last change on this file since 84900 was 84900, checked in by toutati@…, 7 years ago

Ne pas vérifier qu'un lien de document soit interne au site
pour reprendre au besoin des documents externes et laisser la main au "Motif nécessaire dans le chemin des documents (Regex)"

File size: 2.8 KB
Line 
1<?php
2/**
3 * Plugin Aspirateur pour Spip 3.0
4 * Licence GPL 3
5 *
6 * (c) 2014 Anne-lise Martenot
7 */
8
9if (!defined("_ECRIRE_INC_VERSION")) return;
10
11/* DOM */
12
13/**
14 *
15 * Prend en argument une URL ou un texte en html, la méthode pour parser, le tag et son attribut à trouver
16 * Renvoie un array des attributs (href, src, …) trouvés
17 * Necessite la fonction
18 *
19 * @example
20 * recupere_links('<div><img src="chemin_vers_img"></div>','loadHTML','img','src');
21 * recupere_links('http://example.com','loadHTMLFile','a','href');
22 *
23 * @param $parent
24 *      un texte html ou une URL
25 * @param string $methode
26 *      'loadHTMLFile' si $parent est une URL
27 *      'loadHTML' si $parent est un texte en html
28 *
29 * @param string $thistag
30 *   permet de specifier le tag à rechercher
31 * @param string $thisattribut
32 *   permet de specifier l'attribut du tag à rechercher
33 *
34 * @return array
35 *
36**/
37function recupere_links($parent,$methode="loadHTMLFile",$thistag='a',$thisattribut='href'){
38        $links = array();
39        $doc = new DOMDocument;
40        $doc->preserveWhiteSpace = FALSE;
41
42        @$doc->$methode($parent);
43               
44        $tags = $doc->getElementsByTagName($thistag);
45               
46        foreach ($tags as $tag){
47                $attribut=$tag->getAttribute($thisattribut);
48                $attribut=clean_href($attribut);
49                //pour reprendre au besoin des documents externes laisser la main au "Motif nécessaire dans le chemin des documents (Regex)"
50                if($thistag=='a')
51                $attribut=verifier_le_lien($attribut);
52               
53                //récupérer les textes des liens
54                //$attributvalue=$tag->nodeValue;
55                //$attributvalue=utf8_decode(str_replace("\r\n", "", $attributvalue));
56               
57                if(isset($attribut)) $links[] = $attribut;       
58               
59        }
60        //on passe la page référente en premier si c'est une URL
61        if($thisattribut=='href' && $methode=="loadHTMLFile") 
62                array_unshift($links, $parent);
63       
64        return array_unique($links);
65}
66
67/**
68 *
69 * Nettoyer les espaces et les lignes d'une chaine
70 *
71 * en l'occurence, des liens href très sales
72 *
73 * @param string $chaine
74 *      la chaine à nettoyer
75 *
76 * @return string
77 *      la chaine nettoyée
78 *
79**/
80function clean_href($chaine){
81        $chaine = preg_replace('#[[:blank:]]#Umis','',$chaine);
82        $chaine = str_replace("\r\n", "", $chaine);
83        return $chaine;
84}
85
86/**
87 *
88 * Vérifie les conditions d'un lien URL
89 *
90 * Utilise la fonction url_absolue de SPIP
91 *
92 * @param string $link
93 *      l'url à vérifier
94 *
95 * @return string
96 *      l'url absolue du lien ssi elle provient du site référent
97 *
98**/
99function verifier_le_lien($link){
100        $url_site_aspirer = lire_config('aspirateur/url_site_aspirer');
101        //passer en lien absolu
102        $link = url_absolue($link,$url_site_aspirer);
103        //renvoyer uniquement le lien du site référent
104        $parse_link=parse_url($link);
105        $parse_url_du_site=parse_url($url_site_aspirer);
106        if ($parse_link["host"] == $parse_url_du_site["host"]){
107                //retourne le lien s'il n'a pas encore été aspiré
108                $link = need_traitement($link,$url_site_aspirer);
109                return $link;
110        }
111}
Note: See TracBrowser for help on using the repository browser.