source: spip-zone/_plugins_/plugins_seenthis/autoembed/autoembed.php @ 69512

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

debuguer l'embed d'un gist (github ayant ajoute un class= a son element PRE, la detection sautait et on recuperait tout le html de la page github...)

File size: 4.9 KB
Line 
1<?php
2
3
4function embed_url($url) {
5        $max_w = 440;
6        $max_i = 300;
7
8        $url = str_replace("/#/", "/", $url);
9        $url = str_replace("/#!/", "/", $url);
10
11
12        $p = parse_url($url);
13        $host = $p["host"];
14        $host = preg_replace(",^www\.,", "", $host);
15        $host = str_replace(".", "-", $host);
16
17        $fichier = md5($url).".php";
18        $dossier = substr(md5($url), 0, 3);
19
20        // Si l'embed a deja été sauvegardé
21        if (file_exists(_DIR_CACHE."$host/$dossier/$fichier")) {
22                $html = implode("", file(_DIR_CACHE."$host/$dossier/$fichier"));
23                if (strlen($html) > 0) return $html;
24        } else { // Si pas sauvegardé
25                // Gérer les images Flickr à part
26                // car autoembed ne gère que les vidéos de Flickr
27                if (preg_match("/^http\:\/\/(www\.)?flickr\.com/i", $url)) {
28                        $oembed = "http://www.flickr.com/services/oembed/?format=json&url=".$url;
29                        $json = @join("",file($oembed));
30                       
31                        $json = @json_decode($json);
32                        $img = $json->{'url'};
33                        if ($img) $code_ae = "<div class='oembed-container oembed-img'><a href='$url'><img src='$img' alt='Flickr' style='max-width: ".$max_i."px; max-height: ".$max_i."px;'/></a></div>";     
34                }
35                else if (preg_match("/^http\:\/\/(www\.)?pastebin\.com\/(.*)/i", $url, $regs)) {
36                        $val = $regs[2];
37
38                       
39                        /*
40                        $html = join("", file($url));
41                        $html = substr($html, strpos($html, '<div id="code_frame">'), strlen($html));
42                        $html = substr($html, 0, strpos($html, '<div class="content_title">'));
43                       
44                        $html = preg_replace(',<div id\=\"code_buttons\">(.*)<\/div>,sU', '', $html);
45                        if (preg_match(",<ol>(.*)<\/ol>,s", $html, $regs))
46                                        $html = $regs[0];
47                       
48                        $html = trim($html);
49                        */
50                        $html = "<iframe src='http://pastebin.com/embed_iframe.php?i=".$val."' style='border:none;width:100%;'></iframe>";
51                        //$html = "<script src='http://pastebin.com/embed_js.php?i=".$val."'></script>";
52                        $code_ae = "<div class='oembed-container oembed-code'>$html</div>";
53                       
54                }
55                else if (preg_match("/^https?\:\/\/gist\.github\.com\/(.*)/i", $url, $regs)) {
56                        $html = file_get_contents($url);
57                        $tag = 'pre'; # extraire_balise
58                        if (preg_match(
59                        ",<$tag\b[^>]*(/>|>.*</$tag\b[^>]*>|>),UimsS",
60                        $html, $regs)) {
61                                $pre = $regs[0];
62                                $code_ae = "<div class='oembed-container oembed-code'>$pre</div>";
63                        }
64                }
65                else if (preg_match("/^http\:\/\/(www\.)?yfrog\.com/i", $url)) {
66                        $oembed = "http://www.yfrog.com/api/oembed?url?format=json&url=".$url;
67                        $json = join("",file($oembed));
68                        $json = json_decode($json);
69                        $img = $json->{'url'};
70                        if ($img) $code_ae = "<div class='oembed-container oembed-img'><a href='$url'><img src='$img' alt='Flickr' style='max-width: ".$max_i."px; max-height: ".$max_i."px;'/></a></div>";     
71                }
72                else if (preg_match("/^http\:\/\/(www\.)?soundcloud\.com/i", $url)) {
73                        $oembed = "http://soundcloud.com/oembed/?format=json&url=".$url;
74                        $json = join("",file($oembed));
75                        $json = json_decode($json);
76                        $html = $json->{'html'};
77                        if ($html) $code_ae = "<div class='oembed-container'>$html</div>";     
78                } 
79                else if (preg_match("/^http\:\/\/(www\.)?slideshare\.net/i", $url)) {
80                        // Le JSON ne se décode pas correction,
81                        // je passe donc en XML
82                        $oembed = "http://www.slideshare.net/api/oembed/2?format=xml&url=".$url."&maxwidth=".$max_w;
83                        $xml = trim(join("",file($oembed)));
84                        if (preg_match(",<html>(.*)</html>,i", $xml, $regs)){
85                                $html = $regs[1];
86                                $html = html_entity_decode($html, ENT_QUOTES, "UTF-8");
87                                if ($html) $code_ae = "<div class='oembed-container'>$html</div>";     
88                               
89                        }
90                } 
91                else {
92                        require_once "AutoEmbed.class.php";
93                        $AE = new AutoEmbed();
94       
95       
96                        // load the embed source from a remote url
97                        if (!$AE->parseUrl($url)) {
98                                $code_ae = "";
99                                // No embeddable video found (or supported)
100                        } else {
101                                $AE->setParam('autoplay','false');
102                               
103                               
104                                $attributs = $AE->getObjectAttribs();
105                                $w = $attributs["width"];
106                                $h = $attributs["height"];
107                               
108                                //print_r($attributs);
109                                if ($w > $max_w) {
110                                        $rapport = $w / $max_w;
111                                       
112                                        $w = round($w / $rapport);
113                                        $h = round($h / $rapport);
114                                       
115                                        $AE->setWidth($w);
116                                        $AE->setHeight($h);
117                                }       
118                               
119
120                                $embed = $AE->getEmbedCode();
121                                $vignette = $AE->getImageURL();
122                               
123                                $source = $AE->getStub("title");
124                                                               
125                                if ($source == "YouTube") {
126                                        $embed = rawurlencode($embed);
127                                        $embed = "<div onclick=\"$(this).html(decodeURIComponent('$embed'));\" style='width: ".$w."px; height: ".$h."px; background: url($vignette) center center; cursor: pointer;'></div>";
128                                } else if ($source == "Twitpic" OR $source == "500px") {
129                                        $embed = "<a href='$url'><img src='$vignette' alt='' style='max-width:200px; max-height: 200px;' /></a>";
130                                }
131                               
132                                $code_ae = "<div class='oembed-container'>".$embed."</div>";   
133                               
134                               
135                        }
136                }
137               
138                if ($code_ae) {
139                        // Créer dossier si nécessaire
140                        if (!is_dir(_DIR_CACHE."$host")) mkdir(_DIR_CACHE."$host");
141                        if (!is_dir(_DIR_CACHE."$host/$dossier")) mkdir(_DIR_CACHE."$host/$dossier");
142               
143                        $f = fopen(_DIR_CACHE."$host/$dossier/$fichier", "w");
144
145                        fwrite($f, $code_ae);
146                        fclose($f);
147                }
148
149                return $code_ae;
150        }
151}
152
153?>
Note: See TracBrowser for help on using the repository browser.