source: spip-zone/_plugins_/_test_/checklink/inc/checklink_verification.php @ 10013

Last change on this file since 10013 was 10013, checked in by cedric@…, 13 years ago

"gerer les liens relatifs sans se tromper, et import du charset sur les pages recuperees"

File size: 3.2 KB
Line 
1<?php
2
3function checklink_verifie_lien($url, $date_verif, $maj_statut){
4        include_spip('inc/distant');
5        $datas="";
6        $boundary="";
7        $url_abs = url_absolue($url);
8        if (!preg_match(",^([\w]{3-6})://,") AND $url_abs{0}!='/'){
9                $url_abs = suivre_lien(url_de_base(),$url_abs);
10        }
11        $statut = recuperer_page($url_abs, false, false, 1048576, $datas, $boundary, false, $date_verif);
12        // inchangee : on met juste a jour les infos
13        if ($statut==200){
14                spip_query("UPDATE spip_liens SET statut='oui',date_verif=NOW() WHERE url=".spip_abstract_quote($url));
15                spip_log("checklink : $url statut 200");
16                return;
17        }
18        // absente
19        if ($statut===false){
20                spip_query("UPDATE spip_liens SET statut='$maj_statut',date_verif=NOW() WHERE url=".spip_abstract_quote($url));
21                spip_log("checklink : $url introuvable, passage a $maj_statut");
22                return;
23        }
24        // presente
25        // extraire le titre et la langue
26        $texte = importer_charset($statut);
27        $titre = null;
28        $lang = null;
29        if (preg_match(',<title[^>]*>(.*)</title>,Uims',$texte,$reg))
30                $titre = trim($reg[1]);
31        else if (preg_match(',<(h[1-6])[^>]*>.*</$1>,Uims',$texte,$reg))
32                $titre = trim($reg[2]);
33
34        if (preg_match(',<html[^>]*>,Uims',$texte,$reg))
35                $lang = extraire_attribut($reg[0],'lang');
36        if (!$lang){
37                // en depit on cherche un lang= quelque part ...
38                if (preg_match('/lang\s*=\s*[\'"]?([a-z\-]{2,5})/Uims',$texte,$reg))
39                        $lang=$reg[1];
40        }
41
42        spip_query("UPDATE spip_liens SET statut='oui',date_verif=NOW() WHERE url=".spip_abstract_quote($url));
43        if ($titre)
44                spip_query("UPDATE spip_liens SET titre=".spip_abstract_quote($titre)." WHERE url=".spip_abstract_quote($url)." AND titre_auto='oui'");
45        if ($lang)
46                spip_query("UPDATE spip_liens SET lang=".spip_abstract_quote(strtolower($lang))." WHERE url=".spip_abstract_quote($url)." AND lang_auto='oui'");
47        spip_log("checklink : $url mise a jour, passage a 'oui'");
48}
49
50
51function cron_checklink_verification($t){
52        // Initialisations
53
54        $url = "";
55
56        ## valeurs modifiables dans mes_options
57        ## attention il est tres mal vu de prendre une periode < 20 minutes
58        define('_PERIODE_VERIFICATION', 2*60);
59        define('_PERIODE_VERIFICATION_SUSPENDUE', 24*60);
60
61        // On va tenter un lien 'sus' ou 'off' de plus de 24h, et le passer en 'off'
62        // s'il echoue
63        $where = "statut IN ('sus','off')
64        AND date_verif < DATE_SUB(NOW(), INTERVAL
65        "._PERIODE_VERIFICATION_SUSPENDUE." MINUTE)";
66        $row = spip_fetch_array(spip_query("SELECT url,date_verif FROM spip_liens WHERE $where  ORDER BY date_verif LIMIT 1"));
67        if ($row)
68                checklink_verifie_lien($row["url"],$row["date_verif"], 'off');
69
70        // Et un lien 'ind' (ou 'oui' si plus de 'ind') de plus de 2 heures, qui passe en 'sus' s'il echoue
71        $where = "statut='ind'
72        AND date_verif < DATE_SUB(NOW(), INTERVAL "._PERIODE_VERIFICATION." MINUTE)";
73        $row = spip_fetch_array(spip_query("SELECT url FROM spip_liens WHERE $where     ORDER BY date_verif LIMIT 1"));
74        if (!$row){
75                $where = "statut='oui'
76        AND date_verif < DATE_SUB(NOW(), INTERVAL "._PERIODE_VERIFICATION." MINUTE)";
77                $row = spip_fetch_array(spip_query("SELECT url FROM spip_liens WHERE $where     ORDER BY date_verif LIMIT 1"));
78        }
79        if ($row)
80                checklink_verifie_lien($row["url"],$row["date_verif"], 'sus');
81
82        if ($url=="") return 1;
83       
84        spip_log("il reste des liens a verifier ...");
85        return (0 - $t);
86
87}
88?>
Note: See TracBrowser for help on using the repository browser.