1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace mpyw\Cowitter\Components; |
4
|
|
|
|
5
|
|
|
use mpyw\Cowitter\Helpers\RequestParamValidator; |
6
|
|
|
use mpyw\Cowitter\Helpers\UrlNormalizer; |
7
|
|
|
|
8
|
|
|
class CurlInitializer |
9
|
|
|
{ |
10
|
|
|
protected $credential; |
11
|
|
|
protected $options; |
12
|
|
|
|
13
|
58 |
|
public function __construct(Credential $credential, array $options) |
14
|
58 |
|
{ |
15
|
58 |
|
$this->credential = $credential; |
16
|
58 |
|
$this->options = $options; |
17
|
58 |
|
} |
18
|
|
|
|
19
|
11 |
|
public function get($endpoint, array $params) |
20
|
11 |
|
{ |
21
|
11 |
|
$ch = curl_init(); |
22
|
11 |
|
list($url, $extra) = UrlNormalizer::twitterSplitUrlAndParameters($endpoint); |
23
|
11 |
|
$params += $extra; |
24
|
11 |
|
$params = RequestParamValidator::validateParams($params); |
25
|
11 |
|
curl_setopt_array($ch, array_replace($this->options, [ |
26
|
11 |
|
CURLOPT_URL => !$params ? $url : $url . '?' . http_build_query($params, '', '&'), |
27
|
11 |
|
CURLOPT_HTTPHEADER => $this->credential->getOAuthHeaders($url, 'GET', $params), |
28
|
11 |
|
CURLOPT_RETURNTRANSFER => true, |
29
|
11 |
|
CURLOPT_HEADER => true, |
30
|
11 |
|
CURLOPT_HTTPGET => true, |
31
|
|
|
])); |
32
|
11 |
|
return $ch; |
33
|
|
|
} |
34
|
|
|
|
35
|
13 |
|
public function post($endpoint, array $params) |
36
|
13 |
|
{ |
37
|
13 |
|
$ch = curl_init(); |
38
|
13 |
|
list($url, $extra) = UrlNormalizer::twitterSplitUrlAndParameters($endpoint); |
39
|
13 |
|
$params += $extra; |
40
|
13 |
|
$params = RequestParamValidator::validateParams($params); |
41
|
13 |
|
curl_setopt_array($ch, array_replace($this->options, [ |
42
|
13 |
|
CURLOPT_URL => $url, |
43
|
13 |
|
CURLOPT_HTTPHEADER => $this->credential->getOAuthHeaders($url, 'POST', $params), |
44
|
13 |
|
CURLOPT_RETURNTRANSFER => true, |
45
|
13 |
|
CURLOPT_HEADER => true, |
46
|
13 |
|
CURLOPT_POST => true, |
47
|
13 |
|
CURLOPT_POSTFIELDS => http_build_query($params, '', '&'), |
48
|
|
|
])); |
49
|
13 |
|
return $ch; |
50
|
|
|
} |
51
|
|
|
|
52
|
9 |
|
public function postMultipart($endpoint, array $params) |
53
|
9 |
|
{ |
54
|
9 |
|
$ch = curl_init(); |
55
|
9 |
|
list($url, $extra) = UrlNormalizer::twitterSplitUrlAndParameters($endpoint); |
56
|
9 |
|
$params += $extra; |
57
|
9 |
|
$params = RequestParamValidator::validateMultipartParams($params); |
58
|
9 |
|
curl_setopt_array($ch, array_replace($this->options, [ |
59
|
9 |
|
CURLOPT_URL => $url, |
60
|
9 |
|
CURLOPT_HTTPHEADER => $this->credential->getOAuthHeaders($url, 'POST', []), |
61
|
9 |
|
CURLOPT_RETURNTRANSFER => true, |
62
|
9 |
|
CURLOPT_HEADER => true, |
63
|
9 |
|
CURLOPT_POST => true, |
64
|
9 |
|
CURLOPT_POSTFIELDS => $params, |
65
|
|
|
])); |
66
|
9 |
|
return $ch; |
67
|
|
|
} |
68
|
|
|
|
69
|
2 |
|
public function getOut($endpoint, array $params) |
70
|
2 |
|
{ |
71
|
2 |
|
$ch = curl_init(); |
72
|
2 |
|
list($url, $extra) = UrlNormalizer::outSplitUrlAndParameters($endpoint); |
73
|
2 |
|
$params += $extra; |
74
|
2 |
|
$params = RequestParamValidator::validateParams($params); |
75
|
2 |
|
curl_setopt_array($ch, array_replace($this->options, [ |
76
|
2 |
|
CURLOPT_URL => !$params ? $url : $url . '?' . http_build_query($params, '', '&'), |
77
|
2 |
|
CURLOPT_HTTPHEADER => $this->credential->getOAuthHeadersForOAuthEcho(), |
78
|
2 |
|
CURLOPT_RETURNTRANSFER => true, |
79
|
2 |
|
CURLOPT_HEADER => true, |
80
|
2 |
|
CURLOPT_HTTPGET => true, |
81
|
|
|
])); |
82
|
2 |
|
return $ch; |
83
|
|
|
} |
84
|
|
|
|
85
|
2 |
|
public function postOut($endpoint, array $params) |
86
|
2 |
|
{ |
87
|
2 |
|
$ch = curl_init(); |
88
|
2 |
|
list($url, $extra) = UrlNormalizer::outSplitUrlAndParameters($endpoint); |
89
|
2 |
|
$params += $extra; |
90
|
2 |
|
$params = RequestParamValidator::validateParams($params); |
91
|
2 |
|
curl_setopt_array($ch, array_replace($this->options, [ |
92
|
2 |
|
CURLOPT_URL => $url, |
93
|
2 |
|
CURLOPT_HTTPHEADER => $this->credential->getOAuthHeadersForOAuthEcho(), |
94
|
2 |
|
CURLOPT_RETURNTRANSFER => true, |
95
|
2 |
|
CURLOPT_HEADER => true, |
96
|
2 |
|
CURLOPT_POST => true, |
97
|
2 |
|
CURLOPT_POSTFIELDS => http_build_query($params, '', '&'), |
98
|
|
|
])); |
99
|
2 |
|
return $ch; |
100
|
|
|
} |
101
|
|
|
|
102
|
2 |
|
public function postMultipartOut($endpoint, array $params) |
103
|
2 |
|
{ |
104
|
2 |
|
$ch = curl_init(); |
105
|
2 |
|
list($url, $extra) = UrlNormalizer::outSplitUrlAndParameters($endpoint); |
106
|
2 |
|
$params += $extra; |
107
|
2 |
|
$params = RequestParamValidator::validateMultipartParams($params); |
108
|
2 |
|
curl_setopt_array($ch, array_replace($this->options, [ |
109
|
2 |
|
CURLOPT_URL => $url, |
110
|
2 |
|
CURLOPT_HTTPHEADER => $this->credential->getOAuthHeadersForOAuthEcho(), |
111
|
2 |
|
CURLOPT_RETURNTRANSFER => true, |
112
|
2 |
|
CURLOPT_HEADER => true, |
113
|
2 |
|
CURLOPT_POST => true, |
114
|
2 |
|
CURLOPT_POSTFIELDS => $params, |
115
|
|
|
])); |
116
|
2 |
|
return $ch; |
117
|
|
|
} |
118
|
|
|
|
119
|
12 |
|
public function streaming($endpoint, array $params, StreamHandler $handler) |
120
|
12 |
|
{ |
121
|
12 |
|
$ch = curl_init(); |
122
|
12 |
|
list($url, $extra) = UrlNormalizer::twitterSplitUrlAndParameters($endpoint); |
123
|
12 |
|
$params += $extra; |
124
|
12 |
|
$params = RequestParamValidator::validateParams($params); |
125
|
12 |
|
curl_setopt_array($ch, array_replace($this->options, [ |
126
|
12 |
|
CURLOPT_URL => $url, |
127
|
12 |
|
CURLOPT_HTTPHEADER => $this->credential->getOAuthHeaders($url, 'POST', $params), |
128
|
12 |
|
CURLOPT_POST => true, |
129
|
12 |
|
CURLOPT_POSTFIELDS => http_build_query($params, '', '&'), |
130
|
12 |
|
CURLOPT_HEADERFUNCTION => [$handler, 'headerFunction'], |
131
|
12 |
|
CURLOPT_WRITEFUNCTION => [$handler, 'writeFunction'], |
132
|
|
|
])); |
133
|
12 |
|
return $ch; |
134
|
|
|
} |
135
|
|
|
|
136
|
2 |
|
public function oauthForRequestToken($oauth_callback = null) |
137
|
2 |
|
{ |
138
|
2 |
|
if ($oauth_callback !== null) { |
139
|
2 |
|
$oauth_callback = RequestParamValidator::validateStringable('oauth_callback', $oauth_callback); |
140
|
|
|
} |
141
|
2 |
|
$ch = curl_init(); |
142
|
2 |
|
curl_setopt_array($ch, array_replace($this->options, [ |
143
|
2 |
|
CURLOPT_URL => 'https://api.twitter.com/oauth/request_token', |
144
|
2 |
|
CURLOPT_HTTPHEADER => $this->credential->getOAuthHeadersForRequestToken($oauth_callback), |
145
|
2 |
|
CURLOPT_RETURNTRANSFER => true, |
146
|
2 |
|
CURLOPT_HEADER => true, |
147
|
2 |
|
CURLOPT_POST => true, |
148
|
|
|
])); |
149
|
2 |
|
return $ch; |
150
|
|
|
} |
151
|
|
|
|
152
|
2 |
|
public function oauthForAccessToken($oauth_verifier) |
153
|
2 |
|
{ |
154
|
2 |
|
$oauth_verifier = RequestParamValidator::validateStringable('oauth_verifier', $oauth_verifier); |
155
|
2 |
|
$ch = curl_init(); |
156
|
2 |
|
curl_setopt_array($ch, array_replace($this->options, [ |
157
|
2 |
|
CURLOPT_URL => 'https://api.twitter.com/oauth/access_token', |
158
|
2 |
|
CURLOPT_HTTPHEADER => $this->credential->getOAuthHeadersForAccessToken($oauth_verifier), |
159
|
2 |
|
CURLOPT_RETURNTRANSFER => true, |
160
|
2 |
|
CURLOPT_HEADER => true, |
161
|
2 |
|
CURLOPT_POST => true, |
162
|
|
|
])); |
163
|
2 |
|
return $ch; |
164
|
|
|
} |
165
|
|
|
|
166
|
2 |
|
public function xauthForAccessToken($username, $password) |
167
|
2 |
|
{ |
168
|
2 |
|
$username = RequestParamValidator::validateStringable('username', $username); |
169
|
2 |
|
$password = RequestParamValidator::validateStringable('password', $password); |
170
|
2 |
|
$ch = curl_init(); |
171
|
2 |
|
curl_setopt_array($ch, array_replace($this->options, [ |
172
|
2 |
|
CURLOPT_URL => 'https://api.twitter.com/oauth/access_token', |
173
|
2 |
|
CURLOPT_HTTPHEADER => $this->credential->getXAuthHeadersForAccessToken($username, $password), |
174
|
2 |
|
CURLOPT_RETURNTRANSFER => true, |
175
|
2 |
|
CURLOPT_HEADER => true, |
176
|
2 |
|
CURLOPT_POST => true, |
177
|
2 |
|
CURLOPT_POSTFIELDS => http_build_query([ |
178
|
2 |
|
'x_auth_username' => $username, |
179
|
2 |
|
'x_auth_password' => $password, |
180
|
2 |
|
'x_auth_mode' => 'client_auth', |
181
|
2 |
|
], '', '&'), |
182
|
|
|
])); |
183
|
2 |
|
return $ch; |
184
|
|
|
} |
185
|
|
|
|
186
|
2 |
|
public function oauthForBearerToken() |
187
|
2 |
|
{ |
188
|
2 |
|
$ch = curl_init(); |
189
|
2 |
|
curl_setopt_array($ch, array_replace($this->options, [ |
190
|
2 |
|
CURLOPT_URL => 'https://api.twitter.com/oauth2/token', |
191
|
2 |
|
CURLOPT_HTTPHEADER => $this->credential->getBasicHeaders(), |
192
|
2 |
|
CURLOPT_RETURNTRANSFER => true, |
193
|
2 |
|
CURLOPT_HEADER => true, |
194
|
2 |
|
CURLOPT_POST => true, |
195
|
2 |
|
CURLOPT_POSTFIELDS => http_build_query([ |
196
|
2 |
|
'grant_type' => 'client_credentials', |
197
|
2 |
|
], '', '&'), |
198
|
|
|
])); |
199
|
2 |
|
return $ch; |
200
|
|
|
} |
201
|
|
|
|
202
|
2 |
|
public function get2($endpoint, $params = []) |
203
|
2 |
|
{ |
204
|
2 |
|
$ch = curl_init(); |
205
|
2 |
|
list($url, $extra) = UrlNormalizer::twitterSplitUrlAndParameters($endpoint); |
206
|
2 |
|
$params += $extra; |
207
|
2 |
|
$params = RequestParamValidator::validateParams($params); |
208
|
2 |
|
curl_setopt_array($ch, array_replace($this->options, [ |
209
|
2 |
|
CURLOPT_URL => !$params ? $url : $url . '?' . http_build_query($params, '', '&'), |
210
|
2 |
|
CURLOPT_HTTPHEADER => $this->credential->getBearerHeaders(), |
211
|
2 |
|
CURLOPT_RETURNTRANSFER => true, |
212
|
2 |
|
CURLOPT_HEADER => true, |
213
|
2 |
|
CURLOPT_HTTPGET => true, |
214
|
|
|
])); |
215
|
2 |
|
return $ch; |
216
|
|
|
} |
217
|
|
|
|
218
|
2 |
|
public function invalidateBearerToken() |
219
|
2 |
|
{ |
220
|
2 |
|
$ch = curl_init(); |
221
|
2 |
|
curl_setopt_array($ch, array_replace($this->options, [ |
222
|
2 |
|
CURLOPT_URL => 'https://api.twitter.com/oauth2/invalidate_token', |
223
|
2 |
|
CURLOPT_HTTPHEADER => $this->credential->getBasicHeaders(), |
224
|
2 |
|
CURLOPT_RETURNTRANSFER => true, |
225
|
2 |
|
CURLOPT_HEADER => true, |
226
|
2 |
|
CURLOPT_POST => true, |
227
|
2 |
|
CURLOPT_POSTFIELDS => http_build_query([ |
228
|
2 |
|
'access_token' => rawurldecode($this->credential->token), |
229
|
2 |
|
], '', '&', PHP_QUERY_RFC3986), |
230
|
|
|
])); |
231
|
2 |
|
return $ch; |
232
|
|
|
} |
233
|
|
|
|
234
|
4 |
|
public function browsing() |
235
|
4 |
|
{ |
236
|
4 |
|
$ch = curl_init(); |
237
|
4 |
|
curl_setopt_array($ch, array_replace($this->options, [ |
238
|
4 |
|
CURLOPT_COOKIEFILE => '', |
239
|
4 |
|
CURLOPT_RETURNTRANSFER => true, |
240
|
4 |
|
CURLOPT_HEADER => true, |
241
|
|
|
])); |
242
|
4 |
|
return $ch; |
243
|
|
|
} |
244
|
|
|
} |
245
|
|
|
|