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

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

ajout de la methode ->feed(login, pagination) pour recuperer le flux d'un auteur ; meilleur controle d'erreur (sachant que l'API renvoie un HTML pourrave en cas d'erreur)

File size: 3.2 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_me=0, $inreplyto=0) {
57                $xml = "<?xml version='1.0' encoding='UTF-8'?>\n"
58                                ."<entry xmlns='http://www.w3.org/2005/Atom' xmlns:thr='http://purl.org/syndication/thread/1.0'>\n";
59                if ($id_me) $xml .= "<id>$id_me</id>\n";
60                $xml .= "<summary><![CDATA[".trim($message)."]]></summary>\n";
61                if ($inreplyto) $xml .= "<thr:in-reply-to ref='$inreplyto'/>\n";
62                $xml .= "</entry>\n";
63       
64                return $xml;
65        }
66       
67        function curl($xml, $method, $uri) {
68                $request = curl_init(); // initiate curl object
69                curl_setopt($request, CURLOPT_URL, $this->post_url.$uri);
70                curl_setopt($request, CURLOPT_SSL_VERIFYPEER, false);
71                curl_setopt($request, CURLOPT_HEADER, 0); // set to 0 to eliminate header info from response
72                curl_setopt($request, CURLOPT_HTTPHEADER, array("Content-Type: application/atom+xml;type=entry"));
73                curl_setopt($request, CURLOPT_CUSTOMREQUEST, $method ); 
74                curl_setopt($request, CURLOPT_RETURNTRANSFER, true );   
75                curl_setopt($request, CURLOPT_USERPWD, $this->login.':'.$this->pass);
76                curl_setopt($request, CURLOPT_POSTFIELDS, "$xml");
77               
78                $post_response = curl_exec($request); // execute curl post and store results in $post_response
79                curl_close ($request); // close curl object
80
81                if (is_object($r = new SimpleXmlIterator($post_response))
82                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
83                ) {
84                        $r->xml = $post_response;
85                        unset($r->error);
86                }
87                else {
88                        $r = new stdClass();
89                        $r->xml = $post_response;
90                        $r->error = trim(strip_tags($post_response)); # pas beau
91                        if (!$r->error)
92                                $r->error = "Empty response";
93                }
94
95                return $r;
96        }
97       
98        function post($message, $inreplyto=0) {
99                $xml = $this->create_xml($message, 0, $inreplyto) ;
100                return $this->curl($xml, 'POST', 'messages');
101        }
102       
103        function update($message, $me) {
104                $xml = $this->create_xml($message, $me);
105                return $this->curl($xml, 'PUT', 'messages');
106        }
107
108        function feed($login=null, $pagination=0) {
109                if (!strlen($login))
110                        $login = $this->login;
111                return $this->curl("", 'GET', 'people/'.$login.'/messages/'.$nb);
112        }
113
114
115} // class Seenthis
116
117
118?>
Note: See TracBrowser for help on using the repository browser.