source: spip-zone/_plugins_/microblog/inc/microblog.php @ 41682

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

des log, la bonne icone dans le panneau d'admin, et ne noter l'anti begaiement qu'en cas de succes !

File size: 4.5 KB
Line 
1<?php
2/**
3 * Plugin spip|microblog
4 * (c) Fil 2009-2010
5 *
6 * envoyer des micromessages depuis SPIP vers twitter ou laconica
7 * distribue sous licence GNU/LGPL
8 *
9 */
10
11if (!defined("_ECRIRE_INC_VERSION")) return;
12
13
14/**
15 * Envoyer un microblog sur une des plateformes disponibles
16 *
17 * $status : ce qu'on veut ecrire
18 * $user, $pass : identifiants
19 * $service : quel service
20 * $api : si on est vraiment desespere :-)
21 */
22function microblog($status, $user=null, $pass=null, $service=null, $api=null){
23        $cfg = @unserialize($GLOBALS['meta']['microblog']);
24
25        // Certains define prennent le pas sur le reste (mode TEST)
26        if (defined('_TEST_MICROBLOG_SERVICE')) {
27                if (_TEST_MICROBLOG_SERVICE == '') {
28                        spip_log('microblog desactive par _TEST_MICROBLOG_SERVICE');
29                        return false;
30                }
31                else
32                        $service = _TEST_MICROBLOG_SERVICE;
33        }
34        if (defined('_TEST_MICROBLOG_USER')) $user = _TEST_MICROBLOG_USER;
35        if (defined('_TEST_MICROBLOG_PASS')) $pass = _TEST_MICROBLOG_PASS;
36
37
38        // services connus
39        $apis = array(
40                'spipo' => 'http://%user%:%pass%@spip.org/api/statuses/update.xml',
41                'identica' => 'http://%user%:%pass%@identi.ca/api/statuses/update.xml',
42                'twitter' => 'http://twitter.com/statuses/update.xml',
43                'supertweet' => 'http://%user%:%pass%@api.supertweet.net/statuses/update.xml'
44        );
45
46        // Choix de l'API
47        if (!isset($api)) {
48                if (!isset($service))
49                        $service = $cfg['service'];
50                if (!isset($apis[$service])){
51                        spip_log("Aucune API disponible pour $service",'microblog');
52                        return false;
53                }
54                $api = $apis[$service];
55        }
56       
57        /**
58         * Si l'API utilisée est twitter, on force le passage en oAuth
59         */
60        if($service == 'twitter'){
61                if(
62                        isset($cfg['twitter_consumer_key']) 
63                                && isset($cfg['twitter_consumer_secret'])
64                                && isset($cfg['twitter_token'])
65                                && isset($cfg['twitter_token_secret'])){
66                        // Cas de twitter et oAuth
67                        include_spip('inc/twitteroauth');
68                        $consumer_key = $cfg['twitter_consumer_key'];
69                        $consumer_secret = $cfg['twitter_consumer_secret'];
70
71                        $connection = new TwitterOAuth($consumer_key, $consumer_secret, $cfg['twitter_token'], $cfg['twitter_token_secret']);
72                       
73                        if($connection){
74                                $oAuth = true;
75                        }
76                        else{
77                                spip_log('Erreur de connexion à twitter, verifier la configuration','microblog');
78                                return false;
79                        }
80                }
81                else{
82                        spip_log('Erreur de connexion à twitter, verifier la configuration','microblog');
83                        return false;
84                }
85        }else{
86                if (!isset($user))
87                        $user = $cfg['user'];
88                if (!isset($pass))
89                        $pass = $cfg['pass'];
90
91                // Inserer les credits d'authentification
92                $api = str_replace(array('%user%','%pass%'), array(urlencode($user),urlencode($pass)), $api);
93        }
94       
95        // Preparer le message (utf8 < 140 caracteres)
96        include_spip('inc/charsets');
97        $status = trim(preg_replace(',\s+,', ' ', $status));
98        $status = unicode2charset(charset2unicode($status), 'utf-8');
99        $status = substr($status, 0, 140);
100
101        if (!strlen($status)) {
102                spip_log('Rien a bloguer','microblog');
103                return false;
104        }
105
106        $datas = array('status' => $status);
107
108        // anti-begaiment
109        $begaie = md5("$service $user $status");
110        if ($begaie == $GLOBALS['meta']['microblog_begaie']) {
111                spip_log("begaie $service $user $status", 'microblog');
112                return false;
113        }
114
115        // ping et renvoyer la reponse xml
116        if($oAuth){
117                $ret = 'ok';
118                $api = 'statuses/update';
119                $connection->post($api,$datas);
120                if (200 != $connection->http_code){
121                        spip_log('Erreur '.$connection->http_code,'microblog');
122                        return false;
123                }
124        }else{
125                include_spip('inc/distant');
126                $ret = recuperer_page($api, false, false, null, $datas);
127                spip_log("$service $user $status ".strlen($ret), 'microblog');
128        }
129
130        // noter l'envoi pour ne pas twitter 2 fois de suite la meme chose
131        if ($ret)
132                ecrire_meta('microblog_begaie', $begaie);
133
134        return $ret;
135}
136
137
138/**
139 * Affichage du formulaire de microblog
140 *
141 * @param array $flux
142 * @return array
143 */
144function microblog_affiche_milieu($flux){
145        if ($exec = $flux['args']['exec']
146          AND $exec='articles'
147                AND $id_article = $flux['args']['id_article']
148                AND $cfg = @unserialize($GLOBALS['meta']['microblog'])
149                AND ($cfg['evt_publierarticles'] OR $cfg['evt_proposerarticles'])){
150                $deplie = false;
151                $ids = 'formulaire_editer_microblog-article-' . $id_article;
152                $bouton = bouton_block_depliable(strtoupper(_T('microblog:titre_microblog')), $deplie, $ids);
153                $flux['data'] .= debut_cadre('e', chemin('microblog-24.gif','themes/spip/images/'),'',$bouton, '', '', true);
154                $flux['data'] .= recuperer_fond('prive/editer/microblog', array_merge($_GET, array('objet'=>'article','id_objet'=>$id_article)));
155                $flux['data'] .= fin_cadre();
156
157        }
158
159        return $flux;
160}
Note: See TracBrowser for help on using the repository browser.