annotate default/assets/vendors/theme-widgets/vendor/abraham/twitteroauth/src/TwitterOAuth.php @ 0:1d038bc9b3d2 default tip

Up:default
author Liny <dev@neowd.com>
date Sat, 31 May 2025 09:21:51 +0800
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1 <?php
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
2 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
3 * The most popular PHP library for use with the Twitter OAuth REST API.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
4 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
5 * @license MIT
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
6 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
7 namespace Abraham\TwitterOAuth;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
8
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
9 use Abraham\TwitterOAuth\Util\JsonDecoder;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
10
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
11 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
12 * TwitterOAuth class for interacting with the Twitter API.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
13 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
14 * @author Abraham Williams <[email protected]>
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
15 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
16 class TwitterOAuth extends Config
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
17 {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
18 const API_VERSION = '1.1';
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
19 const API_HOST = 'https://api.twitter.com';
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
20 const UPLOAD_HOST = 'https://upload.twitter.com';
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
21 const UPLOAD_CHUNK = 40960; // 1024 * 40
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
22
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
23 /** @var Response details about the result of the last request */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
24 private $response;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
25 /** @var string|null Application bearer token */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
26 private $bearer;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
27 /** @var Consumer Twitter application details */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
28 private $consumer;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
29 /** @var Token|null User access token details */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
30 private $token;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
31 /** @var HmacSha1 OAuth 1 signature type used by Twitter */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
32 private $signatureMethod;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
33
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
34 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
35 * Constructor
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
36 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
37 * @param string $consumerKey The Application Consumer Key
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
38 * @param string $consumerSecret The Application Consumer Secret
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
39 * @param string|null $oauthToken The Client Token (optional)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
40 * @param string|null $oauthTokenSecret The Client Token Secret (optional)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
41 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
42 public function __construct($consumerKey, $consumerSecret, $oauthToken = null, $oauthTokenSecret = null)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
43 {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
44 $this->resetLastResponse();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
45 $this->signatureMethod = new HmacSha1();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
46 $this->consumer = new Consumer($consumerKey, $consumerSecret);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
47 if (!empty($oauthToken) && !empty($oauthTokenSecret)) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
48 $this->token = new Token($oauthToken, $oauthTokenSecret);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
49 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
50 if (empty($oauthToken) && !empty($oauthTokenSecret)) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
51 $this->bearer = $oauthTokenSecret;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
52 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
53 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
54
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
55 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
56 * @param string $oauthToken
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
57 * @param string $oauthTokenSecret
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
58 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
59 public function setOauthToken($oauthToken, $oauthTokenSecret)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
60 {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
61 $this->token = new Token($oauthToken, $oauthTokenSecret);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
62 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
63
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
64 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
65 * @return string|null
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
66 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
67 public function getLastApiPath()
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
68 {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
69 return $this->response->getApiPath();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
70 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
71
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
72 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
73 * @return int
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
74 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
75 public function getLastHttpCode()
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
76 {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
77 return $this->response->getHttpCode();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
78 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
79
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
80 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
81 * @return array
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
82 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
83 public function getLastXHeaders()
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
84 {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
85 return $this->response->getXHeaders();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
86 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
87
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
88 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
89 * @return array|object|null
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
90 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
91 public function getLastBody()
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
92 {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
93 return $this->response->getBody();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
94 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
95
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
96 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
97 * Resets the last response cache.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
98 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
99 public function resetLastResponse()
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
100 {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
101 $this->response = new Response();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
102 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
103
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
104 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
105 * Make URLs for user browser navigation.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
106 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
107 * @param string $path
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
108 * @param array $parameters
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
109 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
110 * @return string
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
111 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
112 public function url($path, array $parameters)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
113 {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
114 $this->resetLastResponse();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
115 $this->response->setApiPath($path);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
116 $query = http_build_query($parameters);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
117 return sprintf('%s/%s?%s', self::API_HOST, $path, $query);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
118 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
119
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
120 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
121 * Make /oauth/* requests to the API.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
122 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
123 * @param string $path
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
124 * @param array $parameters
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
125 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
126 * @return array
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
127 * @throws TwitterOAuthException
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
128 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
129 public function oauth($path, array $parameters = [])
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
130 {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
131 $response = [];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
132 $this->resetLastResponse();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
133 $this->response->setApiPath($path);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
134 $url = sprintf('%s/%s', self::API_HOST, $path);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
135 $result = $this->oAuthRequest($url, 'POST', $parameters);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
136
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
137 if ($this->getLastHttpCode() != 200) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
138 throw new TwitterOAuthException($result);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
139 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
140
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
141 parse_str($result, $response);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
142 $this->response->setBody($response);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
143
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
144 return $response;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
145 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
146
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
147 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
148 * Make /oauth2/* requests to the API.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
149 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
150 * @param string $path
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
151 * @param array $parameters
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
152 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
153 * @return array|object
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
154 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
155 public function oauth2($path, array $parameters = [])
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
156 {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
157 $method = 'POST';
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
158 $this->resetLastResponse();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
159 $this->response->setApiPath($path);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
160 $url = sprintf('%s/%s', self::API_HOST, $path);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
161 $request = Request::fromConsumerAndToken($this->consumer, $this->token, $method, $url, $parameters);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
162 $authorization = 'Authorization: Basic ' . $this->encodeAppAuthorization($this->consumer);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
163 $result = $this->request($request->getNormalizedHttpUrl(), $method, $authorization, $parameters);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
164 $response = JsonDecoder::decode($result, $this->decodeJsonAsArray);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
165 $this->response->setBody($response);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
166 return $response;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
167 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
168
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
169 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
170 * Make GET requests to the API.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
171 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
172 * @param string $path
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
173 * @param array $parameters
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
174 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
175 * @return array|object
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
176 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
177 public function get($path, array $parameters = [])
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
178 {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
179 return $this->http('GET', self::API_HOST, $path, $parameters);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
180 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
181
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
182 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
183 * Make POST requests to the API.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
184 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
185 * @param string $path
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
186 * @param array $parameters
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
187 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
188 * @return array|object
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
189 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
190 public function post($path, array $parameters = [])
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
191 {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
192 return $this->http('POST', self::API_HOST, $path, $parameters);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
193 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
194
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
195 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
196 * Make DELETE requests to the API.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
197 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
198 * @param string $path
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
199 * @param array $parameters
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
200 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
201 * @return array|object
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
202 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
203 public function delete($path, array $parameters = [])
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
204 {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
205 return $this->http('DELETE', self::API_HOST, $path, $parameters);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
206 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
207
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
208 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
209 * Make PUT requests to the API.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
210 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
211 * @param string $path
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
212 * @param array $parameters
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
213 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
214 * @return array|object
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
215 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
216 public function put($path, array $parameters = [])
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
217 {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
218 return $this->http('PUT', self::API_HOST, $path, $parameters);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
219 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
220
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
221 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
222 * Upload media to upload.twitter.com.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
223 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
224 * @param string $path
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
225 * @param array $parameters
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
226 * @param boolean $chunked
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
227 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
228 * @return array|object
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
229 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
230 public function upload($path, array $parameters = [], $chunked = false)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
231 {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
232 if ($chunked) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
233 return $this->uploadMediaChunked($path, $parameters);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
234 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
235 return $this->uploadMediaNotChunked($path, $parameters);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
236 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
237 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
238
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
239 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
240 * Private method to upload media (not chunked) to upload.twitter.com.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
241 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
242 * @param string $path
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
243 * @param array $parameters
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
244 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
245 * @return array|object
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
246 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
247 private function uploadMediaNotChunked($path, array $parameters)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
248 {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
249 $file = file_get_contents($parameters['media']);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
250 $base = base64_encode($file);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
251 $parameters['media'] = $base;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
252 return $this->http('POST', self::UPLOAD_HOST, $path, $parameters);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
253 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
254
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
255 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
256 * Private method to upload media (chunked) to upload.twitter.com.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
257 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
258 * @param string $path
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
259 * @param array $parameters
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
260 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
261 * @return array|object
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
262 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
263 private function uploadMediaChunked($path, array $parameters)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
264 {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
265 // Init
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
266 $init = $this->http('POST', self::UPLOAD_HOST, $path, [
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
267 'command' => 'INIT',
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
268 'media_type' => $parameters['media_type'],
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
269 'total_bytes' => filesize($parameters['media'])
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
270 ]);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
271 // Append
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
272 $segment_index = 0;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
273 $media = fopen($parameters['media'], 'rb');
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
274 while (!feof($media))
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
275 {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
276 $this->http('POST', self::UPLOAD_HOST, 'media/upload', [
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
277 'command' => 'APPEND',
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
278 'media_id' => $init->media_id_string,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
279 'segment_index' => $segment_index++,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
280 'media_data' => base64_encode(fread($media, self::UPLOAD_CHUNK))
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
281 ]);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
282 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
283 fclose($media);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
284 // Finalize
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
285 $finalize = $this->http('POST', self::UPLOAD_HOST, 'media/upload', [
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
286 'command' => 'FINALIZE',
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
287 'media_id' => $init->media_id_string
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
288 ]);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
289 return $finalize;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
290 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
291
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
292 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
293 * @param string $method
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
294 * @param string $host
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
295 * @param string $path
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
296 * @param array $parameters
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
297 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
298 * @return array|object
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
299 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
300 private function http($method, $host, $path, array $parameters)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
301 {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
302 $this->resetLastResponse();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
303 $url = sprintf('%s/%s/%s.json', $host, self::API_VERSION, $path);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
304 $this->response->setApiPath($path);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
305 $result = $this->oAuthRequest($url, $method, $parameters);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
306 $response = JsonDecoder::decode($result, $this->decodeJsonAsArray);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
307 $this->response->setBody($response);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
308 return $response;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
309 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
310
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
311 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
312 * Format and sign an OAuth / API request
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
313 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
314 * @param string $url
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
315 * @param string $method
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
316 * @param array $parameters
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
317 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
318 * @return string
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
319 * @throws TwitterOAuthException
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
320 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
321 private function oAuthRequest($url, $method, array $parameters)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
322 {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
323 $request = Request::fromConsumerAndToken($this->consumer, $this->token, $method, $url, $parameters);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
324 if (array_key_exists('oauth_callback', $parameters)) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
325 // Twitter doesn't like oauth_callback as a parameter.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
326 unset($parameters['oauth_callback']);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
327 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
328 if ($this->bearer === null) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
329 $request->signRequest($this->signatureMethod, $this->consumer, $this->token);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
330 $authorization = $request->toHeader();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
331 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
332 $authorization = 'Authorization: Bearer ' . $this->bearer;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
333 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
334 return $this->request($request->getNormalizedHttpUrl(), $method, $authorization, $parameters);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
335 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
336
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
337 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
338 * Make an HTTP request
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
339 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
340 * @param string $url
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
341 * @param string $method
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
342 * @param string $authorization
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
343 * @param array $postfields
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
344 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
345 * @return string
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
346 * @throws TwitterOAuthException
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
347 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
348 private function request($url, $method, $authorization, array $postfields)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
349 {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
350 /* Curl settings */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
351 $options = [
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
352 // CURLOPT_VERBOSE => true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
353 CURLOPT_CAINFO => __DIR__ . DIRECTORY_SEPARATOR . 'cacert.pem',
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
354 CURLOPT_CONNECTTIMEOUT => $this->connectionTimeout,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
355 CURLOPT_HEADER => true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
356 CURLOPT_HTTPHEADER => ['Accept: application/json', $authorization, 'Expect:'],
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
357 CURLOPT_RETURNTRANSFER => true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
358 CURLOPT_SSL_VERIFYHOST => 2,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
359 CURLOPT_SSL_VERIFYPEER => true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
360 CURLOPT_TIMEOUT => $this->timeout,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
361 CURLOPT_URL => $url,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
362 CURLOPT_USERAGENT => $this->userAgent,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
363 ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
364
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
365 /* Remove CACert file when in a PHAR file. */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
366 if ($this->pharRunning()) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
367 unset($options[CURLOPT_CAINFO]);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
368 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
369
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
370 if($this->gzipEncoding) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
371 $options[CURLOPT_ENCODING] = 'gzip';
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
372 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
373
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
374 if (!empty($this->proxy)) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
375 $options[CURLOPT_PROXY] = $this->proxy['CURLOPT_PROXY'];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
376 $options[CURLOPT_PROXYUSERPWD] = $this->proxy['CURLOPT_PROXYUSERPWD'];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
377 $options[CURLOPT_PROXYPORT] = $this->proxy['CURLOPT_PROXYPORT'];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
378 $options[CURLOPT_PROXYAUTH] = CURLAUTH_BASIC;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
379 $options[CURLOPT_PROXYTYPE] = CURLPROXY_HTTP;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
380 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
381
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
382 switch ($method) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
383 case 'GET':
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
384 break;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
385 case 'POST':
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
386 $options[CURLOPT_POST] = true;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
387 $options[CURLOPT_POSTFIELDS] = Util::buildHttpQuery($postfields);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
388 break;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
389 case 'DELETE':
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
390 $options[CURLOPT_CUSTOMREQUEST] = 'DELETE';
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
391 break;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
392 case 'PUT':
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
393 $options[CURLOPT_CUSTOMREQUEST] = 'PUT';
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
394 break;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
395 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
396
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
397 if (in_array($method, ['GET', 'PUT', 'DELETE']) && !empty($postfields)) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
398 $options[CURLOPT_URL] .= '?' . Util::buildHttpQuery($postfields);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
399 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
400
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
401
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
402 $curlHandle = curl_init();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
403 curl_setopt_array($curlHandle, $options);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
404 $response = curl_exec($curlHandle);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
405
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
406 // Throw exceptions on cURL errors.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
407 if (curl_errno($curlHandle) > 0) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
408 throw new TwitterOAuthException(curl_error($curlHandle), curl_errno($curlHandle));
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
409 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
410
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
411 $this->response->setHttpCode(curl_getinfo($curlHandle, CURLINFO_HTTP_CODE));
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
412 $parts = explode("\r\n\r\n", $response);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
413 $responseBody = array_pop($parts);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
414 $responseHeader = array_pop($parts);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
415 $this->response->setHeaders($this->parseHeaders($responseHeader));
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
416
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
417 curl_close($curlHandle);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
418
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
419 return $responseBody;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
420 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
421
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
422 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
423 * Get the header info to store.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
424 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
425 * @param string $header
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
426 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
427 * @return array
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
428 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
429 private function parseHeaders($header)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
430 {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
431 $headers = [];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
432 foreach (explode("\r\n", $header) as $line) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
433 if (strpos($line, ':') !== false) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
434 list ($key, $value) = explode(': ', $line);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
435 $key = str_replace('-', '_', strtolower($key));
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
436 $headers[$key] = trim($value);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
437 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
438 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
439 return $headers;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
440 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
441
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
442 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
443 * Encode application authorization header with base64.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
444 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
445 * @param Consumer $consumer
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
446 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
447 * @return string
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
448 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
449 private function encodeAppAuthorization(Consumer $consumer)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
450 {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
451 $key = rawurlencode($consumer->key);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
452 $secret = rawurlencode($consumer->secret);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
453 return base64_encode($key . ':' . $secret);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
454 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
455
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
456 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
457 * Is the code running from a Phar module.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
458 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
459 * @return boolean
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
460 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
461 private function pharRunning()
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
462 {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
463 return class_exists('Phar') && \Phar::running(false) !== '';
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
464 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
465 }