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

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

nettoyage et doc
quelques modifs en todo

File size: 2.7 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                $attribut=verifier_le_lien($attribut);
50               
51                //récupérer les textes des liens
52                //$attributvalue=$tag->nodeValue;
53                //$attributvalue=utf8_decode(str_replace("\r\n", "", $attributvalue));
54               
55                if(isset($attribut)) $links[] = $attribut;       
56               
57        }
58        //on passe la page référente en premier si c'est une URL
59        if($thisattribut=='href' && $methode=="loadHTMLFile") 
60                array_unshift($links, $parent);
61       
62        return array_unique($links);
63}
64
65/**
66 *
67 * Nettoyer les espaces et les lignes d'une chaine
68 *
69 * en l'occurence, des liens href très sales
70 *
71 * @param string $chaine
72 *      la chaine à nettoyer
73 *
74 * @return string
75 *      la chaine nettoyée
76 *
77**/
78function clean_href($chaine){
79        $chaine = preg_replace('#[[:blank:]]#Umis','',$chaine);
80        $chaine = str_replace("\r\n", "", $chaine);
81        return $chaine;
82}
83
84/**
85 *
86 * Vérifie les conditions d'un lien URL
87 *
88 * Utilise la fonction url_absolue de SPIP
89 *
90 * @param string $link
91 *      l'url à vérifier
92 *
93 * @return string
94 *      l'url absolue du lien ssi elle provient du site référent
95 *
96**/
97function verifier_le_lien($link){
98        $url_site_aspirer = lire_config('aspirateur/url_site_aspirer');
99        //passer en lien absolu
100        $link = url_absolue($link,$url_site_aspirer);
101        //renvoyer uniquement le lien du site référent
102        $parse_link=parse_url($link);
103        $parse_url_du_site=parse_url($url_site_aspirer);
104        if ($parse_link["host"] == $parse_url_du_site["host"]){
105                //retourne le lien s'il n'a pas encore été aspiré
106                $link = need_traitement($link,$url_site_aspirer);
107                return $link;
108        }
109}
Note: See TracBrowser for help on using the repository browser.