202312 - Twitter API v2
This commit is contained in:
@@ -78,6 +78,12 @@ class blockchain
|
|||||||
{
|
{
|
||||||
self::$special_blocks = array ();
|
self::$special_blocks = array ();
|
||||||
|
|
||||||
|
self::$special_blocks[] = new block(
|
||||||
|
'00000000000000000001e6d99b42a2fe649591e7b97b1d4327e2bc3ade53d6d7',
|
||||||
|
772923,
|
||||||
|
'BERNIQUE'
|
||||||
|
);
|
||||||
|
|
||||||
self::$special_blocks[] = new block(
|
self::$special_blocks[] = new block(
|
||||||
'00000000000000000001f5beb60d9ca47adf18db5136b558379ed533fc9f6c85',
|
'00000000000000000001f5beb60d9ca47adf18db5136b558379ed533fc9f6c85',
|
||||||
753335,
|
753335,
|
||||||
|
|||||||
+1
-1
@@ -26,7 +26,7 @@ LISTBLOCKS="GENESIS THE_ANSWER LUCIFER LEET \
|
|||||||
FIRST_USD_TX 2020JUMP10000 \
|
FIRST_USD_TX 2020JUMP10000 \
|
||||||
NO_REWARD MORNING_STAR SALVADOR \
|
NO_REWARD MORNING_STAR SALVADOR \
|
||||||
BAB_BRUXELLES POITIERS UKRAINE \
|
BAB_BRUXELLES POITIERS UKRAINE \
|
||||||
ELISABETH_2_HAS_DIED \
|
ELISABETH_2_HAS_DIED BERNIQUE \
|
||||||
LAST"
|
LAST"
|
||||||
|
|
||||||
for BLOCK in $LISTBLOCKS
|
for BLOCK in $LISTBLOCKS
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
define('TWITTER_WIDTH', 433);
|
||||||
|
define('TWITTER_HEIGHT', 363);
|
||||||
|
|
||||||
|
?>
|
||||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 357 KiB |
@@ -1,88 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Abraham\TwitterOAuth\TwitterOAuth;
|
|
||||||
|
|
||||||
// Twitter OAuth Settings:
|
|
||||||
/* TOPISTO */
|
/* TOPISTO */
|
||||||
define('CONSUMER_KEY', 'HBInbm93bM80z86XVJ34rtjxO');
|
define('CONSUMER_KEY', 'HBInbm93bM80z86XVJ34rtjxO');
|
||||||
define('CONSUMER_SECRET', 'zpdSp8yv9R2VODgPRA0RZbiO7VE8vSPNLVNg9zI0HjWnJKADO8');
|
define('CONSUMER_SECRET', 'zpdSp8yv9R2VODgPRA0RZbiO7VE8vSPNLVNg9zI0HjWnJKADO8');
|
||||||
define('ACCESS_TOKEN', '315679287-EjINhav5VbJPscb4h9pw3WwveeeX0ShpnIjcawDe');
|
define('ACCESS_TOKEN', '315679287-EjINhav5VbJPscb4h9pw3WwveeeX0ShpnIjcawDe');
|
||||||
define('ACCESS_TOKEN_SECRET', 'SIFKfPYEoIdlAyeQKVS3y067uNFuLpy013wRycJ8VxNcd');
|
define('ACCESS_TOKEN_SECRET', 'SIFKfPYEoIdlAyeQKVS3y067uNFuLpy013wRycJ8VxNcd');
|
||||||
|
|
||||||
/* R. Topisto
|
|
||||||
define('CONSUMER_KEY', '9Ie6CjwM5eZSQu5Xnbel4PBqm');
|
|
||||||
define('CONSUMER_SECRET', 'pI4ha5gW7Lft6Lg5xP7nH49Yqbm8PwLn1EP8D1qKg1q0SYd5t2');
|
|
||||||
define('ACCESS_TOKEN', '840479603143630849-c3xFLJFvo77ubP1njoXHpFu9LQqKLR8');
|
|
||||||
define('ACCESS_TOKEN_SECRET', 'EW4Zi10cQnNfoOunnEF1svJ3omz223U57G6KuYo5ZZ2Ls');
|
|
||||||
*/
|
|
||||||
|
|
||||||
define('TWITTER_WIDTH', 880);
|
|
||||||
define('TWITTER_HEIGHT', 440);
|
|
||||||
|
|
||||||
class twitter
|
|
||||||
{
|
|
||||||
public static function tweet($message, $media='')
|
|
||||||
{
|
|
||||||
$twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
|
|
||||||
$content = $twitter->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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require 'twitter.php';
|
||||||
|
require('../../generique/inc/twitter.php');
|
||||||
|
|
||||||
|
twitter::tweet('TOPISTO test API V2');
|
||||||
|
|
||||||
|
?>
|
||||||
@@ -21,6 +21,8 @@ require TOPISTO_PATH.'/ressources/vendor/autoload.php';
|
|||||||
// ---
|
// ---
|
||||||
require_once APP_PATH.'/blockchain/inc/block.php';
|
require_once APP_PATH.'/blockchain/inc/block.php';
|
||||||
require 'inc/twitter.php';
|
require 'inc/twitter.php';
|
||||||
|
require '../generique/inc/twitter.php';
|
||||||
|
require '../config.php';
|
||||||
|
|
||||||
$midnight = strtotime('today midnight');
|
$midnight = strtotime('today midnight');
|
||||||
|
|
||||||
@@ -71,11 +73,11 @@ if (file_exists($image_file))
|
|||||||
// ---
|
// ---
|
||||||
// --- Tweet
|
// --- Tweet
|
||||||
// ---
|
// ---
|
||||||
$tweet = "Lucky One on #bitcoin #blockchain 's".PHP_EOL;
|
$tweet = "Lucky One on #bitcoin #blockchain \\n";
|
||||||
$tweet .= "Someone put an empty block ...".PHP_EOL;
|
$tweet .= "Someone put an empty block ...\\n";
|
||||||
$tweet .= "And get the reward for it !".PHP_EOL;
|
$tweet .= "And get the reward for it !\\n";
|
||||||
$tweet .= "Block height : ".$the_block->height.PHP_EOL;
|
$tweet .= "Block height : ".$the_block->height;
|
||||||
$tweet .= "[ See more on www.topisto.net ]";
|
$tweet .= "\\n[ See more on www.topisto.net ]";
|
||||||
$success = twitter::tweet($tweet, $image_file);
|
$success = twitter::tweet($tweet, $image_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 357 KiB |
@@ -0,0 +1,324 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Twifer;
|
||||||
|
|
||||||
|
class API
|
||||||
|
{
|
||||||
|
protected $consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret;
|
||||||
|
protected $apiUrl = 'https://api.twitter.com/';
|
||||||
|
protected $apiStandardUrl = 'https://api.twitter.com/1.1/';
|
||||||
|
protected $apiUploadUrl = 'https://upload.twitter.com/1.1/';
|
||||||
|
protected $oauth = [];
|
||||||
|
|
||||||
|
public function __construct($consumer_key, $consumer_secret, $oauth_token = false, $oauth_token_secret = false)
|
||||||
|
{
|
||||||
|
$this->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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require 'twifer.php';
|
||||||
|
use Twifer\API;
|
||||||
|
|
||||||
|
class twitter
|
||||||
|
{
|
||||||
|
public static function tweet($message, $media='')
|
||||||
|
{
|
||||||
|
$twitter = new API(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
|
||||||
|
|
||||||
|
$postfields = "{\"text\":\"$message\"}";
|
||||||
|
|
||||||
|
if (($media != NULL)&&($media != '')){
|
||||||
|
$img = $twitter->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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Abraham\TwitterOAuth\TwitterOAuth;
|
||||||
|
|
||||||
|
// Twitter OAuth Settings:
|
||||||
|
/* TOPISTO */
|
||||||
|
define('CONSUMER_KEY', 'HBInbm93bM80z86XVJ34rtjxO');
|
||||||
|
define('CONSUMER_SECRET', 'zpdSp8yv9R2VODgPRA0RZbiO7VE8vSPNLVNg9zI0HjWnJKADO8');
|
||||||
|
define('ACCESS_TOKEN', '315679287-EjINhav5VbJPscb4h9pw3WwveeeX0ShpnIjcawDe');
|
||||||
|
define('ACCESS_TOKEN_SECRET', 'SIFKfPYEoIdlAyeQKVS3y067uNFuLpy013wRycJ8VxNcd');
|
||||||
|
|
||||||
|
/* R. Topisto
|
||||||
|
define('CONSUMER_KEY', '9Ie6CjwM5eZSQu5Xnbel4PBqm');
|
||||||
|
define('CONSUMER_SECRET', 'pI4ha5gW7Lft6Lg5xP7nH49Yqbm8PwLn1EP8D1qKg1q0SYd5t2');
|
||||||
|
define('ACCESS_TOKEN', '840479603143630849-c3xFLJFvo77ubP1njoXHpFu9LQqKLR8');
|
||||||
|
define('ACCESS_TOKEN_SECRET', 'EW4Zi10cQnNfoOunnEF1svJ3omz223U57G6KuYo5ZZ2Ls');
|
||||||
|
*/
|
||||||
|
|
||||||
|
define('TWITTER_WIDTH', 880);
|
||||||
|
define('TWITTER_HEIGHT', 440);
|
||||||
|
|
||||||
|
class twitter
|
||||||
|
{
|
||||||
|
public static function tweet($message, $media='')
|
||||||
|
{
|
||||||
|
$twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
|
||||||
|
$content = $twitter->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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require 'twifer.php';
|
||||||
|
use Twifer\API;
|
||||||
|
|
||||||
|
/* TOPISTO */
|
||||||
|
define('CONSUMER_KEY', 'HBInbm93bM80z86XVJ34rtjxO');
|
||||||
|
define('CONSUMER_SECRET', 'zpdSp8yv9R2VODgPRA0RZbiO7VE8vSPNLVNg9zI0HjWnJKADO8');
|
||||||
|
define('ACCESS_TOKEN', '315679287-EjINhav5VbJPscb4h9pw3WwveeeX0ShpnIjcawDe');
|
||||||
|
define('ACCESS_TOKEN_SECRET', 'SIFKfPYEoIdlAyeQKVS3y067uNFuLpy013wRycJ8VxNcd');
|
||||||
|
|
||||||
|
class twitter
|
||||||
|
{
|
||||||
|
public static function tweet($message, $media='')
|
||||||
|
{
|
||||||
|
$twitter = new API(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
|
||||||
|
|
||||||
|
$filename = '0000000000000000000034a2ed514ecda92b8b88593b0bc8e6ffffc978721c25.png';
|
||||||
|
//$img = $twitter->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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require 'twitter2.php';
|
||||||
|
|
||||||
|
twitter::tweet('TOPISTO test API V2');
|
||||||
|
|
||||||
|
?>
|
||||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 357 KiB |
@@ -1,88 +1,14 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Abraham\TwitterOAuth\TwitterOAuth;
|
|
||||||
|
|
||||||
// Twitter OAuth Settings:
|
|
||||||
/* TOPISTO
|
|
||||||
define('CONSUMER_KEY', 'HBInbm93bM80z86XVJ34rtjxO');
|
|
||||||
define('CONSUMER_SECRET', 'zpdSp8yv9R2VODgPRA0RZbiO7VE8vSPNLVNg9zI0HjWnJKADO8');
|
|
||||||
define('ACCESS_TOKEN', '315679287-EjINhav5VbJPscb4h9pw3WwveeeX0ShpnIjcawDe');
|
|
||||||
define('ACCESS_TOKEN_SECRET', 'SIFKfPYEoIdlAyeQKVS3y067uNFuLpy013wRycJ8VxNcd');
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* R. Topisto */
|
/* R. Topisto */
|
||||||
define('CONSUMER_KEY', '9Ie6CjwM5eZSQu5Xnbel4PBqm');
|
define('CONSUMER_KEY', '9Ie6CjwM5eZSQu5Xnbel4PBqm');
|
||||||
define('CONSUMER_SECRET', 'pI4ha5gW7Lft6Lg5xP7nH49Yqbm8PwLn1EP8D1qKg1q0SYd5t2');
|
define('CONSUMER_SECRET', 'pI4ha5gW7Lft6Lg5xP7nH49Yqbm8PwLn1EP8D1qKg1q0SYd5t2');
|
||||||
define('ACCESS_TOKEN', '840479603143630849-c3xFLJFvo77ubP1njoXHpFu9LQqKLR8');
|
define('ACCESS_TOKEN', '840479603143630849-c3xFLJFvo77ubP1njoXHpFu9LQqKLR8');
|
||||||
define('ACCESS_TOKEN_SECRET', 'EW4Zi10cQnNfoOunnEF1svJ3omz223U57G6KuYo5ZZ2Ls');
|
define('ACCESS_TOKEN_SECRET', 'EW4Zi10cQnNfoOunnEF1svJ3omz223U57G6KuYo5ZZ2Ls');
|
||||||
|
|
||||||
define('TWITTER_WIDTH', 880);
|
// Client ID
|
||||||
define('TWITTER_HEIGHT', 440);
|
// TE5jWFRIVTZVQkdnT2FIeEJyYTY6MTpjaQ
|
||||||
|
// Client Secret
|
||||||
class twitter
|
// GyZkEE69j0UPPKfmal9tT287-ZVw7vQbV20qvDPTFLCgNOplUk
|
||||||
{
|
|
||||||
public static function tweet($message, $media='')
|
|
||||||
{
|
|
||||||
$twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
|
|
||||||
$content = $twitter->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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|||||||
@@ -0,0 +1,88 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Abraham\TwitterOAuth\TwitterOAuth;
|
||||||
|
|
||||||
|
// Twitter OAuth Settings:
|
||||||
|
/* TOPISTO
|
||||||
|
define('CONSUMER_KEY', 'HBInbm93bM80z86XVJ34rtjxO');
|
||||||
|
define('CONSUMER_SECRET', 'zpdSp8yv9R2VODgPRA0RZbiO7VE8vSPNLVNg9zI0HjWnJKADO8');
|
||||||
|
define('ACCESS_TOKEN', '315679287-EjINhav5VbJPscb4h9pw3WwveeeX0ShpnIjcawDe');
|
||||||
|
define('ACCESS_TOKEN_SECRET', 'SIFKfPYEoIdlAyeQKVS3y067uNFuLpy013wRycJ8VxNcd');
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* R. Topisto */
|
||||||
|
define('CONSUMER_KEY', '9Ie6CjwM5eZSQu5Xnbel4PBqm');
|
||||||
|
define('CONSUMER_SECRET', 'pI4ha5gW7Lft6Lg5xP7nH49Yqbm8PwLn1EP8D1qKg1q0SYd5t2');
|
||||||
|
define('ACCESS_TOKEN', '840479603143630849-c3xFLJFvo77ubP1njoXHpFu9LQqKLR8');
|
||||||
|
define('ACCESS_TOKEN_SECRET', 'EW4Zi10cQnNfoOunnEF1svJ3omz223U57G6KuYo5ZZ2Ls');
|
||||||
|
|
||||||
|
define('TWITTER_WIDTH', 880);
|
||||||
|
define('TWITTER_HEIGHT', 440);
|
||||||
|
|
||||||
|
class twitter
|
||||||
|
{
|
||||||
|
public static function tweet($message, $media='')
|
||||||
|
{
|
||||||
|
$twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
|
||||||
|
$content = $twitter->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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/* R. Topisto */
|
||||||
|
define('CONSUMER_KEY', '9Ie6CjwM5eZSQu5Xnbel4PBqm');
|
||||||
|
define('CONSUMER_SECRET', 'pI4ha5gW7Lft6Lg5xP7nH49Yqbm8PwLn1EP8D1qKg1q0SYd5t2');
|
||||||
|
define('ACCESS_TOKEN', '840479603143630849-c3xFLJFvo77ubP1njoXHpFu9LQqKLR8');
|
||||||
|
define('ACCESS_TOKEN_SECRET', 'EW4Zi10cQnNfoOunnEF1svJ3omz223U57G6KuYo5ZZ2Ls');
|
||||||
|
|
||||||
|
// Client ID
|
||||||
|
// TE5jWFRIVTZVQkdnT2FIeEJyYTY6MTpjaQ
|
||||||
|
// Client Secret
|
||||||
|
// GyZkEE69j0UPPKfmal9tT287-ZVw7vQbV20qvDPTFLCgNOplUk
|
||||||
|
|
||||||
|
?>
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require 'twitter.php';
|
||||||
|
require '../../generique/inc/twitter.php';
|
||||||
|
|
||||||
|
twitter::tweet('TOPISTO test API V2');
|
||||||
|
|
||||||
|
?>
|
||||||
@@ -21,6 +21,8 @@ require TOPISTO_PATH.'/ressources/vendor/autoload.php';
|
|||||||
// ---
|
// ---
|
||||||
require_once APP_PATH.'/blockchain/inc/block.php';
|
require_once APP_PATH.'/blockchain/inc/block.php';
|
||||||
require 'inc/twitter.php';
|
require 'inc/twitter.php';
|
||||||
|
require '../generique/inc/twitter.php';
|
||||||
|
require '../config.php';
|
||||||
|
|
||||||
$methode='spline';
|
$methode='spline';
|
||||||
if (isset($argv[3])) $methode=$argv[3];
|
if (isset($argv[3])) $methode=$argv[3];
|
||||||
@@ -32,17 +34,19 @@ if ($the_block === FALSE) die();
|
|||||||
// ---
|
// ---
|
||||||
// --- Remercier les followers
|
// --- Remercier les followers
|
||||||
// ---
|
// ---
|
||||||
twitter::thanksFollowers();
|
// twitter::thanksFollowers();
|
||||||
|
|
||||||
$image_file=DATA_PATH."/$methode/".$argv[1].'.png';
|
$image_file=DATA_PATH."/$methode/".$argv[1].'.png';
|
||||||
|
|
||||||
if (file_exists($image_file))
|
if (file_exists($image_file))
|
||||||
{
|
{
|
||||||
$image_origine = imagecreatefrompng($image_file);
|
$image_origine = imagecreatefrompng($image_file);
|
||||||
$image_twitter = imagecreatetruecolor(TWITTER_WIDTH, TWITTER_HEIGHT);
|
|
||||||
|
|
||||||
$fond = imagecolorallocate($image_twitter, 255, 255, 255);
|
if (image_origine) {
|
||||||
//imagecolortransparent($image_twitter, $fond);
|
$image_twitter = imagecreatetruecolor(TWITTER_WIDTH, TWITTER_HEIGHT);
|
||||||
|
if ($image_twitter) {
|
||||||
|
|
||||||
|
$fond = imagecolorallocate($image_twitter, 0, 0, 0);
|
||||||
imagefilledrectangle($image_twitter, 0, 0, TWITTER_WIDTH, TWITTER_HEIGHT, $fond);
|
imagefilledrectangle($image_twitter, 0, 0, TWITTER_WIDTH, TWITTER_HEIGHT, $fond);
|
||||||
|
|
||||||
$ratio = TWITTER_HEIGHT / imagesy($image_origine);
|
$ratio = TWITTER_HEIGHT / imagesy($image_origine);
|
||||||
@@ -55,7 +59,10 @@ if (file_exists($image_file))
|
|||||||
|
|
||||||
$image_file = DATA_PATH."/twitterbot/".$argv[1].'.png';
|
$image_file = DATA_PATH."/twitterbot/".$argv[1].'.png';
|
||||||
|
|
||||||
imagepng($image_twitter,$image_file);
|
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 ...
|
// --- Un petit peu de stéganographie ...
|
||||||
@@ -69,9 +76,9 @@ if (file_exists($image_file))
|
|||||||
// ---
|
// ---
|
||||||
// --- Tweet
|
// --- Tweet
|
||||||
// ---
|
// ---
|
||||||
$tweet = "#computerart #creativecoding #generativeart :".PHP_EOL."#bitcoin #blockchain 's".PHP_EOL;
|
$tweet = "#computerart #creativecoding #generativeart :\\n#bitcoin #blockchain \\n";
|
||||||
$tweet .= $argv[2]." Block, Height : ".$the_block->height.PHP_EOL;
|
$tweet .= $argv[2]." Block, Height : ".$the_block->height;
|
||||||
$tweet .= "[ See more on www.topisto.net ]";
|
$tweet .= "\\n[ See more on www.topisto.net ]";
|
||||||
$success = twitter::tweet($tweet, $image_file);
|
$success = twitter::tweet($tweet, $image_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -47,10 +47,12 @@ fi
|
|||||||
|
|
||||||
if [ -f $DATA_PATH/hasard/$BLOCK_HASH.png ]
|
if [ -f $DATA_PATH/hasard/$BLOCK_HASH.png ]
|
||||||
then
|
then
|
||||||
|
echo Suppression $DATA_PATH/twitterbot/$BLOCK_HASH
|
||||||
|
rm $DATA_PATH/twitterbot/$BLOCK_HASH
|
||||||
if [ ! -f $DATA_PATH/twitterbot/$BLOCK_HASH ]
|
if [ ! -f $DATA_PATH/twitterbot/$BLOCK_HASH ]
|
||||||
then
|
then
|
||||||
echo Tweet for $BLOCK_HASH $BLOCK_NAME
|
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
|
# On met un marqueur pour ne pas retweeter
|
||||||
|
|||||||
@@ -0,0 +1,78 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// ---
|
||||||
|
// --- Listening to blockchain.info to get the last block
|
||||||
|
// --- Drawing the block as a Treemap
|
||||||
|
// --- Tweet it
|
||||||
|
// ---
|
||||||
|
|
||||||
|
// ---
|
||||||
|
// --- La config globale
|
||||||
|
// ---
|
||||||
|
require_once '../../global/inc/config.php';
|
||||||
|
|
||||||
|
// ---
|
||||||
|
// --- External dependances
|
||||||
|
// ---
|
||||||
|
require TOPISTO_PATH.'/ressources/vendor/autoload.php';
|
||||||
|
|
||||||
|
// ---
|
||||||
|
// --- Internal dependances
|
||||||
|
// ---
|
||||||
|
require_once APP_PATH.'/blockchain/inc/block.php';
|
||||||
|
require 'inc/twitter.php';
|
||||||
|
|
||||||
|
$methode='spline';
|
||||||
|
if (isset($argv[3])) $methode=$argv[3];
|
||||||
|
|
||||||
|
$block_hash = $argv[1];
|
||||||
|
$the_block = blockchain::getBlockWithHash($block_hash);
|
||||||
|
if ($the_block === FALSE) die();
|
||||||
|
|
||||||
|
// ---
|
||||||
|
// --- Remercier les followers
|
||||||
|
// ---
|
||||||
|
// 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);
|
||||||
|
|
||||||
|
$ratio = TWITTER_HEIGHT / imagesy($image_origine);
|
||||||
|
$new_width = $ratio * imagesx($image_origine);
|
||||||
|
|
||||||
|
$xpos = floor((TWITTER_WIDTH - $new_width) / 2);
|
||||||
|
$ypos = 0;
|
||||||
|
|
||||||
|
imagecopyresized($image_twitter, $image_origine, $xpos, $ypos, 0, 0, $new_width, TWITTER_HEIGHT, imagesx($image_origine), imagesy($image_origine));
|
||||||
|
|
||||||
|
$image_file = DATA_PATH."/twitterbot/".$argv[1].'.png';
|
||||||
|
|
||||||
|
imagepng($image_twitter,$image_file);
|
||||||
|
|
||||||
|
// ---
|
||||||
|
// --- Un petit peu de stéganographie ...
|
||||||
|
// ---
|
||||||
|
/* Ca fait des fichiers trop gros !
|
||||||
|
$processor = new KzykHys\Steganography\Processor();
|
||||||
|
$image = $processor->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);
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
@@ -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"]
|
||||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 357 KiB |
@@ -0,0 +1,324 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Twifer;
|
||||||
|
|
||||||
|
class API
|
||||||
|
{
|
||||||
|
protected $consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret;
|
||||||
|
protected $apiUrl = 'https://api.twitter.com/';
|
||||||
|
protected $apiStandardUrl = 'https://api.twitter.com/1.1/';
|
||||||
|
protected $apiUploadUrl = 'https://upload.twitter.com/1.1/';
|
||||||
|
protected $oauth = [];
|
||||||
|
|
||||||
|
public function __construct($consumer_key, $consumer_secret, $oauth_token = false, $oauth_token_secret = false)
|
||||||
|
{
|
||||||
|
$this->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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/* TOPISTO */
|
||||||
|
define('CONSUMER_KEY', 'HBInbm93bM80z86XVJ34rtjxO');
|
||||||
|
define('CONSUMER_SECRET', 'zpdSp8yv9R2VODgPRA0RZbiO7VE8vSPNLVNg9zI0HjWnJKADO8');
|
||||||
|
define('ACCESS_TOKEN', '315679287-EjINhav5VbJPscb4h9pw3WwveeeX0ShpnIjcawDe');
|
||||||
|
define('ACCESS_TOKEN_SECRET', 'SIFKfPYEoIdlAyeQKVS3y067uNFuLpy013wRycJ8VxNcd');
|
||||||
|
|
||||||
|
// Client ID
|
||||||
|
// TE5jWFRIVTZVQkdnT2FIeEJyYTY6MTpjaQ
|
||||||
|
// Client Secret
|
||||||
|
// GyZkEE69j0UPPKfmal9tT287-ZVw7vQbV20qvDPTFLCgNOplUk
|
||||||
|
|
||||||
|
?>
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Abraham\TwitterOAuth\TwitterOAuth;
|
||||||
|
|
||||||
|
// Twitter OAuth Settings:
|
||||||
|
/* TOPISTO */
|
||||||
|
define('CONSUMER_KEY', 'HBInbm93bM80z86XVJ34rtjxO');
|
||||||
|
define('CONSUMER_SECRET', 'zpdSp8yv9R2VODgPRA0RZbiO7VE8vSPNLVNg9zI0HjWnJKADO8');
|
||||||
|
define('ACCESS_TOKEN', '315679287-EjINhav5VbJPscb4h9pw3WwveeeX0ShpnIjcawDe');
|
||||||
|
define('ACCESS_TOKEN_SECRET', 'SIFKfPYEoIdlAyeQKVS3y067uNFuLpy013wRycJ8VxNcd');
|
||||||
|
|
||||||
|
/* R. Topisto
|
||||||
|
define('CONSUMER_KEY', '9Ie6CjwM5eZSQu5Xnbel4PBqm');
|
||||||
|
define('CONSUMER_SECRET', 'pI4ha5gW7Lft6Lg5xP7nH49Yqbm8PwLn1EP8D1qKg1q0SYd5t2');
|
||||||
|
define('ACCESS_TOKEN', '840479603143630849-c3xFLJFvo77ubP1njoXHpFu9LQqKLR8');
|
||||||
|
define('ACCESS_TOKEN_SECRET', 'EW4Zi10cQnNfoOunnEF1svJ3omz223U57G6KuYo5ZZ2Ls');
|
||||||
|
*/
|
||||||
|
|
||||||
|
define('TWITTER_WIDTH', 880);
|
||||||
|
define('TWITTER_HEIGHT', 440);
|
||||||
|
|
||||||
|
class twitter
|
||||||
|
{
|
||||||
|
public static function tweet($message, $media='')
|
||||||
|
{
|
||||||
|
$twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
|
||||||
|
$content = $twitter->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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require 'twifer.php';
|
||||||
|
use Twifer\API;
|
||||||
|
|
||||||
|
/* TOPISTO */
|
||||||
|
define('CONSUMER_KEY', 'HBInbm93bM80z86XVJ34rtjxO');
|
||||||
|
define('CONSUMER_SECRET', 'zpdSp8yv9R2VODgPRA0RZbiO7VE8vSPNLVNg9zI0HjWnJKADO8');
|
||||||
|
define('ACCESS_TOKEN', '315679287-EjINhav5VbJPscb4h9pw3WwveeeX0ShpnIjcawDe');
|
||||||
|
define('ACCESS_TOKEN_SECRET', 'SIFKfPYEoIdlAyeQKVS3y067uNFuLpy013wRycJ8VxNcd');
|
||||||
|
|
||||||
|
class twitter
|
||||||
|
{
|
||||||
|
public static function tweet($message, $media='')
|
||||||
|
{
|
||||||
|
$twitter = new API(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
|
||||||
|
|
||||||
|
$filename = '0000000000000000000034a2ed514ecda92b8b88593b0bc8e6ffffc978721c25.png';
|
||||||
|
//$img = $twitter->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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require 'twitter2.php';
|
||||||
|
|
||||||
|
twitter::tweet('TOPISTO test API V2');
|
||||||
|
|
||||||
|
?>
|
||||||
@@ -0,0 +1,83 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// ---
|
||||||
|
// --- Listening to blockchain.info to get the last block
|
||||||
|
// --- Drawing the block as a Treemap
|
||||||
|
// --- Tweet it
|
||||||
|
// ---
|
||||||
|
|
||||||
|
// ---
|
||||||
|
// --- La config globale
|
||||||
|
// ---
|
||||||
|
require_once '../../global/inc/config.php';
|
||||||
|
|
||||||
|
// ---
|
||||||
|
// --- External dependances
|
||||||
|
// ---
|
||||||
|
require TOPISTO_PATH.'/ressources/vendor/autoload.php';
|
||||||
|
|
||||||
|
// ---
|
||||||
|
// --- Internal dependances
|
||||||
|
// ---
|
||||||
|
require_once APP_PATH.'/blockchain/inc/block.php';
|
||||||
|
require 'inc/twitter.php';
|
||||||
|
require '../generique/inc/twitter.php';
|
||||||
|
|
||||||
|
$midnight = strtotime('today midnight');
|
||||||
|
|
||||||
|
$methode='spline';
|
||||||
|
if (isset($argv[3])) $methode=$argv[3];
|
||||||
|
|
||||||
|
$block_hash = $argv[1];
|
||||||
|
$the_block = blockchain::getBlockWithHash($block_hash);
|
||||||
|
if ($the_block === FALSE) die();
|
||||||
|
|
||||||
|
// ---
|
||||||
|
// --- Remercier les followers ?
|
||||||
|
// ---
|
||||||
|
// 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);
|
||||||
|
|
||||||
|
$ratio = TWITTER_HEIGHT / imagesy($image_origine);
|
||||||
|
$new_width = $ratio * imagesx($image_origine);
|
||||||
|
|
||||||
|
$xpos = floor((TWITTER_WIDTH - $new_width) / 2);
|
||||||
|
$ypos = 0;
|
||||||
|
|
||||||
|
imagecopyresized($image_twitter, $image_origine, $xpos, $ypos, 0, 0, $new_width, TWITTER_HEIGHT, imagesx($image_origine), imagesy($image_origine));
|
||||||
|
|
||||||
|
$image_file = DATA_PATH."/emptybot/".$argv[1].'.png';
|
||||||
|
|
||||||
|
imagepng($image_twitter,$image_file);
|
||||||
|
|
||||||
|
// ---
|
||||||
|
// --- Un petit peu de stéganographie ...
|
||||||
|
// ---
|
||||||
|
/* Ca fait des fichiers trop gros !
|
||||||
|
$processor = new KzykHys\Steganography\Processor();
|
||||||
|
$image = $processor->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);
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
Executable
+38
@@ -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
|
||||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 357 KiB |
@@ -0,0 +1,324 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Twifer;
|
||||||
|
|
||||||
|
class API
|
||||||
|
{
|
||||||
|
protected $consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret;
|
||||||
|
protected $apiUrl = 'https://api.twitter.com/';
|
||||||
|
protected $apiStandardUrl = 'https://api.twitter.com/1.1/';
|
||||||
|
protected $apiUploadUrl = 'https://upload.twitter.com/1.1/';
|
||||||
|
protected $oauth = [];
|
||||||
|
|
||||||
|
public function __construct($consumer_key, $consumer_secret, $oauth_token = false, $oauth_token_secret = false)
|
||||||
|
{
|
||||||
|
$this->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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require '../../generique/inc/twifer.php';
|
||||||
|
use Twifer\API;
|
||||||
|
|
||||||
|
class twitter
|
||||||
|
{
|
||||||
|
public static function tweet($message, $media='')
|
||||||
|
{
|
||||||
|
$twitter = new API(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
|
||||||
|
|
||||||
|
$filename = '0000000000000000000034a2ed514ecda92b8b88593b0bc8e6ffffc978721c25.png';
|
||||||
|
$media_id='1739965196775346176';
|
||||||
|
|
||||||
|
if (($media != NULL)&&($media != '')){
|
||||||
|
$img = $twitter->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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Abraham\TwitterOAuth\TwitterOAuth;
|
||||||
|
|
||||||
|
// Twitter OAuth Settings:
|
||||||
|
/* TOPISTO */
|
||||||
|
define('CONSUMER_KEY', 'HBInbm93bM80z86XVJ34rtjxO');
|
||||||
|
define('CONSUMER_SECRET', 'zpdSp8yv9R2VODgPRA0RZbiO7VE8vSPNLVNg9zI0HjWnJKADO8');
|
||||||
|
define('ACCESS_TOKEN', '315679287-EjINhav5VbJPscb4h9pw3WwveeeX0ShpnIjcawDe');
|
||||||
|
define('ACCESS_TOKEN_SECRET', 'SIFKfPYEoIdlAyeQKVS3y067uNFuLpy013wRycJ8VxNcd');
|
||||||
|
|
||||||
|
/* R. Topisto
|
||||||
|
define('CONSUMER_KEY', '9Ie6CjwM5eZSQu5Xnbel4PBqm');
|
||||||
|
define('CONSUMER_SECRET', 'pI4ha5gW7Lft6Lg5xP7nH49Yqbm8PwLn1EP8D1qKg1q0SYd5t2');
|
||||||
|
define('ACCESS_TOKEN', '840479603143630849-c3xFLJFvo77ubP1njoXHpFu9LQqKLR8');
|
||||||
|
define('ACCESS_TOKEN_SECRET', 'EW4Zi10cQnNfoOunnEF1svJ3omz223U57G6KuYo5ZZ2Ls');
|
||||||
|
*/
|
||||||
|
|
||||||
|
define('TWITTER_WIDTH', 880);
|
||||||
|
define('TWITTER_HEIGHT', 440);
|
||||||
|
|
||||||
|
class twitter
|
||||||
|
{
|
||||||
|
public static function tweet($message, $media='')
|
||||||
|
{
|
||||||
|
$twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
|
||||||
|
$content = $twitter->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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require 'twifer.php';
|
||||||
|
use Twifer\API;
|
||||||
|
|
||||||
|
/* TOPISTO */
|
||||||
|
define('CONSUMER_KEY', 'HBInbm93bM80z86XVJ34rtjxO');
|
||||||
|
define('CONSUMER_SECRET', 'zpdSp8yv9R2VODgPRA0RZbiO7VE8vSPNLVNg9zI0HjWnJKADO8');
|
||||||
|
define('ACCESS_TOKEN', '315679287-EjINhav5VbJPscb4h9pw3WwveeeX0ShpnIjcawDe');
|
||||||
|
define('ACCESS_TOKEN_SECRET', 'SIFKfPYEoIdlAyeQKVS3y067uNFuLpy013wRycJ8VxNcd');
|
||||||
|
|
||||||
|
class twitter
|
||||||
|
{
|
||||||
|
public static function tweet($message, $media='')
|
||||||
|
{
|
||||||
|
$twitter = new API(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
|
||||||
|
|
||||||
|
$filename = '0000000000000000000034a2ed514ecda92b8b88593b0bc8e6ffffc978721c25.png';
|
||||||
|
//$img = $twitter->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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require 'twitter2.php';
|
||||||
|
|
||||||
|
twitter::tweet('TOPISTO test API V2');
|
||||||
|
|
||||||
|
?>
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// ---
|
||||||
|
// --- Get last R. Topisto 's tweet
|
||||||
|
// --- Send a LIKE or ReTweet it.
|
||||||
|
// ---
|
||||||
|
|
||||||
|
// ---
|
||||||
|
// --- La config globale
|
||||||
|
// ---
|
||||||
|
require_once '../../global/inc/config.php';
|
||||||
|
|
||||||
|
// ---
|
||||||
|
// --- External dependances
|
||||||
|
// ---
|
||||||
|
require TOPISTO_PATH.'/ressources/vendor/autoload.php';
|
||||||
|
|
||||||
|
use Abraham\TwitterOAuth\TwitterOAuth;
|
||||||
|
|
||||||
|
// Twitter OAuth Settings:
|
||||||
|
/* TOPISTO
|
||||||
|
define('CONSUMER_KEY', 'HBInbm93bM80z86XVJ34rtjxO');
|
||||||
|
define('CONSUMER_SECRET', 'zpdSp8yv9R2VODgPRA0RZbiO7VE8vSPNLVNg9zI0HjWnJKADO8');
|
||||||
|
define('ACCESS_TOKEN', '315679287-EjINhav5VbJPscb4h9pw3WwveeeX0ShpnIjcawDe');
|
||||||
|
define('ACCESS_TOKEN_SECRET', 'SIFKfPYEoIdlAyeQKVS3y067uNFuLpy013wRycJ8VxNcd');
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* R. Topisto */
|
||||||
|
define('CONSUMER_KEY', '9Ie6CjwM5eZSQu5Xnbel4PBqm');
|
||||||
|
define('CONSUMER_SECRET', 'pI4ha5gW7Lft6Lg5xP7nH49Yqbm8PwLn1EP8D1qKg1q0SYd5t2');
|
||||||
|
define('ACCESS_TOKEN', '840479603143630849-c3xFLJFvo77ubP1njoXHpFu9LQqKLR8');
|
||||||
|
define('ACCESS_TOKEN_SECRET', 'EW4Zi10cQnNfoOunnEF1svJ3omz223U57G6KuYo5ZZ2Ls');
|
||||||
|
|
||||||
|
|
||||||
|
$twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
|
||||||
|
$content = $twitter->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]);
|
||||||
|
|
||||||
|
?>
|
||||||
Executable
+19
@@ -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
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
["CryptoPressNews","ryushi_w","JoelPlatoon","JavierTomeo_","Baythuglife"]
|
||||||
@@ -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"]
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/* R. Topisto */
|
||||||
|
define('CONSUMER_KEY', '9Ie6CjwM5eZSQu5Xnbel4PBqm');
|
||||||
|
define('CONSUMER_SECRET', 'pI4ha5gW7Lft6Lg5xP7nH49Yqbm8PwLn1EP8D1qKg1q0SYd5t2');
|
||||||
|
define('ACCESS_TOKEN', '840479603143630849-c3xFLJFvo77ubP1njoXHpFu9LQqKLR8');
|
||||||
|
define('ACCESS_TOKEN_SECRET', 'EW4Zi10cQnNfoOunnEF1svJ3omz223U57G6KuYo5ZZ2Ls');
|
||||||
|
|
||||||
|
// Client ID
|
||||||
|
// bjhuSFhSOExJc1Z2aG91ZXN3ZDk6MTpjaQ
|
||||||
|
// Client Secret
|
||||||
|
// ICMEoR-soYXA8Xut6a1kF8aOEq2qm0cMu7vDEivL15w_D0YVvx
|
||||||
|
|
||||||
|
?>
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Abraham\TwitterOAuth\TwitterOAuth;
|
||||||
|
|
||||||
|
// Twitter OAuth Settings:
|
||||||
|
/* TOPISTO
|
||||||
|
define('CONSUMER_KEY', 'HBInbm93bM80z86XVJ34rtjxO');
|
||||||
|
define('CONSUMER_SECRET', 'zpdSp8yv9R2VODgPRA0RZbiO7VE8vSPNLVNg9zI0HjWnJKADO8');
|
||||||
|
define('ACCESS_TOKEN', '315679287-EjINhav5VbJPscb4h9pw3WwveeeX0ShpnIjcawDe');
|
||||||
|
define('ACCESS_TOKEN_SECRET', 'SIFKfPYEoIdlAyeQKVS3y067uNFuLpy013wRycJ8VxNcd');
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* R. Topisto */
|
||||||
|
define('CONSUMER_KEY', '9Ie6CjwM5eZSQu5Xnbel4PBqm');
|
||||||
|
define('CONSUMER_SECRET', 'pI4ha5gW7Lft6Lg5xP7nH49Yqbm8PwLn1EP8D1qKg1q0SYd5t2');
|
||||||
|
define('ACCESS_TOKEN', '840479603143630849-c3xFLJFvo77ubP1njoXHpFu9LQqKLR8');
|
||||||
|
define('ACCESS_TOKEN_SECRET', 'EW4Zi10cQnNfoOunnEF1svJ3omz223U57G6KuYo5ZZ2Ls');
|
||||||
|
|
||||||
|
define('TWITTER_WIDTH', 880);
|
||||||
|
define('TWITTER_HEIGHT', 440);
|
||||||
|
|
||||||
|
class twitter
|
||||||
|
{
|
||||||
|
public static function tweet($message, $media='')
|
||||||
|
{
|
||||||
|
$twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
|
||||||
|
$content = $twitter->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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/* R. Topisto */
|
||||||
|
define('CONSUMER_KEY', '9Ie6CjwM5eZSQu5Xnbel4PBqm');
|
||||||
|
define('CONSUMER_SECRET', 'pI4ha5gW7Lft6Lg5xP7nH49Yqbm8PwLn1EP8D1qKg1q0SYd5t2');
|
||||||
|
define('ACCESS_TOKEN', '840479603143630849-c3xFLJFvo77ubP1njoXHpFu9LQqKLR8');
|
||||||
|
define('ACCESS_TOKEN_SECRET', 'EW4Zi10cQnNfoOunnEF1svJ3omz223U57G6KuYo5ZZ2Ls');
|
||||||
|
|
||||||
|
// Client ID
|
||||||
|
// TE5jWFRIVTZVQkdnT2FIeEJyYTY6MTpjaQ
|
||||||
|
// Client Secret
|
||||||
|
// GyZkEE69j0UPPKfmal9tT287-ZVw7vQbV20qvDPTFLCgNOplUk
|
||||||
|
|
||||||
|
?>
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// ---
|
||||||
|
// --- Listening to blockchain.info to get the last block
|
||||||
|
// --- Drawing the block as a Treemap
|
||||||
|
// --- Tweet it
|
||||||
|
// ---
|
||||||
|
|
||||||
|
// ---
|
||||||
|
// --- La config globale
|
||||||
|
// ---
|
||||||
|
require_once '../../global/inc/config.php';
|
||||||
|
|
||||||
|
// ---
|
||||||
|
// --- External dependances
|
||||||
|
// ---
|
||||||
|
require TOPISTO_PATH.'/ressources/vendor/autoload.php';
|
||||||
|
|
||||||
|
// ---
|
||||||
|
// --- Internal dependances
|
||||||
|
// ---
|
||||||
|
require_once APP_PATH.'/blockchain/inc/block.php';
|
||||||
|
require 'inc/twitter.php';
|
||||||
|
require '../generique/inc/twitter.php';
|
||||||
|
|
||||||
|
$methode='spline';
|
||||||
|
if (isset($argv[3])) $methode=$argv[3];
|
||||||
|
|
||||||
|
$block_hash = $argv[1];
|
||||||
|
$the_block = blockchain::getBlockWithHash($block_hash);
|
||||||
|
if ($the_block === FALSE) die();
|
||||||
|
|
||||||
|
// ---
|
||||||
|
// --- Remercier les followers
|
||||||
|
// ---
|
||||||
|
// 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);
|
||||||
|
imagefilledrectangle($image_twitter, 0, 0, TWITTER_WIDTH, TWITTER_HEIGHT, $fond);
|
||||||
|
|
||||||
|
$ratio = TWITTER_HEIGHT / imagesy($image_origine);
|
||||||
|
$new_width = $ratio * imagesx($image_origine);
|
||||||
|
|
||||||
|
$xpos = floor((TWITTER_WIDTH - $new_width) / 2);
|
||||||
|
$ypos = 0;
|
||||||
|
|
||||||
|
imagecopyresized($image_twitter, $image_origine, $xpos, $ypos, 0, 0, $new_width, TWITTER_HEIGHT, imagesx($image_origine), imagesy($image_origine));
|
||||||
|
|
||||||
|
$image_file = DATA_PATH."/twitterbot/".$argv[1].'.png';
|
||||||
|
|
||||||
|
imagepng($image_twitter,$image_file);
|
||||||
|
|
||||||
|
// ---
|
||||||
|
// --- Un petit peu de stéganographie ...
|
||||||
|
// ---
|
||||||
|
/* Ca fait des fichiers trop gros !
|
||||||
|
$processor = new KzykHys\Steganography\Processor();
|
||||||
|
$image = $processor->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);
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
Executable
+66
@@ -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
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// ---
|
||||||
|
// --- Listening to blockchain.info to get the last block
|
||||||
|
// --- Drawing the block as a Treemap
|
||||||
|
// --- Tweet it
|
||||||
|
// ---
|
||||||
|
|
||||||
|
// ---
|
||||||
|
// --- La config globale
|
||||||
|
// ---
|
||||||
|
require_once '../../global/inc/config.php';
|
||||||
|
|
||||||
|
// ---
|
||||||
|
// --- External dependances
|
||||||
|
// ---
|
||||||
|
require TOPISTO_PATH.'/ressources/vendor/autoload.php';
|
||||||
|
|
||||||
|
// ---
|
||||||
|
// --- Internal dependances
|
||||||
|
// ---
|
||||||
|
require_once APP_PATH.'/blockchain/inc/block.php';
|
||||||
|
require 'inc/twitter.php';
|
||||||
|
|
||||||
|
$methode='spline';
|
||||||
|
if (isset($argv[3])) $methode=$argv[3];
|
||||||
|
|
||||||
|
$block_hash = $argv[1];
|
||||||
|
$the_block = blockchain::getBlockWithHash($block_hash);
|
||||||
|
if ($the_block === FALSE) die();
|
||||||
|
|
||||||
|
// ---
|
||||||
|
// --- Remercier les followers
|
||||||
|
// ---
|
||||||
|
// 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);
|
||||||
|
|
||||||
|
$ratio = TWITTER_HEIGHT / imagesy($image_origine);
|
||||||
|
$new_width = $ratio * imagesx($image_origine);
|
||||||
|
|
||||||
|
$xpos = floor((TWITTER_WIDTH - $new_width) / 2);
|
||||||
|
$ypos = 0;
|
||||||
|
|
||||||
|
imagecopyresized($image_twitter, $image_origine, $xpos, $ypos, 0, 0, $new_width, TWITTER_HEIGHT, imagesx($image_origine), imagesy($image_origine));
|
||||||
|
|
||||||
|
$image_file = DATA_PATH."/twitterbot/".$argv[1].'.png';
|
||||||
|
|
||||||
|
imagepng($image_twitter,$image_file);
|
||||||
|
|
||||||
|
// ---
|
||||||
|
// --- Un petit peu de stéganographie ...
|
||||||
|
// ---
|
||||||
|
/* Ca fait des fichiers trop gros !
|
||||||
|
$processor = new KzykHys\Steganography\Processor();
|
||||||
|
$image = $processor->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);
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
Reference in New Issue
Block a user