source: spip-zone/_plugins_/oembed/action/oembed_nettoyer_iframes.php @ 91398

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

completer la conversion des iframes

File size: 7.0 KB
Line 
1<?php
2/**
3 * Plugin oEmbed
4 * Licence GPL3
5 *
6 */
7
8if (!defined('_ECRIRE_INC_VERSION')) return;
9
10
11/**
12 * Conversion des iframe en lien embed
13 * appeler manuellement avec ?action=oembed_nettoyer_iframes
14 * autorise pour les seuls webmestres
15 */
16function action_oembed_nettoyer_iframes_dist(){
17        include_spip('inc/autoriser');
18        include_spip('inc/filtres');
19        include_spip('action/editer_objet');
20        if (!autoriser('webmestre')){
21                die('Pas autorise');
22        }
23        echo "<h1>Conversion des &lt;iframe&gt; en liens oembed</h1>";
24        $simu = true;
25        if (_request('modif')) $simu=false;
26        if ($simu) echo "<p><strong>mode SIMULATION</strong> (ajoutez &modif=1 dans l'url pour modifier les contenus)</p>";
27
28        $tables = array(
29                'spip_articles'=>array('descriptif','chapo','texte','ps'),
30        );
31
32        foreach ($tables as $table=>$champs){
33                $objet = objet_type($table);
34
35                foreach($champs as $champ){
36                        $primary = id_table_objet($table);
37                        $res = sql_select("$primary,$champ", $table, "$champ LIKE '%iframe%' OR $champ LIKE '%object%'");
38                        while ($row = sql_fetch($res)){
39                                $pre = "$primary=".$row[$primary].":$champ:";
40
41                                $texte = $row[$champ];
42                                $iframes = extraire_balises($texte, "iframe");
43                                if (count($iframes)){
44                                        foreach ($iframes as $iframe){
45                                                $url = "";
46                                                $src = extraire_attribut($iframe, "src");
47                                                if (strncmp($src, "//", 2)==0)
48                                                        $src = "http:" . $src;
49                                                if (strpos($iframe, "youtube")!==false){
50                                                        if (strpos($src, "/embed/")!==false){
51                                                                $url = str_replace("?", "&", $src);
52                                                                $url = str_replace("/embed/", "/watch?v=", $url);
53                                                                echo "$pre Youtube $url<br />";
54                                                        }
55                                                        if (!$url){
56                                                                var_dump($row);
57                                                                var_dump(entites_html($iframe));
58                                                                die('youtube inconnue');
59                                                        }
60                                                } elseif (strpos($iframe, "dailymotion")!==false) {
61                                                        if (strpos($src, "/embed/")!==false){
62                                                                $url = str_replace("/embed/", "/", $src);
63                                                                $url = explode("?",$url);
64                                                                $url = reset($url);
65                                                                #var_dump($url);
66                                                                echo "$pre DailyMotion $url<br />";
67                                                        }
68                                                        if (!$url){
69                                                                var_dump($row);
70                                                                var_dump($iframe);
71                                                                die('dailymotion inconnue');
72                                                        }
73                                                } elseif (strpos($iframe, "player.vimeo")!==false) {
74                                                        if (strpos($src, "/video/")!==false){
75                                                                $url = str_replace("/video/", "/", $src);
76                                                                $url = str_replace("player.vimeo","vimeo",$url);
77                                                                $url = explode("?",$url);
78                                                                $url = reset($url);
79                                                                #var_dump($url);
80                                                                echo "$pre Vimeo $url<br />";
81                                                        }
82                                                        if (!$url){
83                                                                var_dump($row);
84                                                                var_dump($iframe);
85                                                                die('vimeo inconnue');
86                                                        }
87                                                } elseif (strpos($iframe, "soundcloud")!==false) {
88                                                        // un peu complique :
89                                                        // il faut faire une requete oembed sur l'url api, avec iframe=false
90                                                        // pour recuperer du html avec un lien vers la page soundcloud
91                                                        parse_str(end(explode("?",$src)),$args);
92                                                        $api_url = $args['url'];
93                                                        include_spip("inc/oembed");
94                                                        include_spip("inc/distant");
95                                                        $provider = oembed_verifier_provider($api_url);
96                                                        $data_url = parametre_url(url_absolue($provider['endpoint'],url_de_base()),'url',$api_url,'&');
97                                                        $data_url = parametre_url($data_url,'format','json','&');
98                                                        $data_url = parametre_url($data_url,'iframe','false','&');
99                                                        $json = recuperer_page($data_url);
100                                                        $json = json_decode($json,true);
101                                                        $link = extraire_balise($json['html'],'a');
102                                                        if ($url = extraire_attribut($link,"href")){
103                                                                echo "$pre SoundCloud $url<br />";
104                                                        }
105                                                        if (!$url){
106                                                                var_dump($row);
107                                                                var_dump($iframe);
108                                                                die('soundcloud inconnue');
109                                                        }
110                                                } else {
111                                                        echo "$pre iframe inconnue : ".entites_html($iframe)."<br />";
112                                                }
113                                                if ($url){
114                                                        $texte = str_replace($iframe, "\n\n" . $url . "\n\n", $texte);
115                                                        if (preg_match(",<center>\s*" . preg_quote($url, ",") . ".*</center>,Uims", $texte, $m)){
116                                                                $texte = str_replace($m[0], "\n\n" . $url . "\n\n", $texte);
117                                                        }
118                                                        $texte = preg_replace(",\s+" . preg_quote($url, ",") . "\s+,ims", "\n\n" . $url . "\n\n", $texte);
119                                                }
120                                        }
121                                        if ($texte!==$row[$champ]){
122                                                echo "$pre Corrige $champ <br />";
123                                                if (!$simu) {
124                                                        echo "$pre Corrige $champ <br />";
125                                                        objet_modifier($objet,$row[$primary],array($champ=>$texte));
126                                                }
127                                                else {
128                                                        echo "SIMU : $pre Corrige $champ <br />";
129                                                }
130                                        }
131                                }
132                                $objects = extraire_balises($texte, "object");
133                                if (count($objects)){
134                                        foreach ($objects as $object){
135                                                $url = "";
136                                                $embed = extraire_balise($object, "embed");
137                                                $src = extraire_attribut($embed, "src");
138                                                if (strncmp($src, "//", 2)==0)
139                                                        $src = "http:" . $src;
140                                                if (strpos($embed, "youtube")!==false){
141                                                        if (strpos($src, "/v/")!==false){
142                                                                $url = str_replace("?", "&", $src);
143                                                                $url = str_replace("/v/", "/watch?v=", $url);
144                                                                echo "$pre Youtube $url<br />";
145                                                        }
146                                                        elseif (strpos($src, "/embed/")!==false){
147                                                                $url = str_replace("?", "&", $src);
148                                                                $url = str_replace("/embed/", "/watch?v=", $url);
149                                                                echo "$pre Youtube $url<br />";
150                                                        }
151                                                        if (!$url){
152                                                                var_dump($row);
153                                                                var_dump(entites_html($object));
154                                                                die('youtube inconnue');
155                                                        }
156                                                } elseif (strpos($embed, "dailymotion")!==false) {
157                                                        if (strpos($src, "/swf/video/")!==false){
158                                                                $url = str_replace("/swf/video/", "/video/", $src);
159                                                                $url = explode("?",$url);
160                                                                $url = reset($url);
161                                                                #var_dump($url);
162                                                                echo "$pre DailyMotion $url<br />";
163                                                        }
164                                                        elseif (strpos($src, "/swf/")!==false){
165                                                                $url = str_replace("/swf/", "/video/", $src);
166                                                                $url = explode("?",$url);
167                                                                $url = reset($url);
168                                                                #var_dump($url);
169                                                                echo "$pre DailyMotion $url<br />";
170                                                        }
171                                                        if (!$url){
172                                                                var_dump($row);
173                                                                var_dump($object);
174                                                                die('dailymotion inconnue');
175                                                        }
176                                                }
177                                                elseif(strpos($embed,"vimeo.com")!==false){
178                                                        if (strpos($src, "moogaloop")!==false
179                                                          AND $id = parametre_url($src,"clip_id")){
180                                                                $url = "https://vimeo.com/$id";
181                                                                echo "$pre Vimeo $url<br />";
182                                                        }
183                                                        if (!$url){
184                                                                var_dump($row);
185                                                                var_dump(entites_html($object));
186                                                                die('vimeo inconnue');
187                                                        }
188                                                }
189                                                elseif(preg_match(",^https?://,",$u=trim(strip_tags($object)))) {
190                                                        $url = $u;
191                                                        echo "$pre Nettoyage Object url $url<br />";
192                                                }
193                                                else {
194                                                        echo "$pre object inconnue : ".entites_html($object)."<br />";
195                                                }
196                                                if ($url){
197                                                        $texte = str_replace($object, "\n\n" . $url . "\n\n", $texte);
198                                                        if (preg_match(",<center>\s*" . preg_quote($url, ",") . ".*</center>,Uims", $texte, $m)){
199                                                                $texte = str_replace($m[0], "\n\n" . $url . "\n\n", $texte);
200                                                        }
201                                                        $texte = preg_replace(",\s+" . preg_quote($url, ",") . "\s+,ims", "\n\n" . $url . "\n\n", $texte);
202                                                }
203                                        }
204                                        if ($texte!==$row[$champ]){
205                                                if (!$simu) {
206                                                        echo "$pre Corrige $champ <br />";
207                                                        objet_modifier($objet,$row[$primary],array($champ=>$texte));
208                                                }
209                                                else {
210                                                        echo "SIMU : $pre Corrige $champ <br />";
211                                                }
212                                        }
213                                }
214                        }
215                }
216        }
217}
Note: See TracBrowser for help on using the repository browser.