initial fork from EroTweet
[Anonymous-Twitter-Board.git] / class / twitter-connection.php
blobf3bc576ecc08acee35475665dcdc5054dc9a97c4
1 <?php
3 /*
4 A NOTE ON TWITTER ERRORS:
5 ERROR 215 TYPICALLY MEANS YOU GOT THE AUTHENTICATION STRING FORAMT WRONG
6 ERROR 32 MEANS YOU GOT THE VALUES WRONG
7 */
9 require("class/oauth-random.php");
10 class TwitterConnection{
11 private $oauth_data = array();
12 private $media_api = "https://upload.twitter.com/1.1/media/upload.json";
13 private $status_api = "https://api.twitter.com/1.1/statuses/update.json";
15 function __construct(){
16 $this->getOAuthData();
19 function getOAuthData(){
20 $settings = fopen("settings/keys.ini","r");
21 while(!feof($settings)){
22 $line = fgets($settings);
23 $key = substr($line,0,strpos($line, ":"));
24 //eat last character
25 $value = trim(substr($line, strpos($line, ":")+1));
26 $this->oauth_data[$key] = $value;
30 function makeTweet($comment, $file_arr){
31 $image_string = $this->addTweetMedia($file_arr);
33 //access info
34 $request_method = "POST";
36 //message info
37 $encode_tweet_msg = rawurlencode($comment);
38 $include_entities = "true";
40 //append to postfield_string the media code via media_ids=$media_id
41 $postfield_string = "include_entities=$include_entities&status=$encode_tweet_msg&media_ids=$image_string";
42 $msg_len = (strlen($postfield_string));
44 $random_value = OauthRandom::randomAlphaNumet(32);
45 $method = "HMAC-SHA1";
46 $oauth_version = "1.0";
47 $timestamp = time();
50 //add media id to the signature
51 $signature = rawurlencode($this->generateSignature(array(
52 "base_url" => $this->status_api,
53 "request_method" => $request_method),
54 array("include_entities" => "$include_entities",
55 "status" => "$encode_tweet_msg",
56 "media_ids" => "$image_string",
57 "oauth_version" => "$oauth_version",
58 "oauth_nonce"=>"$random_value",
59 "oauth_token"=> $this->oauth_data["oauth_token"],
60 "oauth_timestamp" => "$timestamp",
61 "oauth_consumer_key" => $this->oauth_data["oauth_consumer_key"],
62 "oauth_signature_method" => "$method"
64 array(
65 "consumer_secret" => $this->oauth_data["consumer_secret"],
66 "oauth_secret" => $this->oauth_data["oauth_secret"]
68 ));
70 $header_data = array("Accept: */*", "Connection: close","User-Agent: VerniyXYZ-CURL" ,
71 "Content-Type: application/x-www-form-urlencoded;charset=UTF-8",
72 "Content-Length: $msg_len", "Host: api.twitter.com",
74 'Authorization: OAuth oauth_consumer_key="' . $this->oauth_data["oauth_consumer_key"] .'",oauth_nonce="' . $random_value . '",oauth_signature="' . $signature
75 . '",oauth_signature_method="' .$method . '"' . ',oauth_timestamp="' . $timestamp . '",oauth_token="' . $this->oauth_data["oauth_token"] . '",oauth_version="' . $oauth_version . '"'
76 );
78 //request
79 echo "<hr/>";
80 $curl = curl_init($this->status_api);
81 curl_setopt($curl, CURLOPT_POST, 1);
82 curl_setopt($curl, CURLOPT_HTTPHEADER, $header_data);
83 curl_setopt($curl, CURLOPT_POSTFIELDS, $postfield_string);
84 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
85 echo "<br/>-- Fin -- <hr/>";
86 $content = curl_exec($curl);
87 echo $content;
90 function addTweetMedia($file_arr){
92 //image info
93 $image_string = "";//delimited by ',' commas
94 for($file = 0 ; $file < count($file_arr) ; $file++){
95 if($file_arr[$file] != ""){
96 //create data in binary/b64
97 $mime_type = pathinfo($file_arr[$file], PATHINFO_EXTENSION);
98 $file_arr[$file] = urldecode($file_arr[$file]);
99 $binary = file_get_contents($file_arr[$file]);
101 $base64 = base64_encode($binary);
103 //upload file to twitter and get id for use in files
104 $size = filesize($file_arr[$file]);
105 if($file == 0)
106 $image_string = $this->getMediaID($base64, $size, 'image/' . $mime_type);
107 else
108 $image_string .= "," . $this->getMediaID($base64, $size, 'image/' . $mime_type);
111 return rawurlencode($image_string);
114 function getMediaID($base64, $size, $mime_type){
115 $random_value = OAuthRandom::randomAlphaNumet(32);
116 $timestamp = time();
118 echo "<br/><br/>";
119 /////////////MAKE INIT////////////
120 //post data
121 $media_id = $this->mediaInit($size, $mime_type, $random_value, $timestamp);
123 echo "<br/><br/>";
125 /////////////MAKE APPEND////////////
126 //post data
127 $this->mediaAppend($base64, $media_id, $random_value, $timestamp);
129 echo "<br/><br/>";
131 /////////////MAKE FINAL/
132 $this->makeFinal($media_id, $random_value, $timestamp);
133 echo "<br/><br/>";
135 return $media_id ;
138 function mediaInit($size, $mime, $random_value, $timestamp){
139 $command = "INIT";
140 $method = "HMAC-SHA1";
141 $oauth_version = "1.0";
143 $postfield_string = "command=$command&total_bytes=$size&media_type=$mime";
145 $msg_len = (strlen($postfield_string));
146 //header data
147 // BUILD SIGNATURE
148 $signature = rawurlencode($this->generateSignature(array(
149 "base_url" => $this->media_api,
150 "request_method" => "POST"),
151 array(
152 "command" => "$command",
153 "total_bytes" => "$size",
154 "media_type" => "$mime",
155 "oauth_version" => "$oauth_version",
156 "oauth_nonce"=>"$random_value",
157 "oauth_token"=> $this->oauth_data["oauth_token"],
158 "oauth_timestamp" => "$timestamp",
159 "oauth_consumer_key" => $this->oauth_data["oauth_consumer_key"],
160 "oauth_signature_method" => "$method",
162 array(
163 "consumer_secret" => $this->oauth_data["consumer_secret"],
164 "oauth_secret" => $this->oauth_data["oauth_secret"]
170 $header_data = array("Accept: */*", "Connection: close","User-Agent: VerniyXYZ-CURL" ,"Content-Transfer-Encoding: binary",
171 "Content-Type: application/x-www-form-urlencoded;charset=UTF-8",
172 "Content-Length: $msg_len", "Host: upload.twitter.com",
173 'Authorization: OAuth oauth_consumer_key="' . $this->oauth_data["oauth_consumer_key"] .'",oauth_nonce="' . $random_value . '",oauth_signature="' .
174 $signature . '",oauth_signature_method="' .$method . '"' . ',oauth_timestamp="' . $timestamp . '",oauth_token="' . $this->oauth_data["oauth_token"] . '",oauth_version="' . $oauth_version . '"'
177 //request
178 $curl = curl_init($this->media_api);
179 curl_setopt($curl, CURLOPT_POST, 1);
180 curl_setopt($curl, CURLOPT_HTTPHEADER, $header_data);
181 curl_setopt($curl, CURLOPT_POSTFIELDS, $postfield_string);
182 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
183 $media_id_arr = json_decode(curl_exec($curl), true);
184 print_r ($media_id_arr);
185 return $media_id_arr["media_id_string"];
188 function mediaAppend(&$binary_file, $media_id, $random_value, $timestamp){
189 $command = "APPEND";
190 $method = "HMAC-SHA1";
191 $oauth_version = "1.0";
193 $segment_index = 0;
195 //header data
196 // BUILD SIGNATURE
197 $signature = rawurlencode($this->generateSignature(array(
198 "base_url" => $this->media_api,
199 "request_method" => "POST"),
200 array(
201 "command" => "$command",
202 "media" => "$binary_file",
203 "media_id"=>"$media_id",
204 "segment_index"=>"$segment_index",
205 "oauth_version" => "$oauth_version",
206 "oauth_nonce"=>"$random_value",
207 "oauth_token"=> $this->oauth_data["oauth_token"],
208 "oauth_timestamp" => "$timestamp",
209 "oauth_consumer_key" => $this->oauth_data["oauth_consumer_key"],
210 "oauth_signature_method" => "$method",
212 array(
213 "consumer_secret" => $this->oauth_data["consumer_secret"],
214 "oauth_secret" => $this->oauth_data["oauth_secret"]
219 $postfield_string = "media=" . rawurlencode($binary_file) . "&command=$command&media_id=$media_id&segment_index=$segment_index" ;
220 $msg_len = (strlen($postfield_string));
221 $header_data = array("Except:", "Connection: close","User-Agent: VerniyXYZ-CURL" ,"Content-Transfer-Encoding: binary",
222 "Content-Type: application/x-www-form-urlencoded",
223 "Content-Length: $msg_len", "Host: upload.twitter.com",
224 'Authorization: OAuth oauth_consumer_key="' . $this->oauth_data["oauth_consumer_key"] .'",oauth_nonce="' . $random_value . '",oauth_signature="' .
225 $signature . '",oauth_signature_method="' .$method . '"' . ',oauth_timestamp="' . $timestamp . '",oauth_token="' . $this->oauth_data["oauth_token"] . '",oauth_version="' . $oauth_version . '"'
227 //request
228 $curl = curl_init($this->media_api);
229 curl_setopt($curl, CURLOPT_POST, 1);
230 curl_setopt($curl, CURLOPT_HTTPHEADER, $header_data);
231 curl_setopt($curl, CURLOPT_POSTFIELDS, $postfield_string);
232 curl_setopt($curl, CURLOPT_HEADER , true); // we want headers
233 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
234 $http_response = curl_exec($curl);
235 echo $http_response;
238 function makeFinal($media_id, $random_value, $timestamp){
239 $command = "FINALIZE";
240 $method = "HMAC-SHA1";
241 $oauth_version = "1.0";
243 $signature = rawurlencode($this->generateSignature(array(
244 "base_url" => $this->media_api,
245 "request_method" => "POST"),
246 array(
247 "command" => "$command",
248 "media_id"=>"$media_id",
249 "oauth_version" => "$oauth_version",
250 "oauth_nonce"=>"$random_value",
251 "oauth_token"=> $this->oauth_data["oauth_token"],
252 "oauth_timestamp" => "$timestamp",
253 "oauth_consumer_key" => $this->oauth_data["oauth_consumer_key"],
254 "oauth_signature_method" => "$method",
256 array(
257 "consumer_secret" => $this->oauth_data["consumer_secret"],
258 "oauth_secret" => $this->oauth_data["oauth_secret"]
261 $postfield_string = "command=$command&media_id=$media_id" ;
262 $msg_len = (strlen($postfield_string));
263 $header_data = array("Except:", "Connection: close","User-Agent: VerniyXYZ-CURL" ,"Content-Transfer-Encoding: binary",
264 "Content-Type: application/x-www-form-urlencoded",
265 "Content-Length: $msg_len", "Host: upload.twitter.com",
266 'Authorization: OAuth oauth_consumer_key="' . $this->oauth_data["oauth_consumer_key"] .'",oauth_nonce="' . $random_value . '",oauth_signature="' .
267 $signature . '",oauth_signature_method="' .$method . '"' . ',oauth_timestamp="' . $timestamp . '",oauth_token="' . $this->oauth_data["oauth_token"] . '",oauth_version="' . $oauth_version . '"'
269 //request
270 $curl = curl_init($this->media_api);
271 curl_setopt($curl, CURLOPT_POST, 1);
272 curl_setopt($curl, CURLOPT_HTTPHEADER, $header_data);
273 curl_setopt($curl, CURLOPT_POSTFIELDS, $postfield_string);
274 curl_setopt($curl, CURLOPT_HEADER , true); // we want headers
275 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
276 $http_response = curl_exec($curl);
277 echo $http_response;
280 function generateSignature($request_arr, $paramater_arr, $secret_arr){
281 // BUILD SIGNATURE
282 $request_method = strtoupper($request_arr["request_method"]);
283 $base_url = rawurlencode($request_arr["base_url"]);
285 ksort($paramater_arr);
287 if(isset($paramater_arr["media"])) $paramater_arr["media"] = rawurlencode($paramater_arr["media"]);
288 $paramter_string = $this->buildOAuthParamaterString($paramater_arr);
290 $base_string = ($request_method . "&" . $base_url . "&" . $paramter_string);
291 $secret_string = $secret_arr["consumer_secret"] . "&" . $secret_arr["oauth_secret"];
292 $signature = (base64_encode(hash_hmac("SHA1",$base_string, $secret_string, true)));
294 return $signature;
297 function buildOAuthParamaterString($paramater_arr){
298 $param_string = "";
299 $join_param_by_amphersand = false;
300 foreach($paramater_arr as $key => $param){
301 if(!$join_param_by_amphersand){
302 $join_param_by_amphersand=true;
304 else{
305 $param_string .= rawurlencode("&");
307 $param_string .= rawurlencode($key . "=" . $param);
309 return $param_string;
314 echo"run script from externals<br/>";