source: spip-zone/_plugins_/seenthis/inc/seenthis.php @ 45990

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

ajout d'une methode ->read(id) pour aller chercher un message ; ->read() va chercher le dernier message du ->feed() ; introduction d'une methode ->numeric() pour pouvoir demander indifferemment ->read('message:1234') ou ->read(1234)

File size: 3.8 KB
Line 
1<?php
2
3## a definir dans mes_options (ou cfg)
4# define('_SEENTHIS_LOGIN', 'xxx');
5# define('_SEENTHIS_PASS', 'xxx');
6
7
8// (c) Fil base sur le code d'ARNO* / Seenthis.net 2011
9// Licence LGPL / MIT (je suppose)
10
11class Seenthis {
12        var $login=null;
13        var $pass=null;
14        var $post_url; # URL de l'API
15
16        function Seenthis($login=null, $pass=null) {
17
18                if (!is_null($login))
19                        $this->login = $login;
20                else
21                        $this->login = _SEENTHIS_LOGIN;
22
23                if (!is_null($pass))
24                        $this->pass = $pass;
25                else
26                        $this->pass = _SEENTHIS_PASS;
27
28                $this->post_url = "https://seenthis.net/api/";
29        }
30
31        function create_message($titre, $link, $quote, $comment, $tags) {
32                $ret = "";
33                if (strlen($titre) > 0) $ret .= "$titre\n";
34                if (strlen($link) > 0) $ret .= "$link\n";
35                $ret .= "\n";
36       
37                if (strlen($quote) > 0) $ret .= "❝".$quote."❞\n\n";
38                if (strlen($comment) > 0) $ret .= "$comment\n";
39       
40                if (!is_array($tags)) {
41                        $tags = explode(" ", $tags);
42                }
43                foreach($tags as $tag) {
44                        $tag = trim($tag);
45                        $tag = preg_replace(",^#,", "", $tag);
46                        if (strlen($tag) > 0) {
47                                $l .= "#$tag ";
48                        }
49                }
50                if (strlen($l) > 0) $ret .= "\n$l\n";
51               
52                return $ret;
53        }
54       
55       
56        function create_xml($message, $id=null, $inreplyto=null) {
57
58                $xml = "<?xml version='1.0' encoding='UTF-8'?>\n"
59                                ."<entry xmlns='http://www.w3.org/2005/Atom' xmlns:thr='http://purl.org/syndication/thread/1.0'>\n";
60
61                if ($id = $this->numeric($id))
62                        $xml .= "<id>message:$id</id>\n";
63
64                $xml .= "<summary><![CDATA[".trim($message)."]]></summary>\n";
65
66                if ($inreplyto = $this->numeric($inreplyto))
67                        $xml .= "<thr:in-reply-to ref='message:$inreplyto'/>\n";
68
69                $xml .= "</entry>\n";
70       
71                return $xml;
72        }
73       
74        function curl($xml, $method, $uri) {
75                $request = curl_init(); // initiate curl object
76                curl_setopt($request, CURLOPT_URL, $this->post_url.$uri);
77                curl_setopt($request, CURLOPT_SSL_VERIFYPEER, false);
78                curl_setopt($request, CURLOPT_HEADER, 0); // set to 0 to eliminate header info from response
79                curl_setopt($request, CURLOPT_HTTPHEADER, array("Content-Type: application/atom+xml;type=entry"));
80                curl_setopt($request, CURLOPT_CUSTOMREQUEST, $method ); 
81                curl_setopt($request, CURLOPT_RETURNTRANSFER, true );   
82                curl_setopt($request, CURLOPT_USERPWD, $this->login.':'.$this->pass);
83                curl_setopt($request, CURLOPT_POSTFIELDS, "$xml");
84
85                $post_response = curl_exec($request); // execute curl post and store results in $post_response
86                curl_close ($request); // close curl object
87
88                if (is_object($r = new SimpleXmlIterator($post_response))
89                AND !$r->body  # le controle d'erreur n'est pas proprement indique dans la reponse de l'API, on se rabat sur la presence d'un body
90                ) {
91                        $r->xml = $post_response;
92                        unset($r->error);
93                }
94                else {
95                        $r = new stdClass();
96                        $r->xml = $post_response;
97                        $r->error = trim(strip_tags($post_response)); # pas beau
98                        if (!$r->error)
99                                $r->error = "Empty response";
100                }
101
102                return $r;
103        }
104       
105        function read($id = null) {
106                // si on ne précise pas le message, c'est le plus récent de notre feed
107                // sinon c'est le message demandé
108                if (is_null($id)) {
109                        $a = $this->feed();
110                        if (!$a->error) {
111                                $b = $a->entry[0];
112                                $b->xml = (string) $a->xml;
113                                return $b;
114                        }
115                        else
116                                return $a;
117                }
118
119                else
120                        return $this->curl("", 'GET', 'messages/'.$this->numeric($id));
121        }
122
123        function post($message, $inreplyto=null) {
124                $xml = $this->create_xml($message, null, $inreplyto) ;
125                return $this->curl($xml, 'POST', 'messages');
126        }
127       
128        function update($message, $id) {
129                $xml = $this->create_xml($message, $id);
130                return $this->curl($xml, 'PUT', 'messages');
131        }
132
133        function feed($login=null, $pagination=0) {
134                if (!strlen($login))
135                        $login = $this->login;
136                return $this->curl("", 'GET', 'people/'.rawurlencode($login).'/messages/'.$nb);
137        }
138
139
140        // supprimer le 'message:' d'un id
141        private function numeric($id) {
142                if ($id = intval(preg_replace('/^message:/', '', $id)))
143                        return $id;
144        }
145
146} // class Seenthis
147
148
149?>
Note: See TracBrowser for help on using the repository browser.