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

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

oups

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