Completed
Push — master ( 458684...f006a2 )
by Ryosuke
02:58
created

CurlInitializer::getOut()   A

Complexity

Conditions 2
Paths 1

Size

Total Lines 15
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 13
CRAP Score 2

Importance

Changes 4
Bugs 2 Features 0
Metric Value
c 4
b 2
f 0
dl 0
loc 15
ccs 13
cts 13
cp 1
rs 9.4285
cc 2
eloc 12
nc 1
nop 2
crap 2
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 53
    public function __construct(Credential $credential, array $options)
14 53
    {
15 53
        $this->credential = $credential;
16 53
        $this->options = $options;
17 53
    }
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
    public function oauthForBearerToken()
187
    {
188
        $ch = curl_init();
189
        curl_setopt_array($ch, array_replace($this->options, [
190
            CURLOPT_URL            => 'https://api.twitter.com/oauth2/token',
191
            CURLOPT_HTTPHEADER     => $this->credential->getBasicHeaders(),
192
            CURLOPT_RETURNTRANSFER => true,
193
            CURLOPT_HEADER         => true,
194
            CURLOPT_POST           => true,
195
            CURLOPT_POSTFIELDS     => http_build_query([
196
                'grant_type' => 'client_credentials',
197
            ], '', '&'),
198
        ]));
199
        return $ch;
200
    }
201
202
    public function get2($endpoint, $params = [])
203
    {
204
        $ch = curl_init();
205
        list($url, $extra) = UrlNormalizer::twitterSplitUrlAndParameters($endpoint);
206
        $params += $extra;
207
        $params = RequestParamValidator::validateParams($params);
208
        curl_setopt_array($ch, array_replace($this->options, [
209
            CURLOPT_URL            => !$params ? $url : $url . '?' . http_build_query($params, '', '&'),
210
            CURLOPT_HTTPHEADER     => $this->credential->getBearerHeaders(),
211
            CURLOPT_RETURNTRANSFER => true,
212
            CURLOPT_HEADER         => true,
213
            CURLOPT_HTTPGET        => true,
214
        ]));
215
        return $ch;
216
    }
217
218
    public function invalidateBearerToken()
219
    {
220
        $ch = curl_init();
221
        curl_setopt_array($ch, array_replace($this->options, [
222
            CURLOPT_URL            => 'https://api.twitter.com/oauth2/invalidate_token',
223
            CURLOPT_HTTPHEADER     => $this->credential->getBasicHeaders(),
224
            CURLOPT_RETURNTRANSFER => true,
225
            CURLOPT_HEADER         => true,
226
            CURLOPT_POST           => true,
227
            CURLOPT_POSTFIELDS     => http_build_query([
228
                'access_token' => rawurldecode($this->credential->token),
229
            ], '', '&', PHP_QUERY_RFC3986),
230
        ]));
231
        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