Changeset 103977 in spip-zone


Ignore:
Timestamp:
Apr 16, 2017, 1:27:07 PM (2 years ago)
Author:
cedric@…
Message:

Prise en charge amelioree et etendu de l'oembed des pouets mastodons : on recupere la version atom du pouet pour avoir ses infos, et on met en forme via un modeles/toot.html, y compris en prenant en charge les emoji qui peuvent etre presents dans le screen_name ou dans le content

Location:
_plugins_/oembed
Files:
6 added
5 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/oembed/css/oembed.css

    r103884 r103977  
    9090.oembed_mastodon .spip_doc_titre {display: none;}
    9191.oembed_mastodon .oe-rich {max-width:none !important;}
     92.oembed_mastodon .oembed-source {display: none;}
     93.oembed_mastodon .oe-rich {background: #f8f8f8;padding: 15px;border-radius: 4px;margin: 1em auto;}
     94.oembed_mastodon .rwd-rich-container {height: auto !important;}
     95.oembed_mastodon .spip_doc_titre {display: none;}
     96.oembed_mastodon .oe-rich {max-width:none !important;}
     97.mastodon-toot {padding:0;margin:0;padding-left:63px;font-family: Arial,Helvetica,Sans-Serif;}
     98.mastodon-toot .toot-published {float: right;color:#9baec8;text-decoration: none !important;}
     99.mastodon-toot .toot-published:active,.mastodon-toot .toot-published:focus,.mastodon-toot .toot-published:hover {text-decoration: underline !important;}
     100.mastodon-toot .toot-author-url {color:#9baec8;text-decoration: none !important;}
     101.mastodon-toot .toot-author-thumbnail {float: left;margin-left:-63px;width: 48px;height: 48px;border-radius: 4px;}
     102.mastodon-toot .toot-author-screen-name {color:#282c37;}
     103.mastodon-toot .toot-author-url:active .toot-author-screen-name,.mastodon-toot .toot-author-url:focus .toot-author-screen-name,.mastodon-toot .toot-author-url:hover .toot-author-screen-name {text-decoration: underline;}
     104.mastodon-toot .toot-content a {color:#2b90d9;text-decoration: none !important;}
     105.mastodon-toot .toot-content a:active,.mastodon-toot .toot-content a:focus,.mastodon-toot .toot-content a:hover {text-decoration: underline !important;}
     106.mastodon-toot .invisible {display: none}
     107.mastodon-toot .ellipsis::after {display: inline;content:'...'}
  • _plugins_/oembed/inc/oembed.php

    r103884 r103977  
    251251        $oembed_recuperer_url = charger_fonction('oembed_recuperer_url', 'inc');
    252252        // on recupere le contenu de la page
    253         include_spip('inc/distant');
    254 
    255         if ($html = recuperer_page($url)) {
     253        if ($html = $oembed_recuperer_url($url, $url, 'html')) {
    256254                // types de liens oembed à détecter
    257255                $linktypes = array(
  • _plugins_/oembed/inc/oembed_recuperer_url.php

    r103884 r103977  
    1919 */
    2020function inc_oembed_recuperer_url($oembed_url, $url, $format) {
    21         $data = false;
     21        $erreur = "";
    2222
    2323        // on recupere le contenu de la page
    2424        // si possible via curl en IPv4 car youtube bug en IPv6
    2525        // 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);
     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);
    2828                $c = curl_init();
    2929                curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
     
    3232                curl_setopt($c, CURLOPT_SSL_VERIFYHOST, false);
    3333                curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
     34                //curl_setopt($c, CURLOPT_SSLVERSION, 1 );
    3435
    35                 if (isset($GLOBALS['meta']['http_proxy']) and $GLOBALS['meta']['http_proxy']) {
    36                   curl_setopt($c, CURLOPT_PROXY, $GLOBALS['meta']['http_proxy']);
    37                         if (isset($GLOBALS['meta']['http_noproxy'])) {
     36                if (isset($GLOBALS['meta']['http_proxy']) and $GLOBALS['meta']['http_proxy']){
     37                        curl_setopt($c, CURLOPT_PROXY, $GLOBALS['meta']['http_proxy']);
     38                        if (isset($GLOBALS['meta']['http_noproxy'])){
    3839                                curl_setopt($c, CURLOPT_NOPROXY, $GLOBALS['meta']['http_proxy']);
    3940                        }
     
    4546                $data = curl_exec($c);
    4647                $status = curl_getinfo($c, CURLINFO_HTTP_CODE);
     48                if (!$data){
     49                        $errno = curl_errno($c);
     50                        $erreur = "Status $status Error " . curl_errno($c) . " " . curl_error($c);
     51
     52                        // si c'est une erreur de protocole SSL, on tente avec un exec mechant car ca peut venir de la version de CURL PHP
     53                        // (ca marche au moins en local)
     54                        if (!$data and $errno == 35) {
     55                                exec('curl "'.$oembed_url.'"',$output);
     56                                $data = implode("\n", $output);
     57                        }
     58
     59                }
    4760                curl_close($c);
    48         } else {
     61
     62        }
     63        else {
    4964                spip_log('Requete oembed (recuperer_page) pour '.$url.' : '.$oembed_url, 'oembed.'._LOG_DEBUG);
    5065                include_spip('inc/distant');
     
    5267        }
    5368
    54         spip_log('infos oembed brutes pour '.$url.' : '.($data?$data:'ECHEC'), 'oembed.'._LOG_DEBUG);
     69        if (!$data) {
     70                spip_log('infos oembed brutes pour '."$url | $oembed_url".' : ' . "ECHEC $erreur", 'oembed.'._LOG_ERREUR);
     71        }
     72        else {
     73                spip_log('infos oembed brutes pour '."$url | $oembed_url".' : '.(($format == 'html')?substr($data,0,100):$data), 'oembed.'._LOG_DEBUG);
     74        }
     75
    5576        if ($data) {
    5677                if ($format == 'json') {
  • _plugins_/oembed/oembed/input/posttraite_mastodon.php

    r103884 r103977  
    88if (!defined('_ECRIRE_INC_VERSION')) {
    99        return;
     10}
     11
     12include_spip('inc/charsets');
     13
     14function emojify_names($name) {
     15        $name = ':'.str_replace(' ','_',strtolower($name)).':';
     16        return $name;
     17}
     18function emojify($texte, &$need_emoji) {
     19        if (
     20                (strpos($texte, ':')!==false and preg_match(',:\w+:,',$texte))
     21          or is_utf8($texte)) {
     22                if (!function_exists('emoji_convert')) {
     23                        include_spip('lib/php-emoji/emoji');
     24                        $GLOBALS['emoji_maps']['names_to_unified'] = array_flip(array_map('emojify_names',$GLOBALS['emoji_maps']['names']));
     25                }
     26                // convertir les emoji nommes type :satellite: en utf
     27                $texte = emoji_convert($texte, 'names_to_unified');
     28                // convertir les emoji utf en html
     29                $texte = emoji_unified_to_html($texte);
     30                $need_emoji = (strpos($texte, 'emoji-sizer') !== false);
     31        }
     32        return $texte;
    1033}
    1134
     
    2043                $src = extraire_attribut($iframe_cor, 'src');
    2144
    22                 // si on sait mieux faire en faisant un extract du contenu de l'iframe on y go, car les iframe c'est moche
    23                 if ($html = recuperer_page($src)) {
    24                         $texte = $date_link = "";
    25                         if ($p = strpos($html, 'status__content')
    26                           and $p1 = strpos($html, '<p', $p)
    27                           and $p2 = strpos($html, '</p>', $p1)
    28                         ) {
    29                                 $texte = substr($html, $p1, $p2 - $p1 +4);
    30                         }
    31                         if ($p = strpos($html, 'dt-published')
    32                           and $p1 = strpos($html, '<a', $p)
    33                           and $p2 = strpos($html, '</a>', $p1)
    34                         ) {
    35                                 $date_link = substr($html, $p1, $p2 - $p1 +4);
     45
     46                $oembed_recuperer_url = charger_fonction('oembed_recuperer_url', 'inc');
     47                $url = preg_replace(',/embed$,','', $src);
     48                $src_atom = $url.'.atom';
     49                if ($xml = $oembed_recuperer_url($src_atom, $src_atom, 'xml')) {
     50
     51                        $need_emoji = false;
     52
     53                        $name = "@".strip_tags(extraire_balise($xml, 'email'));
     54                        $content = strip_tags(extraire_balise($xml, 'content'));
     55                        $content = emojify(filtrer_entites($content), $need_emoji);
     56                        $date = strip_tags(extraire_balise($xml, 'published'));
     57                        $date = date('Y-m-d H:i:s',strtotime($date));
     58
     59                        $screen_name = emojify($data['author_name'], $need_emoji);
     60
     61                        $contexte = array(
     62                                'url' => $url,
     63                                'width' => $data['width'],
     64                                'height' => $data['height'],
     65                                'author_screen_name' => $screen_name,
     66                                'author_name' => $name,
     67                                'author_url' => $data['author_url'],
     68                                'author_thumbnail' => '',
     69                                'content' => $content,
     70                                'published' => $date,
     71                                'need_emoji' => ($need_emoji?' ':''),
     72                        );
     73
     74                        $links = extraire_balises($xml, 'link');
     75                        foreach ($links as $link) {
     76                                if (extraire_attribut($link, 'rel') === 'avatar') {
     77                                        $contexte['author_thumbnail'] = extraire_attribut($link, 'href');
     78                                        $contexte['author_thumbnail_width'] = extraire_attribut($link, 'media:width');
     79                                        $contexte['author_thumbnail_height'] = extraire_attribut($link, 'media:height');
     80                                }
    3681                        }
    3782
    38                         if ($texte and $date_link) {
    39                                 $html = "<blockquote class=\"twitter-tweet\">".$texte."\n&mdash; ".$data['author_name'];
    40                                 $author_account = explode('/users/', $data['author_url']);
    41                                 $a = "@".end($author_account)."@".trim(protocole_implicite(reset($author_account)),'/');
    42                                 $html .= " ($a) $date_link\n</blockquote>";
    43 
    44                                 $data['html'] = $html;
    45                                 $data['height'] = null;
    46                         }
     83                        $data['html'] = recuperer_fond('modeles/toot', $contexte);
    4784                }
    48 
    4985
    5086        }
  • _plugins_/oembed/paquet.xml

    r103884 r103977  
    22        prefix="oembed"
    33        categorie="multimedia"
    4         version="1.7.0"
     4        version="1.8.0"
    55        etat="stable"
    66        compatibilite="[3.0.0;3.2.*]"
Note: See TracChangeset for help on using the changeset viewer.