]> git.mxchange.org Git - quix0rs-gnu-social.git/blob - lib/twitteroauthclient.php
616fbc2134479e49ea725577065535bc168884c3
[quix0rs-gnu-social.git] / lib / twitteroauthclient.php
1 <?php
2
3 require_once('OAuth.php');
4
5 class TwitterOAuthClient
6 {
7     public static $requestTokenURL = 'https://twitter.com/oauth/request_token';
8     public static $authorizeURL    = 'https://twitter.com/oauth/authorize';
9     public static $accessTokenURL  = 'https://twitter.com/oauth/access_token';
10
11     function __construct($oauth_token = null, $oauth_token_secret = null)
12     {
13         $this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1();
14         $consumer_key    = common_config('twitter', 'consumer_key');
15         $consumer_secret = common_config('twitter', 'consumer_secret');
16         $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret);
17         $this->token = null;
18
19         if (isset($oauth_token) && isset($oauth_token_secret)) {
20             $this->token = new OAuthToken($oauth_token, $oauth_token_secret);
21         }
22     }
23
24     function getRequestToken()
25     {
26         $response = $this->oAuthGet(TwitterOAuthClient::$requestTokenURL);
27         parse_str($response);
28         $token = new OAuthToken($oauth_token, $oauth_token_secret);
29         return $token;
30     }
31
32     function getAuthorizeLink($request_token)
33     {
34         // Not sure Twitter actually looks at oauth_callback
35
36         return TwitterOAuthClient::$authorizeURL .
37         '?oauth_token=' . $request_token->key . '&oauth_callback=' .
38         urlencode(common_local_url('twitterauthorization'));
39     }
40
41     function getAccessToken()
42     {
43         $response = $this->oAuthPost(TwitterOAuthClient::$accessTokenURL);
44         parse_str($response);
45         $token = new OAuthToken($oauth_token, $oauth_token_secret);
46         return $token;
47     }
48
49     function verify_credentials()
50     {
51         $url = 'https://twitter.com/account/verify_credentials.json';
52         $response = $this->oAuthGet($url);
53         $twitter_user = json_decode($response);
54         return $twitter_user;
55     }
56
57     function oAuthGet($url)
58     {
59         $request = OAuthRequest::from_consumer_and_token($this->consumer,
60             $this->token, 'GET', $url, null);
61         $request->sign_request($this->sha1_method,
62             $this->consumer, $this->token);
63
64         return $this->httpRequest($request->to_url());
65     }
66
67     function oAuthPost($url, $params = null)
68     {
69         $request = OAuthRequest::from_consumer_and_token($this->consumer,
70             $this->token, 'POST', $url, $params);
71         $request->sign_request($this->sha1_method,
72             $this->consumer, $this->token);
73
74         return $this->httpRequest($request->get_normalized_http_url(),
75             $request->to_postdata());
76     }
77
78     function httpRequest($url, $params = null)
79     {
80         $options = array(
81             CURLOPT_RETURNTRANSFER => true,
82             CURLOPT_FAILONERROR    => true,
83             CURLOPT_HEADER         => false,
84             CURLOPT_FOLLOWLOCATION => true,
85             CURLOPT_USERAGENT      => 'Laconica',
86             CURLOPT_CONNECTTIMEOUT => 120,
87             CURLOPT_TIMEOUT        => 120,
88             CURLOPT_HTTPAUTH       => CURLAUTH_ANY,
89             CURLOPT_SSL_VERIFYPEER => false,
90
91             // Twitter is strict about accepting invalid "Expect" headers
92
93             CURLOPT_HTTPHEADER => array('Expect:')
94             );
95
96             if (isset($params)) {
97                 $options[CURLOPT_POST] = true;
98                 $options[CURLOPT_POSTFIELDS] = $params;
99             }
100
101             $ch = curl_init($url);
102             curl_setopt_array($ch, $options);
103             $response = curl_exec($ch);
104             curl_close($ch);
105
106             return $response;
107     }
108
109 }