source: spip-zone/_plugins_/oembed/action/oeproxy_twitter.php @ 54489

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

oEmbed peut accepter un endpoint en url relative, implicite au site lui meme : Dans ce cas l'url est passee en absolue pour le site public.
Cela permet d'utiliser une action comme proxy pour un service qui ne sert pas oEmbed mais sa propre soupe :
exemple d'application avec twitter que l'on peut embed directement dans son texte.
Un lien vers un tweet est automatiquement insere dans le texte !

File size: 3.0 KB
Line 
1<?php
2/**
3 * Plugin oEmbed
4 * Licence GPL3
5 *
6 */
7
8if (!defined('_ECRIRE_INC_VERSION')) return;
9
10/**
11 * Proxy twitter pour transformer l'api json en oEmbed
12 * http://planetozh.com/blog/2010/05/how-to-embed-a-tweet-in-wordpress-a-complete-oembed-tutorial/
13 * Handle the oEmbed requests
14 * The oEmbed request is something like:
15 * yourblog.com/?action=oeproxy_twitter&url=http://twitter.com/ozh/statuses/123456&...
16 *
17 * ne supporte que le format json pour le moment
18 *
19 * @return void
20 */
21function action_oeproxy_twitter_dist(){
22
23        $url = _request('url');
24        if(!$url
25          OR !preg_match( ',https?://twitter.com/(?:#!/)?([^/#]+)/status(?:es)?/(\d+),i', $url, $matches ))
26                die('Erreur : URL manquante ou incorrecte');
27
28        if (_request('format')=='xml')
29                die('Erreur : format xml non supporte');
30
31        $author  = $matches[1];
32        $tweetid = $matches[2];
33        unset($matches);
34
35        // From this point, we fetch content from Twitter and print a JSON string.
36        // If something goes wrong (like, Twitter unreachable) then we'll simply print anything but JSON
37        // and let oEmbed handle the response.
38        // fetch http://api.twitter.com/1/statuses/show/$tweet.json
39        $apiurl = 'http://api.twitter.com/1/statuses/show/'.$tweetid.'.json';
40        include_spip('inc/distant');
41        if (!$result = recuperer_page($apiurl))
42                die( "could not fetch $apiurl" );
43
44        // Check that JSON is well formed
45        $result = trim($result);
46        if (!$data = json_decode($result))
47                die( "Data was not JSON" );
48        #var_dump($data);
49        // Now extract a few variables from the $data object
50        #$created_at = date('d M Y g:i a', strtotime( $data->created_at ) );
51
52        $text = $data->text;
53        include_spip('inc/lien');
54        include_spip('inc/filtres');
55        include_spip('inc/texte');
56        if (function_exists('traiter_raccourci_liens'))
57                $text = traiter_raccourci_liens($text);
58
59        // linker les hashtags
60        $text = preg_replace(",(#\w+),","<a href='http://twitter.com/search?q=\\1'>\\1</a>",$text);
61        // linker les users
62        $text = preg_replace(",@(\w+),","<a href='http://twitter.com/\\1'>@\\1</a>",$text);
63
64        $contexte = array(
65                'url' => $url,
66                'text' => $text,
67                'created_at' => date('Y-m-d H:i:s',strtotime($data->created_at)),
68                'source' => $data->source,
69                'in_reply_to_screen_name' => $data->in_reply_to_screen_name,
70                'in_reply_to_status_id' => $data->in_reply_to_status_id_str,
71                'in_reply_to_user_id' => $data->in_reply_to_user_id_str,
72                'screen_name' => $data->user->screen_name,
73                'profile_image' => $data->user->profile_image_url,
74                'name' => $data->user->name
75        );
76
77        // Put everything into a regular array
78        $json = array(
79                'version' => '1.0',
80                'type'  => 'rich',
81                'width'   => 1337, // this parameter is mandatory according to the oEmbed specs, but we're not using it
82                'height'  => 1337, // same.
83                // Make up some HTML with the tweet info
84                'html'  => trim(recuperer_fond('modeles/oeproxy_twitter',$contexte)),
85        );
86
87        // Now output a JSON response
88        header('Cache-Control: no-cache, must-revalidate');
89        header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
90        header('Content-type: application/json');
91        #header('Content-Disposition: attachment; filename="oembed.json"');
92        echo json_encode( $json );
93        exit;
94}
Note: See TracBrowser for help on using the repository browser.