202312 - Twitter API v2
This commit is contained in:
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');
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user