[SPIP] ~maj v3.0.14-->v3.0.17
[ptitvelo/web/www.git] / www / plugins-dist / sites / inc / site.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2014 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
12
13 if (!defined("_ECRIRE_INC_VERSION")) return;
14
15
16 // http://doc.spip.org/@analyser_site
17 function analyser_site($url) {
18 include_spip('inc/filtres');
19 include_spip('inc/distant');
20
21 // Accepter les URLs au format feed:// ou qui ont oublie le http://
22 $url = preg_replace(',^feed://,i', 'http://', $url);
23 if (!preg_match(',^[a-z]+://,i', $url)) $url = 'http://'.$url;
24
25 $texte = recuperer_page($url, true);
26 if (!$texte) return false;
27
28 include_spip('inc/syndic');
29 cdata_echappe($texte, $echappe_cdata);
30
31 if (preg_match(',<(channel|feed)([\:[:space:]][^>]*)?'
32 .'>(.*)</\1>,ims', $texte, $regs)) {
33 $result['syndication'] = 'oui';
34 $result['url_syndic'] = $url;
35 $channel = $regs[3];
36
37 // Pour recuperer l'entete, on supprime tous les items
38 $b = array_merge(
39 extraire_balises($channel, 'item'),
40 extraire_balises($channel, 'entry')
41 );
42 $header = str_replace($b,array(),$channel);
43
44 if ($t = extraire_balise($header, 'title')) {
45 cdata_echappe_retour($t, $echappe_cdata);
46 $result['nom_site'] = filtrer_entites(supprimer_tags($t));
47 }
48 if ($t = extraire_balises($header, 'link')) {
49 cdata_echappe_retour($t, $echappe_cdata);
50 foreach ($t as $link) {
51 $u = supprimer_tags(filtrer_entites($link));
52 if (!strlen($u))
53 $u = extraire_attribut($link, 'href');
54 if (strlen($u)) {
55 // on installe l'url comme url du site
56 // si c'est non vide, en donnant la priorite a rel=alternate
57 if (preg_match(',\balternate\b,', extraire_attribut($link, 'rel'))
58 OR !isset($result['url_site']))
59 $result['url_site'] = filtrer_entites($u);
60 }
61 }
62 }
63 $result['url_site'] = url_absolue($result['url_site'], $url);
64
65 if ($a = extraire_balise($header, 'description')
66 OR $a = extraire_balise($header, 'tagline')) {
67 cdata_echappe_retour($a, $echappe_cdata);
68 $result['descriptif'] = filtrer_entites(supprimer_tags($a));
69 }
70
71 if (preg_match(',<image.*<url.*>(.*)</url>.*</image>,Uims',
72 $header, $r)
73 AND preg_match(',(https?://.*/.*(gif|png|jpg)),ims', $r[1], $r)
74 AND $image = recuperer_infos_distantes($r[1])) {
75 if (in_array($image['extension'], array('gif', 'jpg', 'png'))) {
76 $result['format_logo'] = $image['extension'];
77 $result['logo'] = $r[1];
78 }
79 else if ($image['fichier']) {
80 spip_unlink($image['fichier']);
81 }
82 }
83 }
84 else {
85 $result['syndication'] = 'non';
86 $result['url_site'] = $url;
87 if (preg_match(',<head>(.*(description|title).*)</head>,Uims', $texte, $regs)) {
88 $head = filtrer_entites($regs[1]);
89 } else
90 $head = $texte;
91 if (preg_match(',<title[^>]*>(.*),i', $head, $regs))
92 $result['nom_site'] = filtrer_entites(supprimer_tags(preg_replace(',</title>.*,i', '', $regs[1])));
93 if ($a = array_merge(
94 extraire_balises($head, 'meta'),
95 extraire_balises($head, 'http-equiv')
96 )) {
97 foreach($a as $meta) {
98 if (extraire_attribut($meta, 'name') == 'description') {
99 $desc = trim(extraire_attribut($meta, 'content'));
100 if (!strlen($desc))
101 $desc = trim(extraire_attribut($meta, 'value'));
102 $result['descriptif'] = $desc;
103 }
104 }
105 }
106
107 // Cherchons quand meme un backend
108 include_spip('inc/distant');
109 include_spip('inc/feedfinder');
110 $feeds = get_feed_from_url($url, $texte);
111 // si on a a trouve un (ou plusieurs) on le note avec select:
112 // ce qui constitue un signal pour exec=sites qui proposera de choisir
113 // si on syndique, et quelle url.
114 if (count($feeds)>=1) {
115 spip_log("feedfinder.php :\n".join("\n", $feeds));
116 $result['url_syndic'] = "select: ".join(' ',$feeds);
117 }
118 }
119
120 cdata_echappe_retour($result, $echappe_cdata);
121 return $result;
122 }
123
124 ?>