source: spip-zone/_dev_/univers_spip/inc/univers.php @ 112585

Last change on this file since 112585 was 112585, checked in by root, 4 months ago

code mort et coding standards

File size: 6.9 KB
Line 
1<?php
2
3/**
4 * Plugin Univers SPIP
5 * (c) 2010 Cedric
6 * Distribue sous licence GPL
7 */
8
9include_spip('inc/filtres');
10include_spip('inc/distant');
11include_spip('inc/meta');
12
13function univers_proposer_site($url, $desc = '') {
14        $parts = parse_url($url);
15        // pas d'IP fixe !
16        if (preg_match(';^[0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}$;', $parts['host'])) {
17                return false;
18        }
19        // pas de fausse url venant de feedburner ou google !
20        // on pourrait faire mieux en suivant la redirection pour
21        // attraper le vrai nom du site
22        if (preg_match(',(feeds\.feedburner\.com|feedproxy\.google\.com),i', $parts['host'])) {
23                return false;
24        }
25       
26        #if (is_utf8($parts['host']))
27        #       return false;
28
29        #$parts['path'] = preg_replace(",(IMG|local)/cache.+spip[.]php,","spip.php",$parts['path']);
30        $base = $parts['scheme'] . '://' . $parts['host'] . $parts['path'];
31        $base = univers_nettoyer_url($base);
32        $base = preg_replace(',(spip[.]php3?).*$,i', '\\1', $base);
33        $base_short = preg_replace(',spip[.]php.*$,i', '', $base);
34
35        if ($id_website = sql_getfetsel('id_website', 'spip_websites', 'url='.sql_quote($base)) or
36                ($base_short!==$base and
37                        $id_website = sql_getfetsel('id_website', 'spip_websites', 'url='.sql_quote($base_short))
38                )
39        ) {
40                return $id_website;
41        }
42
43        $id_website = sql_insertq('spip_websites', array('url'=>$base,'descriptif'=>$desc,'date'=>date('Y-m-d H:i:s')));
44
45        // relire et verifier
46        $url = sql_getfetsel('url', 'spip_websites', 'id_website='.intval($id_website));
47        if ($url !== $base) {
48                // il y a eu un caractere exotique dans l'url, on la vire
49                sql_delete('spip_websites', 'id_website='.intval($id_website));
50                return false;
51        }
52
53        return $id_website;
54}
55
56// reparer les urls mal formees
57function univers_nettoyer_url($url) {
58        $url = preg_replace(',(IMG|local)/cache.+spip[.]php,', 'spip.php', $url);
59        $url = preg_replace(',(index|spip)[.]php/.+,i', 'spip.php', $url);
60        $url = preg_replace(',(index|spip|forum|article)[.]php3/.+,i', '', $url);
61        $url = preg_replace(',/(plugins|ecrire|IMG|local|squelettes)/.+[.]php,i', '', $url);
62
63        return $url;
64}
65
66function univers_nettoyer_urls() {
67        // urls mal formees
68        $res = sql_select(
69                'id_website,url',
70                'spip_websites',
71                "url REGEXP '(index|spip)[.]php/.+'"
72                                        ." OR url REGEXP '/(plugins|ecrire|IMG|local|squelettes)/.+[.]php$'"
73        );
74        while ($row = sql_fetch($res)) {
75                $url = univers_nettoyer_url($row['url']);
76                if ($url!=$row['url']) {
77                        spip_log('nettoyage '.$row['id_website'].':'.$row['url']." => $url", 'universclean');
78                        sql_updateq('spip_websites', array('url'=>$url), 'id_website='.intval($row['id_website']));
79                }
80        }
81
82        // urls refusees (feed google/feedburner)
83        sql_delete('spip_websites', 'url LIKE'.sql_quote('http://feeds.feedburner.com%'));
84        sql_delete('spip_websites', 'url LIKE'.sql_quote('http://feedproxy.google.com%'));
85
86        // nettoyage des liens morts (suite a delete ci-dessus)
87        $res = sql_select(
88                'P.id_website',
89                'spip_websites_plugins AS P LEFT JOIN spip_websites AS W ON P.id_website = W.id_website',
90                'W.id_website IS NULL'
91        );
92        while ($row = sql_fetch($res)) {
93                sql_delete('spip_websites_plugins', 'id_website='.intval($row['id_website']));
94        }
95}
96
97function univers_rechercher_referers($date) {
98        $res = sql_select(
99                'referer',
100                'spip_referers',
101                'date='.
102                        sql_quote($date).
103                        " AND referer LIKE '%spip.php%' AND referer NOT LIKE 'https://contrib.spip.net%'".
104                        " AND referer NOT LIKE '%localhost%'"
105        );
106        spip_log("Import depuis les referer du $date : %spip.php% , ".sql_count($res), 'universreferers');
107        while ($row = sql_fetch($res)) {
108                spip_log('Import referer : '.$row['referer'], 'universreferers');
109                univers_proposer_site($row['referer']);
110        }
111
112        $res = sql_select(
113                'referer',
114                'spip_referers',
115                'date='.
116                        sql_quote($date).
117                        " AND referer LIKE '%/ecrire/%' AND referer NOT LIKE 'https://contrib.spip.net%'".
118                        " AND referer NOT LIKE '%localhost%'"
119        );
120        spip_log("Import depuis les referer du $date : %/ecrire/% , ".sql_count($res), 'universreferers');
121        while ($row = sql_fetch($res)) {
122                spip_log('Import referer : '.$row['referer'], 'universreferers');
123                univers_proposer_site(preg_replace(',/ecrire/.*$,Uims', '/spip.php', $row['referer']));
124        }
125}
126
127function univers_rechercher_sites_spip($req, $start = 0, $max = 10, $step = 10, $var = 'start') {
128        $urls = array();
129        while ($start<$max) {
130                $url = parametre_url($req, $var, $start, '&');
131                $page = recuperer_page($url);
132                $h3 = extraire_balises($page, 'h3');
133                foreach ($h3 as $h) {
134                        $a = extraire_balise($h, 'a');
135                        $href = extraire_attribut($a, 'href');
136                        if (preg_match(';^([a-z]{3,5})://;i', $href)
137                                and strpos($href, 'inurl:')===false
138                                and strpos($href, 'google')===false
139                                and strpos($href, 'spip.php')!==false) {
140                                $href = preg_replace(',spip[.]php?.*$,i', 'spip.php', $href);
141                                $urls[$href] = textebrut($a);
142                        }
143                }
144                $start+=$step;
145        }
146        return $urls;
147}
148
149function univers_twitter_extraire_feed_urls($url, $enlarge = true) {
150        $long = array();
151        $urls = array();
152        $page = recuperer_page($url);
153        $page = str_replace('&lt;b&gt;', '', $page);
154        $page = str_replace('&lt;/b&gt;', '', $page);
155
156        $titles = extraire_balises($page, 'title');
157        $page = preg_replace(',</?title>,ims', "\n", implode($titles));
158
159        preg_match_all(",https?://[^?\"'#;:\s]*,ims", $page, $regs, PREG_SET_ORDER);
160        $urls = array_map('reset', $regs);
161        foreach ($urls as $k => $url) {
162                if (!preg_match(",https?://[^?\"'#;:]*spip[.]php3?,Uims", $url)) {
163                        // essayer de l'elargir
164                        if (!isset($long[$url])) {
165                                $long[$url] = recuperer_lapage($url, false, 'GET', 100000);
166                                $long[$url] = (is_string($long[$url])?$long[$url]:false);
167                        }
168                        if ($long[$url]) {
169                                $urls[$k] = $url = $long[$url];
170                        }
171                }
172                if (!preg_match(",https?://[^?\"'#;:]*spip[.]php3?,Uims", $url)) {
173                        unset($urls[$k]);
174                }
175        }
176        $urls = array_unique($urls);
177       
178        return $urls;
179}
180
181function univers_spipnet_extraire_feed_urls($url) {
182        $urls = array();
183        $page = recuperer_page($url);
184        $links = extraire_balises($page, 'link');
185        foreach ($links as $link) {
186                if (preg_match(',<link>(.*)</link>,Uims', $link, $reg)) {
187                        $urls[] = trim($reg[1]);
188                }
189        }
190        $urls = array_unique($urls);
191
192        return $urls;
193}
194
195function univers_feed_watch($echo = false) {
196        $explore = array(
197                'twitter' => 'https://blog.spip.net/?page=backend-twitter-spip',
198                'spipnet'=>'https://www.spip.net/?page=backend-sites-sous-spip&id_article=884',
199        );
200
201        $feed = 0;
202        if (isset($GLOBALS['meta']['univers_feedwatch'])) {
203                $feed = $GLOBALS['meta']['univers_feedwatch'];
204        }
205
206
207        $i = 0;
208        while ($i++<$feed) {
209                list($type, $url) = each($explore);
210        }
211
212        list($type, $url) = each($explore);
213        if (function_exists($f = "univers_$type".'_extraire_feed_urls')) {
214                spip_log($s = "Analyse Feed $url", 'univers');
215                if ($echo) {
216                        echo "$s<br />";
217                }
218                $liste = $f($url);
219
220                foreach ($liste as $url) {
221                        spip_log($s = "$url", 'univers');
222                        if ($echo) {
223                                echo "$s<br />";
224                        }
225                        univers_proposer_site($url);
226                }
227        }
228
229        $feed++;
230        if ($feed>=count($explore)) {
231                $feed = 0;
232        }
233        ecrire_meta('univers_feedwatch', $feed);
234        // un coup de netoyage sur les urls mal formees
235        univers_nettoyer_urls();
236}
Note: See TracBrowser for help on using the repository browser.