diff --git a/blockchain/inc/block.php b/blockchain/inc/block.php index 6eada35..60663e7 100644 --- a/blockchain/inc/block.php +++ b/blockchain/inc/block.php @@ -78,6 +78,12 @@ class blockchain { self::$special_blocks = array (); + self::$special_blocks[] = new block( + '00000000000000000001e6d99b42a2fe649591e7b97b1d4327e2bc3ade53d6d7', + 772923, + 'BERNIQUE' + ); + self::$special_blocks[] = new block( '00000000000000000001f5beb60d9ca47adf18db5136b558379ed533fc9f6c85', 753335, diff --git a/blockchain/robot.sh b/blockchain/robot.sh index aebe1a2..0c0c372 100755 --- a/blockchain/robot.sh +++ b/blockchain/robot.sh @@ -26,7 +26,7 @@ LISTBLOCKS="GENESIS THE_ANSWER LUCIFER LEET \ FIRST_USD_TX 2020JUMP10000 \ NO_REWARD MORNING_STAR SALVADOR \ BAB_BRUXELLES POITIERS UKRAINE \ - ELISABETH_2_HAS_DIED \ + ELISABETH_2_HAS_DIED BERNIQUE \ LAST" for BLOCK in $LISTBLOCKS diff --git a/twitter/config.php b/twitter/config.php new file mode 100644 index 0000000..8790388 --- /dev/null +++ b/twitter/config.php @@ -0,0 +1,6 @@ + diff --git a/twitter/emptybot/inc/0000000000000000000034a2ed514ecda92b8b88593b0bc8e6ffffc978721c25.png b/twitter/emptybot/inc/0000000000000000000034a2ed514ecda92b8b88593b0bc8e6ffffc978721c25.png new file mode 100644 index 0000000..ccc0f85 Binary files /dev/null and b/twitter/emptybot/inc/0000000000000000000034a2ed514ecda92b8b88593b0bc8e6ffffc978721c25.png differ diff --git a/twitter/emptybot/inc/twitter.php b/twitter/emptybot/inc/twitter.php index 3b14f5d..48bec3e 100644 --- a/twitter/emptybot/inc/twitter.php +++ b/twitter/emptybot/inc/twitter.php @@ -1,88 +1,9 @@ get('account/verify_credentials'); - if ($twitter->getLastHttpCode() !== 200) return FALSE; - - $parameters = array("status" => $message); - - if (($media != NULL)&&($media != '')) - { - $imageMedia = $twitter->upload('media/upload', array('media' => $media)); - if ($twitter->getLastHttpCode() !== 200) return FALSE; - - $parameters = array( - "status" => $message, - "media_ids" => $imageMedia->media_id_string); - } - - $statuses = $twitter->post("statuses/update", $parameters); - if ($twitter->getLastHttpCode() !== 200) return FALSE; - - return TRUE; - } - - public static function thanksRetweet() - { - $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET); - $content = $twitter->get('account/verify_credentials'); - if ($twitter->getLastHttpCode() !== 200) return FALSE; - - $results = $twitter->get('statuses/retweets_of_me'); - if ($twitter->getLastHttpCode() !== 200) return FALSE; - - /* TO DO */ - - return TRUE; - } - - public static function thanksFollowers() - { - $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET); - $content = $twitter->get('account/verify_credentials'); - if ($twitter->getLastHttpCode() !== 200) return FALSE; - - $results = $twitter->get('followers/list'); - if ($twitter->getLastHttpCode() !== 200) return FALSE; - - $followers = json_decode(file_get_contents('followers.json')); - foreach($results->users as $user) - if (!in_array($user->screen_name, $followers)) - { - $parameters = array("status" => '@'.$user->screen_name.' thanks following me !'); - $followers[] = $user->screen_name; - $statuses = $twitter->post("statuses/update", $parameters); - if ($twitter->getLastHttpCode() !== 200) return FALSE; - break; // Un à la fois ... - } - file_put_contents('followers.json', json_encode($followers)); - - return TRUE; - } - -} - ?> diff --git a/twitter/emptybot/inc/unit_test_emptybot.php b/twitter/emptybot/inc/unit_test_emptybot.php new file mode 100644 index 0000000..874a9f1 --- /dev/null +++ b/twitter/emptybot/inc/unit_test_emptybot.php @@ -0,0 +1,8 @@ + diff --git a/twitter/emptybot/robot.php b/twitter/emptybot/robot.php index 5d06f85..e1acf68 100644 --- a/twitter/emptybot/robot.php +++ b/twitter/emptybot/robot.php @@ -21,6 +21,8 @@ require TOPISTO_PATH.'/ressources/vendor/autoload.php'; // --- require_once APP_PATH.'/blockchain/inc/block.php'; require 'inc/twitter.php'; +require '../generique/inc/twitter.php'; +require '../config.php'; $midnight = strtotime('today midnight'); @@ -71,11 +73,11 @@ if (file_exists($image_file)) // --- // --- Tweet // --- - $tweet = "Lucky One on #bitcoin #blockchain 's".PHP_EOL; - $tweet .= "Someone put an empty block ...".PHP_EOL; - $tweet .= "And get the reward for it !".PHP_EOL; - $tweet .= "Block height : ".$the_block->height.PHP_EOL; - $tweet .= "[ See more on www.topisto.net ]"; + $tweet = "Lucky One on #bitcoin #blockchain \\n"; + $tweet .= "Someone put an empty block ...\\n"; + $tweet .= "And get the reward for it !\\n"; + $tweet .= "Block height : ".$the_block->height; + $tweet .= "\\n[ See more on www.topisto.net ]"; $success = twitter::tweet($tweet, $image_file); } diff --git a/twitter/generique/inc/0000000000000000000034a2ed514ecda92b8b88593b0bc8e6ffffc978721c25.png b/twitter/generique/inc/0000000000000000000034a2ed514ecda92b8b88593b0bc8e6ffffc978721c25.png new file mode 100644 index 0000000..ccc0f85 Binary files /dev/null and b/twitter/generique/inc/0000000000000000000034a2ed514ecda92b8b88593b0bc8e6ffffc978721c25.png differ diff --git a/twitter/generique/inc/twifer.php b/twitter/generique/inc/twifer.php new file mode 100644 index 0000000..4876fea --- /dev/null +++ b/twitter/generique/inc/twifer.php @@ -0,0 +1,324 @@ +consumer_key = $consumer_key; + $this->consumer_secret = $consumer_secret; + $this->oauth_token = $oauth_token; + $this->oauth_token_secret = $oauth_token_secret; + + if ($oauth_token == false && $oauth_token_secret == false) { + $this->oauth = [ + 'oauth_consumer_key' => $this->consumer_key, + 'oauth_nonce' => time(), + 'oauth_signature_method' => 'HMAC-SHA1', + 'oauth_timestamp' => time(), + 'oauth_version' => '1.0', + ]; + } elseif ($oauth_token !== false && $oauth_token_secret == false) { + $this->oauth = $oauth_token; + } else { + $this->oauth = [ + 'oauth_consumer_key' => $this->consumer_key, + 'oauth_nonce' => time(), + 'oauth_signature_method' => 'HMAC-SHA1', + 'oauth_token' => $this->oauth_token, + 'oauth_timestamp' => time(), + 'oauth_version' => '1.0', + ]; + } + + } + + protected function buildAutheaders($oauth) + { + $headers = 'Authorization: OAuth '; + $values = []; + foreach ($oauth as $key => $value) { + $values[] = "$key=\"" . rawurlencode($value) . "\""; + } + + $headers .= implode(', ', $values); + return $headers; + } + + protected function buildBearerheaders($oauth) + { + $headers = 'Authorization: Bearer ' . $oauth; + return $headers; + } + + protected function buildString($method, $url, $params) + { + $headers = []; + ksort($params); + foreach ($params as $key => $value) { + $headers[] = "$key=" . rawurlencode($value); + } + return $method . "&" . rawurlencode($url) . '&' . rawurlencode(implode('&', $headers)); + } + + protected function buildSignature($baseInfo) + { + $encodeKey = rawurlencode($this->consumer_secret) . '&' . rawurlencode($this->oauth_token_secret); + $oauthSignature = base64_encode(hash_hmac('sha1', $baseInfo, $encodeKey, true)); + return $oauthSignature; + } + + protected function getSignature($method, $url, $params = false) + { + $oauth = $this->oauth; + + if ($params == false) { + $baseInfo = $this->buildString($method, $url, $oauth); + $oauth['oauth_signature'] = $this->buildSignature($baseInfo); + } else { + $oauth = array_merge($oauth, $params); + $baseInfo = $this->buildString($method, $url, $oauth); + $oauth['oauth_signature'] = $this->buildSignature($baseInfo); + } + return $oauth; + } + + protected function reqCurl($method = 'GET', $url, $params = false, $headers = false, $postfields = false, $userpwd = false) + { + $ch = curl_init(); + + if ($params == false) { + curl_setopt($ch, CURLOPT_URL, $url); + } + + if ($params == true) { + curl_setopt($ch, CURLOPT_URL, $url . "?" . http_build_query($params)); + } + + if ($method == 'POST') { + curl_setopt($ch, CURLOPT_POST, true); + } + + if ($method == 'DELETE') { + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE'); + } + + if ($postfields == true) { + curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields); + } + + if ($headers == true) { + curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); + } + + if ($userpwd == true) { + curl_setopt($ch, CURLOPT_USERPWD, $this->consumer_key . ':' . $this->consumer_secret); + } + + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); + + $result = curl_exec($ch); + return $result; + } + + protected function request2($method, $req, $params = false) + { + + $req = substr($req, 1); + $url = $this->apiUrl . $req; + if ($this->oauth_token !== false && $this->oauth_token_secret == false) { + + $oauth = $this->buildBearerheaders($this->oauth); + $headers = []; + $headers[] = $oauth; + + } else { + + $oauth = $this->getSignature($method, $url); + $headers = []; + $headers[] = 'Content-type: application/json'; + $headers[] = $this->buildAutheaders($oauth); + } + + $result = $this->reqCurl($method, $url, null, $headers, $params); + return json_decode($result, true); + } + + public function request($method, $req, $params = false) + { + + $method = strtoupper($method); + + if ($req == 'media/upload') { + return $this->upload($method, $req, $params); + } + + $version = explode('/', $req); + if ($version[0] == '2') { + $req = "/$req"; + return $this->request2($method, $req, $params); + } + + if ($version[1] == '2') { + return $this->request2($method, $req, $params); + } + + if ($version[0] == 'labs') { + $req = "/$req"; + return $this->request2($method, $req, $params); + } + + if ($version[1] == 'labs') { + return $this->request2($method, $req, $params); + } + + $url = $this->apiStandardUrl . $req . ".json"; + + if ($this->oauth_token !== false && $this->oauth_token_secret == false) { + + $oauth = $this->buildBearerheaders($this->oauth); + $headers = []; + $headers[] = $oauth; + + } else { + + $oauth = $this->getSignature($method, $url, $params); + + $headers = []; + $headers[] = $this->buildAutheaders($oauth); + } + + $result = $this->reqCurl($method, $url, $params, $headers, null); + return json_decode($result, true); + + } + + protected function reqUpload($method, $req, $params) + { + $url = $this->apiUploadUrl . $req . ".json"; + $oauth = $this->getSignature($method, $url); + + $headers = []; + $headers[] = $this->buildAutheaders($oauth); + $headers[] = 'Content-Type: multipart/form-data'; + + $result = $this->reqCurl($method, $url, null, $headers, $params); + return json_decode($result, true); + } + + protected function uploadChunked($req, $params) + { + $_params = [ + 'command' => 'INIT', + 'total_bytes' => filesize($params['media']), + 'media_type' => $params['media_type'], + ]; + + if (isset($params['additional_owners'])) { + $_params['additional_owners'] = $params['additional_owners']; + } + + if (isset($params['media_category'])) { + $_params['media_category'] = $params['media_category']; + } + + $req = $this->reqUpload('POST', 'media/upload', $_params); + + $fp = fopen($params['media'], 'r'); + $segment_id = 0; + while (!feof($fp)) { + $chunk = fread($fp, 40960); + + $__params = [ + "command" => "APPEND", + "media_id" => $req['media_id'], + "segment_index" => $segment_id++, + 'media_data' => base64_encode($chunk), + ]; + $this->reqUpload('POST', 'media/upload', $__params); + } + fclose($fp); + $lastParams = array( + "command" => "FINALIZE", + "media_id" => $req['media_id'], + ); + $result = $this->reqUpload('POST', 'media/upload', $lastParams); + return $result; + } + + public function upload($method, $req, $params) + { + if ($method == 'GET') { + return "METHOD MUST BE POST"; + } + + $url = $this->apiUploadUrl . $req . ".json"; + $c = count($params); + if ($c == 1 && isset($params['media'])) { + + $filename = file_get_contents($params['media']); + $base64 = base64_encode($filename); + $_params = ['media_data' => $base64]; + return $this->reqUpload('POST', 'media/upload', $_params); + + } elseif ($c == 1 && isset($params['media_data'])) { + + $base64 = $params['media_data']; + $_params = ['media_data' => $base64]; + return $this->reqUpload('POST', 'media/upload', $_params); + + } else { + return $this->uploadChunked($req, $params); + } + + } + + public function file($oauthUrl) + { + + $oauth = $this->getSignature("GET", $oauthUrl); + + $headers = []; + $headers[] = $this->buildAutheaders($oauth); + + $result = $this->reqCurl("GET", $oauthUrl, null, $headers, null); + return $result; + + } + + public function oauth($req, $params) + { + $url = $this->apiUrl . $req; + + $oauth = $this->getSignature("POST", $url, $params); + $headers = []; + $headers[] = $this->buildAutheaders($oauth); + + $result = $this->reqCurl("POST", $url, $params, $headers, null); + parse_str($result, $arr); + return $arr; + + } + + public function url($req, $params) + { + $url = $this->apiUrl . $req . "?" . http_build_query($params); + return $url; + } + + public function oauth2($req, $params) + { + $url = $this->apiUrl . $req; + $result = $this->reqCurl("POST", $url, $params, null, null, true); + return json_decode($result, true); + } + +} diff --git a/twitter/generique/inc/twitter.php b/twitter/generique/inc/twitter.php new file mode 100644 index 0000000..fa843b0 --- /dev/null +++ b/twitter/generique/inc/twitter.php @@ -0,0 +1,40 @@ +request('POST', 'media/upload', ['media' => $media]); + $media_id=$img['media_id']; + + $postfields = "{\"text\":\"$message\", \"media\": {\"media_ids\": [\"$media_id\"]}}"; + } + +echo($postfields.PHP_EOL); + + $res = $twitter->request('POST', '/2/tweets', $postfields); + + return TRUE; + } + + public static function thanksRetweet() + { + return TRUE; + } + + public static function thanksFollowers() + { + return TRUE; + } + +} + +?> diff --git a/twitter/generique/inc/twitter1.php b/twitter/generique/inc/twitter1.php new file mode 100644 index 0000000..3b14f5d --- /dev/null +++ b/twitter/generique/inc/twitter1.php @@ -0,0 +1,88 @@ +get('account/verify_credentials'); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + $parameters = array("status" => $message); + + if (($media != NULL)&&($media != '')) + { + $imageMedia = $twitter->upload('media/upload', array('media' => $media)); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + $parameters = array( + "status" => $message, + "media_ids" => $imageMedia->media_id_string); + } + + $statuses = $twitter->post("statuses/update", $parameters); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + return TRUE; + } + + public static function thanksRetweet() + { + $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET); + $content = $twitter->get('account/verify_credentials'); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + $results = $twitter->get('statuses/retweets_of_me'); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + /* TO DO */ + + return TRUE; + } + + public static function thanksFollowers() + { + $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET); + $content = $twitter->get('account/verify_credentials'); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + $results = $twitter->get('followers/list'); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + $followers = json_decode(file_get_contents('followers.json')); + foreach($results->users as $user) + if (!in_array($user->screen_name, $followers)) + { + $parameters = array("status" => '@'.$user->screen_name.' thanks following me !'); + $followers[] = $user->screen_name; + $statuses = $twitter->post("statuses/update", $parameters); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + break; // Un à la fois ... + } + file_put_contents('followers.json', json_encode($followers)); + + return TRUE; + } + +} + +?> diff --git a/twitter/generique/inc/twitter2.php b/twitter/generique/inc/twitter2.php new file mode 100644 index 0000000..0008de1 --- /dev/null +++ b/twitter/generique/inc/twitter2.php @@ -0,0 +1,42 @@ +request('POST', 'media/upload', ['media' => $filename]); + $media_id='1739965196775346176'; + + $postfields = "{\"text\":\"$message\", \"media\": {\"media_ids\": [\"$media_id\"]}}"; + + $res = $twitter->request('POST', '/2/tweets', $postfields); + print_r($res); + + return TRUE; + } + + public static function thanksRetweet() + { + return TRUE; + } + + public static function thanksFollowers() + { + return TRUE; + } + +} + +?> diff --git a/twitter/generique/inc/unit_test_twitter2.php b/twitter/generique/inc/unit_test_twitter2.php new file mode 100644 index 0000000..2a16ea5 --- /dev/null +++ b/twitter/generique/inc/unit_test_twitter2.php @@ -0,0 +1,7 @@ + diff --git a/twitter/twitterbot/inc/0000000000000000000034a2ed514ecda92b8b88593b0bc8e6ffffc978721c25.png b/twitter/twitterbot/inc/0000000000000000000034a2ed514ecda92b8b88593b0bc8e6ffffc978721c25.png new file mode 100644 index 0000000..ccc0f85 Binary files /dev/null and b/twitter/twitterbot/inc/0000000000000000000034a2ed514ecda92b8b88593b0bc8e6ffffc978721c25.png differ diff --git a/twitter/twitterbot/inc/twitter.php b/twitter/twitterbot/inc/twitter.php index ee42296..e5352ad 100644 --- a/twitter/twitterbot/inc/twitter.php +++ b/twitter/twitterbot/inc/twitter.php @@ -1,88 +1,14 @@ get('account/verify_credentials'); - if ($twitter->getLastHttpCode() !== 200) return FALSE; - - $parameters = array("status" => $message); - - if (($media != NULL)&&($media != '')) - { - $imageMedia = $twitter->upload('media/upload', array('media' => $media)); - if ($twitter->getLastHttpCode() !== 200) return FALSE; - - $parameters = array( - "status" => $message, - "media_ids" => $imageMedia->media_id_string); - } - - $statuses = $twitter->post("statuses/update", $parameters); - if ($twitter->getLastHttpCode() !== 200) return FALSE; - - return TRUE; - } - - public static function thanksRetweet() - { - $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET); - $content = $twitter->get('account/verify_credentials'); - if ($twitter->getLastHttpCode() !== 200) return FALSE; - - $results = $twitter->get('statuses/retweets_of_me'); - if ($twitter->getLastHttpCode() !== 200) return FALSE; - - /* TO DO */ - - return TRUE; - } - - public static function thanksFollowers() - { - $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET); - $content = $twitter->get('account/verify_credentials'); - if ($twitter->getLastHttpCode() !== 200) return FALSE; - - $results = $twitter->get('followers/list'); - if ($twitter->getLastHttpCode() !== 200) return FALSE; - - $followers = json_decode(file_get_contents('followers.json')); - foreach($results->users as $user) - if (!in_array($user->screen_name, $followers)) - { - $parameters = array("status" => '@'.$user->screen_name.' thanks following me !'); - $followers[] = $user->screen_name; - $statuses = $twitter->post("statuses/update", $parameters); - if ($twitter->getLastHttpCode() !== 200) return FALSE; - break; // Un à la fois ... - } - file_put_contents('followers.json', json_encode($followers)); - - return TRUE; - } - -} +// Client ID +// TE5jWFRIVTZVQkdnT2FIeEJyYTY6MTpjaQ +// Client Secret +// GyZkEE69j0UPPKfmal9tT287-ZVw7vQbV20qvDPTFLCgNOplUk ?> diff --git a/twitter/twitterbot/inc/twitter1.php b/twitter/twitterbot/inc/twitter1.php new file mode 100644 index 0000000..ee42296 --- /dev/null +++ b/twitter/twitterbot/inc/twitter1.php @@ -0,0 +1,88 @@ +get('account/verify_credentials'); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + $parameters = array("status" => $message); + + if (($media != NULL)&&($media != '')) + { + $imageMedia = $twitter->upload('media/upload', array('media' => $media)); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + $parameters = array( + "status" => $message, + "media_ids" => $imageMedia->media_id_string); + } + + $statuses = $twitter->post("statuses/update", $parameters); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + return TRUE; + } + + public static function thanksRetweet() + { + $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET); + $content = $twitter->get('account/verify_credentials'); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + $results = $twitter->get('statuses/retweets_of_me'); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + /* TO DO */ + + return TRUE; + } + + public static function thanksFollowers() + { + $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET); + $content = $twitter->get('account/verify_credentials'); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + $results = $twitter->get('followers/list'); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + $followers = json_decode(file_get_contents('followers.json')); + foreach($results->users as $user) + if (!in_array($user->screen_name, $followers)) + { + $parameters = array("status" => '@'.$user->screen_name.' thanks following me !'); + $followers[] = $user->screen_name; + $statuses = $twitter->post("statuses/update", $parameters); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + break; // Un à la fois ... + } + file_put_contents('followers.json', json_encode($followers)); + + return TRUE; + } + +} + +?> diff --git a/twitter/twitterbot/inc/twitter2.php b/twitter/twitterbot/inc/twitter2.php new file mode 100644 index 0000000..e5352ad --- /dev/null +++ b/twitter/twitterbot/inc/twitter2.php @@ -0,0 +1,14 @@ + diff --git a/twitter/twitterbot/inc/unit_test_twitterbot.php b/twitter/twitterbot/inc/unit_test_twitterbot.php new file mode 100644 index 0000000..acfd045 --- /dev/null +++ b/twitter/twitterbot/inc/unit_test_twitterbot.php @@ -0,0 +1,8 @@ + diff --git a/twitter/twitterbot/robot.php b/twitter/twitterbot/robot.php index fa5d8b8..1eaab48 100644 --- a/twitter/twitterbot/robot.php +++ b/twitter/twitterbot/robot.php @@ -21,6 +21,8 @@ require TOPISTO_PATH.'/ressources/vendor/autoload.php'; // --- require_once APP_PATH.'/blockchain/inc/block.php'; require 'inc/twitter.php'; +require '../generique/inc/twitter.php'; +require '../config.php'; $methode='spline'; if (isset($argv[3])) $methode=$argv[3]; @@ -32,30 +34,35 @@ if ($the_block === FALSE) die(); // --- // --- Remercier les followers // --- -twitter::thanksFollowers(); +// twitter::thanksFollowers(); $image_file=DATA_PATH."/$methode/".$argv[1].'.png'; if (file_exists($image_file)) { $image_origine = imagecreatefrompng($image_file); - $image_twitter = imagecreatetruecolor(TWITTER_WIDTH, TWITTER_HEIGHT); - $fond = imagecolorallocate($image_twitter, 255, 255, 255); - //imagecolortransparent($image_twitter, $fond); - imagefilledrectangle($image_twitter, 0, 0, TWITTER_WIDTH, TWITTER_HEIGHT, $fond); + if (image_origine) { + $image_twitter = imagecreatetruecolor(TWITTER_WIDTH, TWITTER_HEIGHT); + if ($image_twitter) { - $ratio = TWITTER_HEIGHT / imagesy($image_origine); - $new_width = $ratio * imagesx($image_origine); + $fond = imagecolorallocate($image_twitter, 0, 0, 0); + imagefilledrectangle($image_twitter, 0, 0, TWITTER_WIDTH, TWITTER_HEIGHT, $fond); - $xpos = floor((TWITTER_WIDTH - $new_width) / 2); - $ypos = 0; + $ratio = TWITTER_HEIGHT / imagesy($image_origine); + $new_width = $ratio * imagesx($image_origine); - imagecopyresized($image_twitter, $image_origine, $xpos, $ypos, 0, 0, $new_width, TWITTER_HEIGHT, imagesx($image_origine), imagesy($image_origine)); + $xpos = floor((TWITTER_WIDTH - $new_width) / 2); + $ypos = 0; - $image_file = DATA_PATH."/twitterbot/".$argv[1].'.png'; + imagecopyresized($image_twitter, $image_origine, $xpos, $ypos, 0, 0, $new_width, TWITTER_HEIGHT, imagesx($image_origine), imagesy($image_origine)); - imagepng($image_twitter,$image_file); + $image_file = DATA_PATH."/twitterbot/".$argv[1].'.png'; + + if (!imagepng($image_twitter,$image_file)) $image_file=''; + + } else echo("Pbme avec image TWITTER ".PHP_EOL); + } else echo("Pbme avec $image_file ".PHP_EOL); // --- // --- Un petit peu de stéganographie ... @@ -69,9 +76,9 @@ if (file_exists($image_file)) // --- // --- Tweet // --- - $tweet = "#computerart #creativecoding #generativeart :".PHP_EOL."#bitcoin #blockchain 's".PHP_EOL; - $tweet .= $argv[2]." Block, Height : ".$the_block->height.PHP_EOL; - $tweet .= "[ See more on www.topisto.net ]"; + $tweet = "#computerart #creativecoding #generativeart :\\n#bitcoin #blockchain \\n"; + $tweet .= $argv[2]." Block, Height : ".$the_block->height; + $tweet .= "\\n[ See more on www.topisto.net ]"; $success = twitter::tweet($tweet, $image_file); } diff --git a/twitter/twitterbot/robot.sh b/twitter/twitterbot/robot.sh index b8a16d9..1af4172 100755 --- a/twitter/twitterbot/robot.sh +++ b/twitter/twitterbot/robot.sh @@ -47,10 +47,12 @@ fi if [ -f $DATA_PATH/hasard/$BLOCK_HASH.png ] then + echo Suppression $DATA_PATH/twitterbot/$BLOCK_HASH + rm $DATA_PATH/twitterbot/$BLOCK_HASH if [ ! -f $DATA_PATH/twitterbot/$BLOCK_HASH ] then echo Tweet for $BLOCK_HASH $BLOCK_NAME - php robot.php $BLOCK_HASH $BLOCK_NAME hasard $BLOCK_HEIGHT + echo php robot.php $BLOCK_HASH $BLOCK_NAME hasard $BLOCK_HEIGHT # # On met un marqueur pour ne pas retweeter diff --git a/twitter/twitterbot/robot1.php b/twitter/twitterbot/robot1.php new file mode 100644 index 0000000..8b8f327 --- /dev/null +++ b/twitter/twitterbot/robot1.php @@ -0,0 +1,78 @@ +encode($image_file, 'TOPISTO is making art with block '.$the_block->height); + $image->write($image_file); +*/ + + // --- + // --- Tweet + // --- + $tweet = "#computerart #creativecoding #generativeart :".PHP_EOL."#bitcoin #blockchain 's".PHP_EOL; + $tweet .= $argv[2]." Block, Height : ".$the_block->height.PHP_EOL; + $tweet .= "[ See more on www.topisto.net ]"; + $success = twitter::tweet($tweet, $image_file); +} + +?> diff --git a/twitter_bak/emptybot/followers.json.example b/twitter_bak/emptybot/followers.json.example new file mode 100644 index 0000000..9e62de5 --- /dev/null +++ b/twitter_bak/emptybot/followers.json.example @@ -0,0 +1 @@ +["topisto42","UnnaxPayments","aureliusdrusus","solacedotcom","omgbtc","ohiobitcoin","LogicScience","redunisproject","Cryptocracy2020","fullstache","callblockapp","marketranger","TheCryptodamus","crypt0co","CryptoassetsUSA","Nadeem_nadi797","cryptomoneyz","BaseCyberSec","Tweetsintoabyss","anthkell98","grattonboy","mac_a_dam","devnullius","123wolfArmy","03018333860","JeffinkoGuru","BitJob_Team","rugigana","Crypto_info321","cointopic_","Chef_JeanPierre","Cienencom","btcltcdigger","AdzCoin_Gift","treyptrsn","n2yolo","SHL0M0ABADD0N","EdwardCulligan","promote_crypto","TheFutureShift","ErickCoval","RIMCorpPK","arhiezvanhoute1","ttoff85","actu_fintech","BeautyBubble","PDX_Trader","Yasirperdesi","cre8hyperledger","Thurse8","cre8capital","icobountyprogs","rob67803423","AphexTwin4ever"] \ No newline at end of file diff --git a/twitter_bak/emptybot/inc/0000000000000000000034a2ed514ecda92b8b88593b0bc8e6ffffc978721c25.png b/twitter_bak/emptybot/inc/0000000000000000000034a2ed514ecda92b8b88593b0bc8e6ffffc978721c25.png new file mode 100644 index 0000000..ccc0f85 Binary files /dev/null and b/twitter_bak/emptybot/inc/0000000000000000000034a2ed514ecda92b8b88593b0bc8e6ffffc978721c25.png differ diff --git a/twitter_bak/emptybot/inc/twifer.php b/twitter_bak/emptybot/inc/twifer.php new file mode 100644 index 0000000..4876fea --- /dev/null +++ b/twitter_bak/emptybot/inc/twifer.php @@ -0,0 +1,324 @@ +consumer_key = $consumer_key; + $this->consumer_secret = $consumer_secret; + $this->oauth_token = $oauth_token; + $this->oauth_token_secret = $oauth_token_secret; + + if ($oauth_token == false && $oauth_token_secret == false) { + $this->oauth = [ + 'oauth_consumer_key' => $this->consumer_key, + 'oauth_nonce' => time(), + 'oauth_signature_method' => 'HMAC-SHA1', + 'oauth_timestamp' => time(), + 'oauth_version' => '1.0', + ]; + } elseif ($oauth_token !== false && $oauth_token_secret == false) { + $this->oauth = $oauth_token; + } else { + $this->oauth = [ + 'oauth_consumer_key' => $this->consumer_key, + 'oauth_nonce' => time(), + 'oauth_signature_method' => 'HMAC-SHA1', + 'oauth_token' => $this->oauth_token, + 'oauth_timestamp' => time(), + 'oauth_version' => '1.0', + ]; + } + + } + + protected function buildAutheaders($oauth) + { + $headers = 'Authorization: OAuth '; + $values = []; + foreach ($oauth as $key => $value) { + $values[] = "$key=\"" . rawurlencode($value) . "\""; + } + + $headers .= implode(', ', $values); + return $headers; + } + + protected function buildBearerheaders($oauth) + { + $headers = 'Authorization: Bearer ' . $oauth; + return $headers; + } + + protected function buildString($method, $url, $params) + { + $headers = []; + ksort($params); + foreach ($params as $key => $value) { + $headers[] = "$key=" . rawurlencode($value); + } + return $method . "&" . rawurlencode($url) . '&' . rawurlencode(implode('&', $headers)); + } + + protected function buildSignature($baseInfo) + { + $encodeKey = rawurlencode($this->consumer_secret) . '&' . rawurlencode($this->oauth_token_secret); + $oauthSignature = base64_encode(hash_hmac('sha1', $baseInfo, $encodeKey, true)); + return $oauthSignature; + } + + protected function getSignature($method, $url, $params = false) + { + $oauth = $this->oauth; + + if ($params == false) { + $baseInfo = $this->buildString($method, $url, $oauth); + $oauth['oauth_signature'] = $this->buildSignature($baseInfo); + } else { + $oauth = array_merge($oauth, $params); + $baseInfo = $this->buildString($method, $url, $oauth); + $oauth['oauth_signature'] = $this->buildSignature($baseInfo); + } + return $oauth; + } + + protected function reqCurl($method = 'GET', $url, $params = false, $headers = false, $postfields = false, $userpwd = false) + { + $ch = curl_init(); + + if ($params == false) { + curl_setopt($ch, CURLOPT_URL, $url); + } + + if ($params == true) { + curl_setopt($ch, CURLOPT_URL, $url . "?" . http_build_query($params)); + } + + if ($method == 'POST') { + curl_setopt($ch, CURLOPT_POST, true); + } + + if ($method == 'DELETE') { + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE'); + } + + if ($postfields == true) { + curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields); + } + + if ($headers == true) { + curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); + } + + if ($userpwd == true) { + curl_setopt($ch, CURLOPT_USERPWD, $this->consumer_key . ':' . $this->consumer_secret); + } + + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); + + $result = curl_exec($ch); + return $result; + } + + protected function request2($method, $req, $params = false) + { + + $req = substr($req, 1); + $url = $this->apiUrl . $req; + if ($this->oauth_token !== false && $this->oauth_token_secret == false) { + + $oauth = $this->buildBearerheaders($this->oauth); + $headers = []; + $headers[] = $oauth; + + } else { + + $oauth = $this->getSignature($method, $url); + $headers = []; + $headers[] = 'Content-type: application/json'; + $headers[] = $this->buildAutheaders($oauth); + } + + $result = $this->reqCurl($method, $url, null, $headers, $params); + return json_decode($result, true); + } + + public function request($method, $req, $params = false) + { + + $method = strtoupper($method); + + if ($req == 'media/upload') { + return $this->upload($method, $req, $params); + } + + $version = explode('/', $req); + if ($version[0] == '2') { + $req = "/$req"; + return $this->request2($method, $req, $params); + } + + if ($version[1] == '2') { + return $this->request2($method, $req, $params); + } + + if ($version[0] == 'labs') { + $req = "/$req"; + return $this->request2($method, $req, $params); + } + + if ($version[1] == 'labs') { + return $this->request2($method, $req, $params); + } + + $url = $this->apiStandardUrl . $req . ".json"; + + if ($this->oauth_token !== false && $this->oauth_token_secret == false) { + + $oauth = $this->buildBearerheaders($this->oauth); + $headers = []; + $headers[] = $oauth; + + } else { + + $oauth = $this->getSignature($method, $url, $params); + + $headers = []; + $headers[] = $this->buildAutheaders($oauth); + } + + $result = $this->reqCurl($method, $url, $params, $headers, null); + return json_decode($result, true); + + } + + protected function reqUpload($method, $req, $params) + { + $url = $this->apiUploadUrl . $req . ".json"; + $oauth = $this->getSignature($method, $url); + + $headers = []; + $headers[] = $this->buildAutheaders($oauth); + $headers[] = 'Content-Type: multipart/form-data'; + + $result = $this->reqCurl($method, $url, null, $headers, $params); + return json_decode($result, true); + } + + protected function uploadChunked($req, $params) + { + $_params = [ + 'command' => 'INIT', + 'total_bytes' => filesize($params['media']), + 'media_type' => $params['media_type'], + ]; + + if (isset($params['additional_owners'])) { + $_params['additional_owners'] = $params['additional_owners']; + } + + if (isset($params['media_category'])) { + $_params['media_category'] = $params['media_category']; + } + + $req = $this->reqUpload('POST', 'media/upload', $_params); + + $fp = fopen($params['media'], 'r'); + $segment_id = 0; + while (!feof($fp)) { + $chunk = fread($fp, 40960); + + $__params = [ + "command" => "APPEND", + "media_id" => $req['media_id'], + "segment_index" => $segment_id++, + 'media_data' => base64_encode($chunk), + ]; + $this->reqUpload('POST', 'media/upload', $__params); + } + fclose($fp); + $lastParams = array( + "command" => "FINALIZE", + "media_id" => $req['media_id'], + ); + $result = $this->reqUpload('POST', 'media/upload', $lastParams); + return $result; + } + + public function upload($method, $req, $params) + { + if ($method == 'GET') { + return "METHOD MUST BE POST"; + } + + $url = $this->apiUploadUrl . $req . ".json"; + $c = count($params); + if ($c == 1 && isset($params['media'])) { + + $filename = file_get_contents($params['media']); + $base64 = base64_encode($filename); + $_params = ['media_data' => $base64]; + return $this->reqUpload('POST', 'media/upload', $_params); + + } elseif ($c == 1 && isset($params['media_data'])) { + + $base64 = $params['media_data']; + $_params = ['media_data' => $base64]; + return $this->reqUpload('POST', 'media/upload', $_params); + + } else { + return $this->uploadChunked($req, $params); + } + + } + + public function file($oauthUrl) + { + + $oauth = $this->getSignature("GET", $oauthUrl); + + $headers = []; + $headers[] = $this->buildAutheaders($oauth); + + $result = $this->reqCurl("GET", $oauthUrl, null, $headers, null); + return $result; + + } + + public function oauth($req, $params) + { + $url = $this->apiUrl . $req; + + $oauth = $this->getSignature("POST", $url, $params); + $headers = []; + $headers[] = $this->buildAutheaders($oauth); + + $result = $this->reqCurl("POST", $url, $params, $headers, null); + parse_str($result, $arr); + return $arr; + + } + + public function url($req, $params) + { + $url = $this->apiUrl . $req . "?" . http_build_query($params); + return $url; + } + + public function oauth2($req, $params) + { + $url = $this->apiUrl . $req; + $result = $this->reqCurl("POST", $url, $params, null, null, true); + return json_decode($result, true); + } + +} diff --git a/twitter_bak/emptybot/inc/twitter.php b/twitter_bak/emptybot/inc/twitter.php new file mode 100644 index 0000000..798ac13 --- /dev/null +++ b/twitter_bak/emptybot/inc/twitter.php @@ -0,0 +1,14 @@ + diff --git a/twitter_bak/emptybot/inc/twitter1.php b/twitter_bak/emptybot/inc/twitter1.php new file mode 100644 index 0000000..3b14f5d --- /dev/null +++ b/twitter_bak/emptybot/inc/twitter1.php @@ -0,0 +1,88 @@ +get('account/verify_credentials'); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + $parameters = array("status" => $message); + + if (($media != NULL)&&($media != '')) + { + $imageMedia = $twitter->upload('media/upload', array('media' => $media)); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + $parameters = array( + "status" => $message, + "media_ids" => $imageMedia->media_id_string); + } + + $statuses = $twitter->post("statuses/update", $parameters); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + return TRUE; + } + + public static function thanksRetweet() + { + $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET); + $content = $twitter->get('account/verify_credentials'); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + $results = $twitter->get('statuses/retweets_of_me'); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + /* TO DO */ + + return TRUE; + } + + public static function thanksFollowers() + { + $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET); + $content = $twitter->get('account/verify_credentials'); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + $results = $twitter->get('followers/list'); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + $followers = json_decode(file_get_contents('followers.json')); + foreach($results->users as $user) + if (!in_array($user->screen_name, $followers)) + { + $parameters = array("status" => '@'.$user->screen_name.' thanks following me !'); + $followers[] = $user->screen_name; + $statuses = $twitter->post("statuses/update", $parameters); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + break; // Un à la fois ... + } + file_put_contents('followers.json', json_encode($followers)); + + return TRUE; + } + +} + +?> diff --git a/twitter_bak/emptybot/inc/twitter2.php b/twitter_bak/emptybot/inc/twitter2.php new file mode 100644 index 0000000..0008de1 --- /dev/null +++ b/twitter_bak/emptybot/inc/twitter2.php @@ -0,0 +1,42 @@ +request('POST', 'media/upload', ['media' => $filename]); + $media_id='1739965196775346176'; + + $postfields = "{\"text\":\"$message\", \"media\": {\"media_ids\": [\"$media_id\"]}}"; + + $res = $twitter->request('POST', '/2/tweets', $postfields); + print_r($res); + + return TRUE; + } + + public static function thanksRetweet() + { + return TRUE; + } + + public static function thanksFollowers() + { + return TRUE; + } + +} + +?> diff --git a/twitter_bak/emptybot/inc/unit_test_twitter2.php b/twitter_bak/emptybot/inc/unit_test_twitter2.php new file mode 100644 index 0000000..2a16ea5 --- /dev/null +++ b/twitter_bak/emptybot/inc/unit_test_twitter2.php @@ -0,0 +1,7 @@ + diff --git a/twitter_bak/emptybot/robot.php b/twitter_bak/emptybot/robot.php new file mode 100644 index 0000000..744f769 --- /dev/null +++ b/twitter_bak/emptybot/robot.php @@ -0,0 +1,83 @@ +encode($image_file, 'TOPISTO is making art with block '.$the_block->height); + $image->write($image_file); +*/ + + // --- + // --- Tweet + // --- + $tweet = "Lucky One on #bitcoin #blockchain 's".PHP_EOL; + $tweet .= "Someone put an empty block ...".PHP_EOL; + $tweet .= "And get the reward for it !".PHP_EOL; + $tweet .= "Block height : ".$the_block->height.PHP_EOL; + $tweet .= "[ See more on www.topisto.net ]"; + $success = twitter::tweet($tweet, $image_file); +} + +?> diff --git a/twitter_bak/emptybot/robot.sh b/twitter_bak/emptybot/robot.sh new file mode 100755 index 0000000..1115e08 --- /dev/null +++ b/twitter_bak/emptybot/robot.sh @@ -0,0 +1,38 @@ +#!/bin/bash +flag=$TMP_PATH/emptybot_bot.flag + +if [ -f $flag ]; +then + echo "empty_bot is already running !" + exit 0 +fi + +touch $flag + +cd $APPS_PATH/twitter/emptybot + +# +# Se lancer pour un tweet sur un block unique +# +BLOCK_LINE=`grep LAST $DATA_PATH/block_list.txt` +BLOCK_HASH=`echo ${BLOCK_LINE} | awk '{print $2}'` +BLOCK_NAME=`echo ${BLOCK_LINE} | awk '{print $1}'` +BLOCK_HEIGHT=`echo ${BLOCK_LINE} | awk '{print $3}'` +BLOCK_SIZE=`echo ${BLOCK_LINE} | awk '{print $4}'` + +if [ $BLOCK_SIZE -eq 1 ] +then + if [ -f $DATA_PATH/hasard/$BLOCK_HASH.png ] + then + if [ ! -f $DATA_PATH/emptybot/$BLOCK_HASH.png ] + then + echo Tweet EmptyBlock for $BLOCK_HASH + echo $BLOCK_LINE >> $DATA_PATH/emptybot/list.txt + php robot.php $BLOCK_HASH $BLOCK_NAME hasard $BLOCK_HEIGHT + # Don't TWEET it again ... + touch $DATA_PATH/twitterbot/$BLOCK_HASH + fi + fi +fi + +rm -f $flag diff --git a/twitter_bak/generique/inc/0000000000000000000034a2ed514ecda92b8b88593b0bc8e6ffffc978721c25.png b/twitter_bak/generique/inc/0000000000000000000034a2ed514ecda92b8b88593b0bc8e6ffffc978721c25.png new file mode 100644 index 0000000..ccc0f85 Binary files /dev/null and b/twitter_bak/generique/inc/0000000000000000000034a2ed514ecda92b8b88593b0bc8e6ffffc978721c25.png differ diff --git a/twitter_bak/generique/inc/twifer.php b/twitter_bak/generique/inc/twifer.php new file mode 100644 index 0000000..4876fea --- /dev/null +++ b/twitter_bak/generique/inc/twifer.php @@ -0,0 +1,324 @@ +consumer_key = $consumer_key; + $this->consumer_secret = $consumer_secret; + $this->oauth_token = $oauth_token; + $this->oauth_token_secret = $oauth_token_secret; + + if ($oauth_token == false && $oauth_token_secret == false) { + $this->oauth = [ + 'oauth_consumer_key' => $this->consumer_key, + 'oauth_nonce' => time(), + 'oauth_signature_method' => 'HMAC-SHA1', + 'oauth_timestamp' => time(), + 'oauth_version' => '1.0', + ]; + } elseif ($oauth_token !== false && $oauth_token_secret == false) { + $this->oauth = $oauth_token; + } else { + $this->oauth = [ + 'oauth_consumer_key' => $this->consumer_key, + 'oauth_nonce' => time(), + 'oauth_signature_method' => 'HMAC-SHA1', + 'oauth_token' => $this->oauth_token, + 'oauth_timestamp' => time(), + 'oauth_version' => '1.0', + ]; + } + + } + + protected function buildAutheaders($oauth) + { + $headers = 'Authorization: OAuth '; + $values = []; + foreach ($oauth as $key => $value) { + $values[] = "$key=\"" . rawurlencode($value) . "\""; + } + + $headers .= implode(', ', $values); + return $headers; + } + + protected function buildBearerheaders($oauth) + { + $headers = 'Authorization: Bearer ' . $oauth; + return $headers; + } + + protected function buildString($method, $url, $params) + { + $headers = []; + ksort($params); + foreach ($params as $key => $value) { + $headers[] = "$key=" . rawurlencode($value); + } + return $method . "&" . rawurlencode($url) . '&' . rawurlencode(implode('&', $headers)); + } + + protected function buildSignature($baseInfo) + { + $encodeKey = rawurlencode($this->consumer_secret) . '&' . rawurlencode($this->oauth_token_secret); + $oauthSignature = base64_encode(hash_hmac('sha1', $baseInfo, $encodeKey, true)); + return $oauthSignature; + } + + protected function getSignature($method, $url, $params = false) + { + $oauth = $this->oauth; + + if ($params == false) { + $baseInfo = $this->buildString($method, $url, $oauth); + $oauth['oauth_signature'] = $this->buildSignature($baseInfo); + } else { + $oauth = array_merge($oauth, $params); + $baseInfo = $this->buildString($method, $url, $oauth); + $oauth['oauth_signature'] = $this->buildSignature($baseInfo); + } + return $oauth; + } + + protected function reqCurl($method = 'GET', $url, $params = false, $headers = false, $postfields = false, $userpwd = false) + { + $ch = curl_init(); + + if ($params == false) { + curl_setopt($ch, CURLOPT_URL, $url); + } + + if ($params == true) { + curl_setopt($ch, CURLOPT_URL, $url . "?" . http_build_query($params)); + } + + if ($method == 'POST') { + curl_setopt($ch, CURLOPT_POST, true); + } + + if ($method == 'DELETE') { + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE'); + } + + if ($postfields == true) { + curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields); + } + + if ($headers == true) { + curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); + } + + if ($userpwd == true) { + curl_setopt($ch, CURLOPT_USERPWD, $this->consumer_key . ':' . $this->consumer_secret); + } + + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); + + $result = curl_exec($ch); + return $result; + } + + protected function request2($method, $req, $params = false) + { + + $req = substr($req, 1); + $url = $this->apiUrl . $req; + if ($this->oauth_token !== false && $this->oauth_token_secret == false) { + + $oauth = $this->buildBearerheaders($this->oauth); + $headers = []; + $headers[] = $oauth; + + } else { + + $oauth = $this->getSignature($method, $url); + $headers = []; + $headers[] = 'Content-type: application/json'; + $headers[] = $this->buildAutheaders($oauth); + } + + $result = $this->reqCurl($method, $url, null, $headers, $params); + return json_decode($result, true); + } + + public function request($method, $req, $params = false) + { + + $method = strtoupper($method); + + if ($req == 'media/upload') { + return $this->upload($method, $req, $params); + } + + $version = explode('/', $req); + if ($version[0] == '2') { + $req = "/$req"; + return $this->request2($method, $req, $params); + } + + if ($version[1] == '2') { + return $this->request2($method, $req, $params); + } + + if ($version[0] == 'labs') { + $req = "/$req"; + return $this->request2($method, $req, $params); + } + + if ($version[1] == 'labs') { + return $this->request2($method, $req, $params); + } + + $url = $this->apiStandardUrl . $req . ".json"; + + if ($this->oauth_token !== false && $this->oauth_token_secret == false) { + + $oauth = $this->buildBearerheaders($this->oauth); + $headers = []; + $headers[] = $oauth; + + } else { + + $oauth = $this->getSignature($method, $url, $params); + + $headers = []; + $headers[] = $this->buildAutheaders($oauth); + } + + $result = $this->reqCurl($method, $url, $params, $headers, null); + return json_decode($result, true); + + } + + protected function reqUpload($method, $req, $params) + { + $url = $this->apiUploadUrl . $req . ".json"; + $oauth = $this->getSignature($method, $url); + + $headers = []; + $headers[] = $this->buildAutheaders($oauth); + $headers[] = 'Content-Type: multipart/form-data'; + + $result = $this->reqCurl($method, $url, null, $headers, $params); + return json_decode($result, true); + } + + protected function uploadChunked($req, $params) + { + $_params = [ + 'command' => 'INIT', + 'total_bytes' => filesize($params['media']), + 'media_type' => $params['media_type'], + ]; + + if (isset($params['additional_owners'])) { + $_params['additional_owners'] = $params['additional_owners']; + } + + if (isset($params['media_category'])) { + $_params['media_category'] = $params['media_category']; + } + + $req = $this->reqUpload('POST', 'media/upload', $_params); + + $fp = fopen($params['media'], 'r'); + $segment_id = 0; + while (!feof($fp)) { + $chunk = fread($fp, 40960); + + $__params = [ + "command" => "APPEND", + "media_id" => $req['media_id'], + "segment_index" => $segment_id++, + 'media_data' => base64_encode($chunk), + ]; + $this->reqUpload('POST', 'media/upload', $__params); + } + fclose($fp); + $lastParams = array( + "command" => "FINALIZE", + "media_id" => $req['media_id'], + ); + $result = $this->reqUpload('POST', 'media/upload', $lastParams); + return $result; + } + + public function upload($method, $req, $params) + { + if ($method == 'GET') { + return "METHOD MUST BE POST"; + } + + $url = $this->apiUploadUrl . $req . ".json"; + $c = count($params); + if ($c == 1 && isset($params['media'])) { + + $filename = file_get_contents($params['media']); + $base64 = base64_encode($filename); + $_params = ['media_data' => $base64]; + return $this->reqUpload('POST', 'media/upload', $_params); + + } elseif ($c == 1 && isset($params['media_data'])) { + + $base64 = $params['media_data']; + $_params = ['media_data' => $base64]; + return $this->reqUpload('POST', 'media/upload', $_params); + + } else { + return $this->uploadChunked($req, $params); + } + + } + + public function file($oauthUrl) + { + + $oauth = $this->getSignature("GET", $oauthUrl); + + $headers = []; + $headers[] = $this->buildAutheaders($oauth); + + $result = $this->reqCurl("GET", $oauthUrl, null, $headers, null); + return $result; + + } + + public function oauth($req, $params) + { + $url = $this->apiUrl . $req; + + $oauth = $this->getSignature("POST", $url, $params); + $headers = []; + $headers[] = $this->buildAutheaders($oauth); + + $result = $this->reqCurl("POST", $url, $params, $headers, null); + parse_str($result, $arr); + return $arr; + + } + + public function url($req, $params) + { + $url = $this->apiUrl . $req . "?" . http_build_query($params); + return $url; + } + + public function oauth2($req, $params) + { + $url = $this->apiUrl . $req; + $result = $this->reqCurl("POST", $url, $params, null, null, true); + return json_decode($result, true); + } + +} diff --git a/twitter_bak/generique/inc/twitter.php b/twitter_bak/generique/inc/twitter.php new file mode 100644 index 0000000..131b657 --- /dev/null +++ b/twitter_bak/generique/inc/twitter.php @@ -0,0 +1,39 @@ +request('POST', 'media/upload', ['media' => $media]); + $media_id=$img['media_id']; + } + + $postfields = "{\"text\":\"$message\", \"media\": {\"media_ids\": [\"$media_id\"]}}"; + + $res = $twitter->request('POST', '/2/tweets', $postfields); + + return TRUE; + } + + public static function thanksRetweet() + { + return TRUE; + } + + public static function thanksFollowers() + { + return TRUE; + } + +} + +?> diff --git a/twitter_bak/generique/inc/twitter1.php b/twitter_bak/generique/inc/twitter1.php new file mode 100644 index 0000000..3b14f5d --- /dev/null +++ b/twitter_bak/generique/inc/twitter1.php @@ -0,0 +1,88 @@ +get('account/verify_credentials'); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + $parameters = array("status" => $message); + + if (($media != NULL)&&($media != '')) + { + $imageMedia = $twitter->upload('media/upload', array('media' => $media)); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + $parameters = array( + "status" => $message, + "media_ids" => $imageMedia->media_id_string); + } + + $statuses = $twitter->post("statuses/update", $parameters); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + return TRUE; + } + + public static function thanksRetweet() + { + $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET); + $content = $twitter->get('account/verify_credentials'); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + $results = $twitter->get('statuses/retweets_of_me'); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + /* TO DO */ + + return TRUE; + } + + public static function thanksFollowers() + { + $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET); + $content = $twitter->get('account/verify_credentials'); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + $results = $twitter->get('followers/list'); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + $followers = json_decode(file_get_contents('followers.json')); + foreach($results->users as $user) + if (!in_array($user->screen_name, $followers)) + { + $parameters = array("status" => '@'.$user->screen_name.' thanks following me !'); + $followers[] = $user->screen_name; + $statuses = $twitter->post("statuses/update", $parameters); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + break; // Un à la fois ... + } + file_put_contents('followers.json', json_encode($followers)); + + return TRUE; + } + +} + +?> diff --git a/twitter_bak/generique/inc/twitter2.php b/twitter_bak/generique/inc/twitter2.php new file mode 100644 index 0000000..0008de1 --- /dev/null +++ b/twitter_bak/generique/inc/twitter2.php @@ -0,0 +1,42 @@ +request('POST', 'media/upload', ['media' => $filename]); + $media_id='1739965196775346176'; + + $postfields = "{\"text\":\"$message\", \"media\": {\"media_ids\": [\"$media_id\"]}}"; + + $res = $twitter->request('POST', '/2/tweets', $postfields); + print_r($res); + + return TRUE; + } + + public static function thanksRetweet() + { + return TRUE; + } + + public static function thanksFollowers() + { + return TRUE; + } + +} + +?> diff --git a/twitter_bak/generique/inc/unit_test_twitter2.php b/twitter_bak/generique/inc/unit_test_twitter2.php new file mode 100644 index 0000000..2a16ea5 --- /dev/null +++ b/twitter_bak/generique/inc/unit_test_twitter2.php @@ -0,0 +1,7 @@ + diff --git a/twitter_bak/likebot/robot.php b/twitter_bak/likebot/robot.php new file mode 100644 index 0000000..e3ab030 --- /dev/null +++ b/twitter_bak/likebot/robot.php @@ -0,0 +1,50 @@ +get('account/verify_credentials'); +if ($twitter->getLastHttpCode() !== 200) return FALSE; + +$theSearch = [ + 'screen_name' => 'r_topisto', + 'count' => 1 +]; + +// --- +// --- envoi d'un LIKE +// --- +$results = $twitter->get('users/show', $theSearch); +$twitter->post('favorites/create', ['id' => $results->status->id_str]); + +?> diff --git a/twitter_bak/likebot/robot.sh b/twitter_bak/likebot/robot.sh new file mode 100755 index 0000000..ceea1c7 --- /dev/null +++ b/twitter_bak/likebot/robot.sh @@ -0,0 +1,19 @@ +#!/bin/bash +flag=$TMP_PATH/topisto_bot.flag + +if [ -f $flag ]; +then + echo "likebot_bot is already running !" + exit 0 +fi + +touch $flag + +cd $APPS_PATH/twitter/likebot + +if [ 4 -gt $((RANDOM % 100)) ] +then + php topisto.php +fi + +rm -f $flag diff --git a/twitter_bak/twitterbot/followers.json b/twitter_bak/twitterbot/followers.json new file mode 100644 index 0000000..d4c83fc --- /dev/null +++ b/twitter_bak/twitterbot/followers.json @@ -0,0 +1 @@ +["CryptoPressNews","ryushi_w","JoelPlatoon","JavierTomeo_","Baythuglife"] \ No newline at end of file diff --git a/twitter_bak/twitterbot/followers.json.example b/twitter_bak/twitterbot/followers.json.example new file mode 100644 index 0000000..9e62de5 --- /dev/null +++ b/twitter_bak/twitterbot/followers.json.example @@ -0,0 +1 @@ +["topisto42","UnnaxPayments","aureliusdrusus","solacedotcom","omgbtc","ohiobitcoin","LogicScience","redunisproject","Cryptocracy2020","fullstache","callblockapp","marketranger","TheCryptodamus","crypt0co","CryptoassetsUSA","Nadeem_nadi797","cryptomoneyz","BaseCyberSec","Tweetsintoabyss","anthkell98","grattonboy","mac_a_dam","devnullius","123wolfArmy","03018333860","JeffinkoGuru","BitJob_Team","rugigana","Crypto_info321","cointopic_","Chef_JeanPierre","Cienencom","btcltcdigger","AdzCoin_Gift","treyptrsn","n2yolo","SHL0M0ABADD0N","EdwardCulligan","promote_crypto","TheFutureShift","ErickCoval","RIMCorpPK","arhiezvanhoute1","ttoff85","actu_fintech","BeautyBubble","PDX_Trader","Yasirperdesi","cre8hyperledger","Thurse8","cre8capital","icobountyprogs","rob67803423","AphexTwin4ever"] \ No newline at end of file diff --git a/twitter_bak/twitterbot/inc/twitter.php b/twitter_bak/twitterbot/inc/twitter.php new file mode 100644 index 0000000..5785309 --- /dev/null +++ b/twitter_bak/twitterbot/inc/twitter.php @@ -0,0 +1,14 @@ + diff --git a/twitter_bak/twitterbot/inc/twitter1.php b/twitter_bak/twitterbot/inc/twitter1.php new file mode 100644 index 0000000..ee42296 --- /dev/null +++ b/twitter_bak/twitterbot/inc/twitter1.php @@ -0,0 +1,88 @@ +get('account/verify_credentials'); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + $parameters = array("status" => $message); + + if (($media != NULL)&&($media != '')) + { + $imageMedia = $twitter->upload('media/upload', array('media' => $media)); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + $parameters = array( + "status" => $message, + "media_ids" => $imageMedia->media_id_string); + } + + $statuses = $twitter->post("statuses/update", $parameters); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + return TRUE; + } + + public static function thanksRetweet() + { + $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET); + $content = $twitter->get('account/verify_credentials'); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + $results = $twitter->get('statuses/retweets_of_me'); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + /* TO DO */ + + return TRUE; + } + + public static function thanksFollowers() + { + $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET); + $content = $twitter->get('account/verify_credentials'); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + $results = $twitter->get('followers/list'); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + + $followers = json_decode(file_get_contents('followers.json')); + foreach($results->users as $user) + if (!in_array($user->screen_name, $followers)) + { + $parameters = array("status" => '@'.$user->screen_name.' thanks following me !'); + $followers[] = $user->screen_name; + $statuses = $twitter->post("statuses/update", $parameters); + if ($twitter->getLastHttpCode() !== 200) return FALSE; + break; // Un à la fois ... + } + file_put_contents('followers.json', json_encode($followers)); + + return TRUE; + } + +} + +?> diff --git a/twitter_bak/twitterbot/inc/twitter2.php b/twitter_bak/twitterbot/inc/twitter2.php new file mode 100644 index 0000000..e5352ad --- /dev/null +++ b/twitter_bak/twitterbot/inc/twitter2.php @@ -0,0 +1,14 @@ + diff --git a/twitter_bak/twitterbot/robot.php b/twitter_bak/twitterbot/robot.php new file mode 100644 index 0000000..ceccd14 --- /dev/null +++ b/twitter_bak/twitterbot/robot.php @@ -0,0 +1,78 @@ +encode($image_file, 'TOPISTO is making art with block '.$the_block->height); + $image->write($image_file); +*/ + + // --- + // --- Tweet + // --- + $tweet = "#computerart #creativecoding #generativeart :".PHP_EOL."#bitcoin #blockchain 's".PHP_EOL; + $tweet .= $argv[2]." Block, Height : ".$the_block->height.PHP_EOL; + $tweet .= "[ See more on www.topisto.net ]"; + $success = twitter::tweet($tweet, $image_file); +} + +?> diff --git a/twitter_bak/twitterbot/robot.sh b/twitter_bak/twitterbot/robot.sh new file mode 100755 index 0000000..b8a16d9 --- /dev/null +++ b/twitter_bak/twitterbot/robot.sh @@ -0,0 +1,66 @@ +#!/bin/bash +flag=$TMP_PATH/twitterbot_bot.flag + +if [ -f $flag ]; +then + echo "twitter_bot is already running !" + exit 0 +fi + +touch $flag + +cd $APPS_PATH/twitter/twitterbot + +# +# Tweet pour un assemblage de hash +# +for fichier in `ls -tr $DATA_PATH/hashes2hashes/*.png` +do + BLOCK_HASH=`basename $fichier .png` +done + +if [ 5 -gt $((RANDOM % 100)) ] +then + php robot.php $BLOCK_HASH CONFIRMED hashes2hashes + touch $DATA_PATH/twitterbot/$BLOCK_HASH +fi + +# +# Se lancer pour un tweet sur un block unique +# +BLOCK_LINE=`tail -n 1 $DATA_PATH/block_list.txt` +BLOCK_HASH=`echo ${BLOCK_LINE} | awk '{print $2}'` +BLOCK_NAME=`echo ${BLOCK_LINE} | awk '{print $1}'` +BLOCK_HEIGHT=`echo ${BLOCK_LINE} | awk '{print $3}'` + +# +# Dans 5% des cas, on tweet un bloc remarquable +# à la place du LAST +# +if [ 5 -gt $((RANDOM % 100)) ] +then + BLOCK_LINE=`grep -v $BLOCK_NAME $DATA_PATH/block_list.txt | shuf | head -n 1` + BLOCK_HASH=`echo ${BLOCK_LINE} | awk '{print $2}'` + BLOCK_NAME=`echo ${BLOCK_LINE} | awk '{print $1}'` + BLOCK_HEIGHT=`echo ${BLOCK_LINE} | awk '{print $3}'` +fi + +if [ -f $DATA_PATH/hasard/$BLOCK_HASH.png ] +then + if [ ! -f $DATA_PATH/twitterbot/$BLOCK_HASH ] + then + echo Tweet for $BLOCK_HASH $BLOCK_NAME + php robot.php $BLOCK_HASH $BLOCK_NAME hasard $BLOCK_HEIGHT + + # + # On met un marqueur pour ne pas retweeter + # plusieurs fois le LAST + # + if [[ "$BLOCK_NAME" == "LAST" ]] + then + touch $DATA_PATH/twitterbot/$BLOCK_HASH + fi + fi +fi + +rm -f $flag diff --git a/twitter_bak/twitterbot/robot1.php b/twitter_bak/twitterbot/robot1.php new file mode 100644 index 0000000..8b8f327 --- /dev/null +++ b/twitter_bak/twitterbot/robot1.php @@ -0,0 +1,78 @@ +encode($image_file, 'TOPISTO is making art with block '.$the_block->height); + $image->write($image_file); +*/ + + // --- + // --- Tweet + // --- + $tweet = "#computerart #creativecoding #generativeart :".PHP_EOL."#bitcoin #blockchain 's".PHP_EOL; + $tweet .= $argv[2]." Block, Height : ".$the_block->height.PHP_EOL; + $tweet .= "[ See more on www.topisto.net ]"; + $success = twitter::tweet($tweet, $image_file); +} + +?>