source: spip-zone/_plugins_/_test_/podcast_client/podcast_client.php @ 15059

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

remplace abs_url par url_absolue ; supprime un fichier de dev qui fait maintenant partie du core

File size: 7.5 KB
Line 
1<?php
2
3// Syndication : ce plugin permet d'integrer les <enclosure>
4// des flux RSS sous la forme de documents distants dans la
5// table spip_documents
6//
7// Il renseigne aussi une table de jointure
8// spip_documents_syndic (id_document, id_syndic, id_syndic_article)
9// qui sera aussi prise en compte par le compilateur
10//
11// (par defaut, on se contente de conserver une trace de ces
12// documents dans le champ #TAGS de l'article syndique).
13
14
15//
16// recupere les donnees du point d'entree 'post_syndication'
17//
18
19        function PodcastClient_podcast_client() {
20                PodcastClient_verifier_table_documents_syndic();
21       
22                list($le_lien, $id_syndic, $data) = func_get_arg(0);
23                //print_r($data);
24                //mettre les documents dans un tableau
25
26                // trouver des enclosures (podcast)
27                $enclosure = $data['enclosures'] ;
28                // href et type sont obligatoires
29                        if (($enc_regs_url = extraire_attribut($enclosure,'href')
30                        AND $enc_regs_type = extraire_attribut($enclosure,'type'))) {
31                                $url  = substr(urldecode($enc_regs_url), 0,255);
32                                $data['enc_enclosure']['url'] = addslashes(url_absolue($url, $le_lien));
33                                $data['enc_enclosure']['type'] = trim($enc_regs_type) ;
34                                $data['enc_enclosure']['length'] = extraire_attribut($enclosure,'length') ;
35                                if(!$data['enc_enclosure']['type']) $data['enc_enclosure']['type'] = substr($url, -3);
36                        }
37
38                $data['enclosures_all'][] = $data['enc_enclosure'] ;   
39
40                // trouver une image dans le descriptif (flickr)
41
42                // <img src="http://farm1.static.flickr.com/209/465887020_320ee68662_m.jpg" width="180" height="240" alt="Apéro Belleville 19/7/04" style="border: 1px solid #ddd;" />
43                $enclosure = $data['descriptif'] ;
44                        if (($enc_regs_url = extraire_attribut($enclosure,'src'))) {
45                                $url  = substr(urldecode($enc_regs_url), 0,255);
46                                //var_dump($url);
47
48                                $ext = substr($url, -3);
49                                if(preg_match("/(jpg|gif|png)/",$ext)){
50                                $data['enc_image']['url'] = addslashes(url_absolue($url, $le_lien));
51                                $data['enc_image']['type'] = $ext ;
52
53                                }
54                        }
55                       
56                $data['enclosures_all'][] = $data['enc_image'] ;
57
58                //trouver un flv chez  dailymotion ou une image chez flickr
59                # <media:content url="http://www.dailymotion.com/get/14/80x60/flv/3088827.flv?key=733d92b170af04321c5d108635a6d94512c133a.flv" type="video/x-flv" duration="215" width="80" height="60"/>
60
61                # <media:content url="http://farm1.static.flickr.com/169/465892205_c6232dab5f_o.jpg" type="image/jpeg" height="1920" width="2560"/>
62                //echo $item ;
63                if (preg_match(',(<media:content[^>]*>),i',
64                $data['item'], $match)) {
65                        $go=str_replace('media:content','mediacontent',$match[1]);
66                        $data['enc_media']['url'] = extraire_attribut($go, 'url');
67                        $data['enc_media']['duration'] = extraire_attribut($go, 'duration');
68                        $data['enc_media']['width'] = extraire_attribut($go, 'width');
69                        $data['enc_media']['height'] = extraire_attribut($go, 'height');
70                        $data['enc_media']['type'] = trim(extraire_attribut($go,'type'));
71                }
72
73                // trouver une vignette miniature du media
74                // <media:thumbnail url="http://static-02.dailymotion.com/dyn/preview/320x240/2084714.jpg?20070218160100" height="240" width="320"/>   
75
76                // <media:thumbnail url="http://farm1.static.flickr.com/169/465892205_c22c43b50d_s.jpg" height="75" width="75"/>               
77                if (preg_match(',(<media:thumbnail[^>]+\/>),i',
78                $data['item'], $match)) {
79                        $go=str_replace('media:thumbnail','mediathumbnail',$match[1]);
80                        $data['enc_thumbnail']['url'] = extraire_attribut($go, 'url');
81                        $data['enc_thumbnail']['type'] = 'jpg';
82                }
83
84                // si le media est un flv, on prend le flv et aussi la miniature (a terme la mettre dans la vignette du doc distant spip)
85                if($data['enc_media']['type'] == 'video/x-flv'){       
86                        $data['enclosures_all'][] = $data['enc_media'] ;
87                        $data['enclosures_all'][] = $data['enc_thumbnail'] ;
88                }
89
90//var_dump($data['item']);var_dump($data['descriptif']);var_dump($data['enclosures_all']);die("coucou");
91
92                /**/
93                PodcastClient_traiter_les_enclosures_rss($data['enclosures_all'],$id_syndic,$le_lien);
94
95                return func_get_arg(0); # remettre les infos dans le pipeline
96        }
97
98        function PodcastClient_delete_podcast_client() {
99                spip_query("DROP TABLE spip_documents_syndic");
100        }
101
102        //
103        // Verifie que la table spip_documents_syndic existe, sinon la creer
104        //
105        function PodcastClient_verifier_table_documents_syndic() {
106                if (!spip_query("SELECT id_syndic, id_syndic_article, id_document FROM spip_documents_syndic")) {
107                        spip_log('creation de la table spip_documents_syndic');
108                        include_spip('base/create');
109                        include_spip('base/abstract_sql');
110            creer_base();
111                }
112        }
113
114        //
115        // Inserer les references aux fichiers joints
116        // presentes sous la forme microformat <a rel="enclosure">
117        //
118        function PodcastClient_traiter_les_enclosures_rss($enclosures,$id_syndic,$le_lien) {
119        spip_log('podcast_client'.$le_lien.'\n\n');
120                if (sizeof($enclosures) == 0) return false ;
121                include_spip('inc/filtres'); # pour extraire_attribut
122       
123                list($id_syndic_article) = spip_fetch_array(spip_query(
124                "SELECT id_syndic_article FROM spip_syndic_articles
125                WHERE id_syndic=$id_syndic AND url='".addslashes($le_lien)."'"), SPIP_NUM);
126       
127                // Attention si cet article est deja vu, ne pas doubler les references
128                spip_query("DELETE FROM spip_documents_syndic
129                WHERE id_syndic_article=$id_syndic_article");
130                spip_log("efface");
131                // Integrer les enclosures
132                foreach ($enclosures as $enclosure) {
133
134                        $url = $enclosure['url'] ;
135                        $type = $enclosure['type'] ;
136                        // href et type sont obligatoires
137                        if ($enclosure['url'] AND $enclosure['type']) {
138                        spip_log("type : ".$enclosure['type']) ;
139                        // Verifier que le content-type nous convient
140                                $row = spip_fetch_array(spip_query("SELECT id_type
141                                FROM spip_types_documents WHERE mime_type='$type'"));
142                                $id_type = $row['id_type'] ;
143                                spip_log("id_type1 : ".$id_type) ;
144                                if (!$id_type) {
145                                list($id_type) = spip_fetch_array(spip_query("SELECT id_type
146                                        FROM spip_types_documents WHERE extension='$type'"), SPIP_NUM);
147                                spip_log("id_type2 : ".$id_type) ;
148                                }
149                               
150                               
151                                if (!$id_type) {
152                                        spip_log("podcast_client: enclosure inconnue ($type) $url");
153                                        list($id_type) = spip_fetch_array(spip_query("SELECT id_type
154                                        FROM spip_types_documents WHERE extension='bin'"), SPIP_NUM);
155                                        spip_log("id_type3 : ".$id_type) ;
156                                        // si les .bin ne sont pas autorises, on ignore ce document
157                                        if (!$id_type) continue;
158                                }
159                                spip_log("id_type : ".$id_type) ;
160                                // length : optionnel (non bloquant)
161                               
162                                $taille = intval($enclosure['length']);
163                                $largeur = intval($enclosure['width']);
164                                $hauteur = intval($enclosure['height']);
165                                $duree = intval($enclosure['duration']);
166                                spip_log("taille : ".$taille." largeur : ".$largeur." hauteur : ".$hauteur." duree ".$duree);
167                                // Inserer l'enclosure dans la table spip_documents
168                                if ($t = spip_fetch_array(spip_query("SELECT id_document FROM
169                                spip_documents WHERE fichier='$url' AND distant='oui'"))){
170                                        $id_document = $t['id_document'];
171                                spip_log("deja vu doc->".$id_document) ;
172                                } else {
173
174                                        spip_query("INSERT INTO spip_documents
175                                        (id_type, titre, fichier, date, distant, taille, mode, largeur, hauteur)
176                                        VALUES ($id_type,'','$url',NOW(),'oui',$taille, 'document', $largeur, $hauteur)");
177                                        $id_document = spip_insert_id();
178                                        spip_log("podcast_client: '$url' => id_document=$id_document");
179                                       
180                                }
181       
182                                // lier avec l'article syndique
183                                spip_query("INSERT INTO spip_documents_syndic
184                                (id_document, id_syndic, id_syndic_article)
185                                VALUES ($id_document, $id_syndic, $id_syndic_article)");
186                                spip_log("lier doc->".$id_document."Sarticle".$id_syndic_article) ;
187                                $n++;
188                        }
189               
190               
191                }
192       
193                return $n; #nombre d'enclosures integrees
194        }
195
196
197?>
Note: See TracBrowser for help on using the repository browser.