source: spip-zone/_plugins_/oembed/inc/oembed_recuperer_url.php @ 98148

Last change on this file since 98148 was 98148, checked in by kent1@…, 2 years ago

PSR SPIP

File size: 1.9 KB
Line 
1<?php
2/**
3 * Plugin oEmbed
4 * Licence GPL3
5 *
6 */
7
8if (!defined('_ECRIRE_INC_VERSION')) {
9        return;
10}
11
12/**
13 * Recuperer une URL oembed, si possible via curl et IPv4 pour contourner le bug de Youtube sur les IPv6
14 *
15 * @param string $oembed_url
16 * @param string $url
17 * @param string $format
18 * @return bool|mixed|string
19 */
20function inc_oembed_recuperer_url($oembed_url, $url, $format) {
21        $data = false;
22
23        // on recupere le contenu de la page
24        // si possible via curl en IPv4 car youtube bug en IPv6
25        // uniquement si PHP >= 5.3.0 pour utiliser l'option CURLOPT_IPRESOLVE
26        if (function_exists('curl_init') and version_compare(phpversion(), '5.3.0', '>=')) {
27                spip_log('Requete oembed (curl) pour '.$url.' : '.$oembed_url, 'oembed.'._LOG_DEBUG);
28                $c = curl_init();
29                curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
30                curl_setopt($c, CURLOPT_URL, $oembed_url);
31                curl_setopt($c, CURLOPT_FOLLOWLOCATION, true);
32
33                if (isset($GLOBALS['meta']['http_proxy']) and $GLOBALS['meta']['http_proxy']) {
34                  curl_setopt($c, CURLOPT_PROXY, $GLOBALS['meta']['http_proxy']);
35                        if (isset($GLOBALS['meta']['http_noproxy'])) {
36                                curl_setopt($c, CURLOPT_NOPROXY, $GLOBALS['meta']['http_proxy']);
37                        }
38                }
39
40                // the real trick for Youtube :
41                // http://stackoverflow.com/questions/26089067/youtube-oembed-api-302-then-503-errors
42                curl_setopt($c, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
43                $data = curl_exec($c);
44                $status = curl_getinfo($c, CURLINFO_HTTP_CODE);
45                curl_close($c);
46        } else {
47                spip_log('Requete oembed (recuperer_page) pour '.$url.' : '.$oembed_url, 'oembed.'._LOG_DEBUG);
48                include_spip('inc/distant');
49                $data = recuperer_page($oembed_url);
50        }
51
52        spip_log('infos oembed brutes pour '.$url.' : '.($data?$data:'ECHEC'), 'oembed.'._LOG_DEBUG);
53        if ($data) {
54                if ($format == 'json') {
55                        $data = json_decode($data, true);
56                }
57                // TODO : format xml
58                //if ($format == 'xml')
59                //      $cache[$oembed_url] = false;
60        }
61
62        return $data;
63}
Note: See TracBrowser for help on using the repository browser.