~xibo-maintainers/xibo/tempel

« back to all changes in this revision

Viewing changes to server/modules/3rdparty/twitter-oauth/twitteroauth.php

  • Committer: Dan Garner
  • Date: 2015-01-15 14:26:07 UTC
  • Revision ID: git-v1:0bf2226a1e1e343100602a625c79b0b71a23593d
Migrated from BZR and moved files to root folder.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<?php
2
 
 
3
 
/*
4
 
 * Abraham Williams (abraham@abrah.am) http://abrah.am
5
 
 *
6
 
 * The first PHP Library to support TwitterOAuth for Twitter's REST API.
7
 
 */
8
 
 
9
 
/* Load TwitterOAuth lib. You can find it at http://Twitteroauth.net */
10
 
require_once('OAuth.php');
11
 
 
12
 
/**
13
 
 * Twitter TwitterOAuth class
14
 
 */
15
 
class TwitterOAuth {
16
 
  /* Contains the last HTTP status code returned. */
17
 
  public $http_code;
18
 
  /* Contains the last API call. */
19
 
  public $url;
20
 
  /* Set up the API root URL. */
21
 
  public $host = "https://api.twitter.com/1.1/";
22
 
  /* Set timeout default. */
23
 
  public $timeout = 30;
24
 
  /* Set connect timeout. */
25
 
  public $connecttimeout = 30; 
26
 
  /* Verify SSL Cert. */
27
 
  public $ssl_verifypeer = FALSE;
28
 
  /* Respons format. */
29
 
  public $format = 'json';
30
 
  /* Decode returned json data. */
31
 
  public $decode_json = TRUE;
32
 
  /* Contains the last HTTP headers returned. */
33
 
  public $http_info;
34
 
  /* Set the useragnet. */
35
 
  public $useragent = 'TwitterOAuth v0.2.0-beta2';
36
 
  /* Immediately retry the API call if the response was not successful. */
37
 
  //public $retry = TRUE;
38
 
 
39
 
 
40
 
 
41
 
 
42
 
  /**
43
 
   * Set API URLS
44
 
   */
45
 
  function accessTokenURL()  { return 'https://api.twitter.com/oauth/access_token'; }
46
 
  function authenticateURL() { return 'https://api.twitter.com/oauth/authenticate'; }
47
 
  function authorizeURL()    { return 'https://api.twitter.com/oauth/authorize'; }
48
 
  function requestTokenURL() { return 'https://api.twitter.com/oauth/request_token'; }
49
 
 
50
 
  /**
51
 
   * Debug helpers
52
 
   */
53
 
  function lastStatusCode() { return $this->http_status; }
54
 
  function lastAPICall() { return $this->last_api_call; }
55
 
 
56
 
  /**
57
 
   * construct TwitterTwitterOAuth object
58
 
   */
59
 
  function __construct($consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) {
60
 
    $this->sha1_method = new TwitterOAuthSignatureMethod_HMAC_SHA1();
61
 
    $this->consumer = new TwitterOAuthConsumer($consumer_key, $consumer_secret);
62
 
    if (!empty($oauth_token) && !empty($oauth_token_secret)) {
63
 
      $this->token = new TwitterOAuthConsumer($oauth_token, $oauth_token_secret);
64
 
    } else {
65
 
      $this->token = NULL;
66
 
    }
67
 
  }
68
 
 
69
 
 
70
 
  /**
71
 
   * Get a request_token from Twitter
72
 
   *
73
 
   * @returns a key/value array containing oauth_token and oauth_token_secret
74
 
   */
75
 
  function getRequestToken($oauth_callback) {
76
 
    $parameters = array();
77
 
    $parameters['oauth_callback'] = $oauth_callback; 
78
 
    $request = $this->TwitteroAuthRequest($this->requestTokenURL(), 'GET', $parameters);
79
 
    $token = TwitterOAuthUtil::parse_parameters($request);
80
 
    Debug::Audit(var_export($token, true));
81
 
    $this->token = new TwitterOAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
82
 
    return $token;
83
 
  }
84
 
 
85
 
  /**
86
 
   * Get the authorize URL
87
 
   *
88
 
   * @returns a string
89
 
   */
90
 
  function getAuthorizeURL($token, $sign_in_with_twitter = TRUE) {
91
 
    if (is_array($token)) {
92
 
      $token = $token['oauth_token'];
93
 
    }
94
 
    if (empty($sign_in_with_twitter)) {
95
 
      return $this->authorizeURL() . "?oauth_token={$token}";
96
 
    } else {
97
 
       return $this->authenticateURL() . "?oauth_token={$token}";
98
 
    }
99
 
  }
100
 
 
101
 
  /**
102
 
   * Exchange request token and secret for an access token and
103
 
   * secret, to sign API calls.
104
 
   *
105
 
   * @returns array("oauth_token" => "the-access-token",
106
 
   *                "oauth_token_secret" => "the-access-secret",
107
 
   *                "user_id" => "9436992",
108
 
   *                "screen_name" => "abraham")
109
 
   */
110
 
  function getAccessToken($Twitteroauth_verifier) {
111
 
    $parameters = array();
112
 
    $parameters['oauth_verifier'] = $Twitteroauth_verifier;
113
 
    $request = $this->TwitteroAuthRequest($this->accessTokenURL(), 'GET', $parameters);
114
 
    $token = TwitterOAuthUtil::parse_parameters($request);
115
 
    Debug::Audit(var_export($token, true));
116
 
    $this->token = new TwitterOAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
117
 
    return $token;
118
 
  }
119
 
 
120
 
  /**
121
 
   * One time exchange of username and password for access token and secret.
122
 
   *
123
 
   * @returns array("oauth_token" => "the-access-token",
124
 
   *                "oauth_token_secret" => "the-access-secret",
125
 
   *                "user_id" => "9436992",
126
 
   *                "screen_name" => "abraham",
127
 
   *                "x_auth_expires" => "0")
128
 
   */  
129
 
  function getXAuthToken($username, $password) {
130
 
    $parameters = array();
131
 
    $parameters['x_auth_username'] = $username;
132
 
    $parameters['x_auth_password'] = $password;
133
 
    $parameters['x_auth_mode'] = 'client_auth';
134
 
    $request = $this->TwitteroAuthRequest($this->accessTokenURL(), 'POST', $parameters);
135
 
    $token = TwitterOAuthUtil::parse_parameters($request);
136
 
    $this->token = new TwitterOAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
137
 
    return $token;
138
 
  }
139
 
 
140
 
  /**
141
 
   * GET wrapper for TwitteroAuthRequest.
142
 
   */
143
 
  function get($url, $parameters = array()) {
144
 
    $response = $this->TwitteroAuthRequest($url, 'GET', $parameters);
145
 
    if ($this->format === 'json' && $this->decode_json) {
146
 
      return json_decode($response);
147
 
    }
148
 
    return $response;
149
 
  }
150
 
  
151
 
  /**
152
 
   * POST wrapper for TwitteroAuthRequest.
153
 
   */
154
 
  function post($url, $parameters = array()) {
155
 
    $response = $this->TwitteroAuthRequest($url, 'POST', $parameters);
156
 
    if ($this->format === 'json' && $this->decode_json) {
157
 
      return json_decode($response);
158
 
    }
159
 
    return $response;
160
 
  }
161
 
 
162
 
  /**
163
 
   * DELETE wrapper for TwitteroAuthReqeust.
164
 
   */
165
 
  function delete($url, $parameters = array()) {
166
 
    $response = $this->TwitteroAuthRequest($url, 'DELETE', $parameters);
167
 
    if ($this->format === 'json' && $this->decode_json) {
168
 
      return json_decode($response);
169
 
    }
170
 
    return $response;
171
 
  }
172
 
 
173
 
  /**
174
 
   * Format and sign an TwitterOAuth / API request
175
 
   */
176
 
  function TwitteroAuthRequest($url, $method, $parameters) {
177
 
    if (strrpos($url, 'https://') !== 0 && strrpos($url, 'http://') !== 0) {
178
 
      $url = "{$this->host}{$url}.{$this->format}";
179
 
    }
180
 
    $request = TwitterOAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $parameters);
181
 
    $request->sign_request($this->sha1_method, $this->consumer, $this->token);
182
 
    switch ($method) {
183
 
    case 'GET':
184
 
      return $this->http($request->to_url(), 'GET');
185
 
    default:
186
 
      return $this->http($request->get_normalized_http_url(), $method, $request->to_postdata());
187
 
    }
188
 
  }
189
 
 
190
 
  /**
191
 
   * Make an HTTP request
192
 
   *
193
 
   * @return API results
194
 
   */
195
 
  function http($url, $method, $postfields = NULL) {
196
 
    $this->http_info = array();
197
 
    $ci = curl_init();
198
 
    /* Curl settings */
199
 
    curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent);
200
 
    curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);
201
 
    curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);
202
 
    curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
203
 
    curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:'));
204
 
    curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);
205
 
    curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader'));
206
 
    curl_setopt($ci, CURLOPT_HEADER, FALSE);
207
 
 
208
 
    switch ($method) {
209
 
      case 'POST':
210
 
        curl_setopt($ci, CURLOPT_POST, TRUE);
211
 
        if (!empty($postfields)) {
212
 
          curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
213
 
        }
214
 
        break;
215
 
      case 'DELETE':
216
 
        curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');
217
 
        if (!empty($postfields)) {
218
 
          $url = "{$url}?{$postfields}";
219
 
        }
220
 
    }
221
 
 
222
 
    curl_setopt($ci, CURLOPT_URL, $url);
223
 
    $response = curl_exec($ci);
224
 
    $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
225
 
    $this->http_info = array_merge($this->http_info, curl_getinfo($ci));
226
 
    $this->url = $url;
227
 
    curl_close ($ci);
228
 
    return $response;
229
 
  }
230
 
 
231
 
  /**
232
 
   * Get the header info to store.
233
 
   */
234
 
  function getHeader($ch, $header) {
235
 
    $i = strpos($header, ':');
236
 
    if (!empty($i)) {
237
 
      $key = str_replace('-', '_', strtolower(substr($header, 0, $i)));
238
 
      $value = trim(substr($header, $i + 2));
239
 
      $this->http_header[$key] = $value;
240
 
    }
241
 
    return strlen($header);
242
 
  }
243
 
}