使用CURL和PHP / Oauth进行Twitter API 1.1 POST

时间:2013-09-05 19:06:09

标签: php curl twitter oauth

Estoy intentado hacer un script en PHP para poder postear。 Estoy Ultilizando CURL y Oauth,pero si bien no me tira ni un error,tampoco postea en mi Timeline.Que estare haciendo mal ??

他的意图是没有功能。

Aca el codigo:

    <?php

# Variables
$update_api_url = "https://api.twitter.com/1.1/statuses/update.json";
$tweet_latitude = "47.1195";  # Latitude of your town
$tweet_longitude = "-88.5470"; # Longitude of your town
#
# Application speficic tokens
$consumer_key = "XXXXXXXXXXXXXx";
$consumer_secret = "XXXXXXXXXXXx";
$access_token = "XXX-XXXXXXXXXXXXXXxxx";
$access_token_secret = "XXXXXXX";


$random_number = rand();
$tweet2post = "Test message # $random_number ";
$tweet2post = substr($tweet2post, 0, 138);
$tweet2post = rawurlencode("$tweet2post");

#
# Construct the URL to be passed to cURL
$post2twitter_api_url = $update_api_url;
$post2twitter_api_url .= "?lat=$tweet_latitude";
$post2twitter_api_url .= "&long=$tweet_longitude";
$post2twitter_api_url .= "&status=$tweet2post";

#
# OAuth signature
$post2twitter_oauth_hash = '';
$post2twitter_oauth_hash .= 'lat=' . $tweet_latitude;
$post2twitter_oauth_hash .= '&long=' . $tweet_longitude;
$post2twitter_oauth_hash .= '&oauth_consumer_key=' . $consumer_key;
$post2twitter_oauth_hash .= '&oauth_nonce=' . time();
$post2twitter_oauth_hash .= '&oauth_signature_method=HMAC-SHA1';
$post2twitter_oauth_hash .= '&oauth_timestamp=' . time();
$post2twitter_oauth_hash .= '&oauth_token=' . $access_token;
$post2twitter_oauth_hash .= '&oauth_version=1.0';
$post2twitter_oauth_hash .= '&status=' . $tweet2post;

$post2twitter_base = '';
$post2twitter_base .= 'POST';
$post2twitter_base .= '&';
$post2twitter_base .= rawurlencode("$update_api_url");
$post2twitter_base .= '&';
$post2twitter_base .= rawurlencode($post2twitter_oauth_hash);

$post2twitter_key = '';
$post2twitter_key .= rawurlencode("$consumer_secret");
$post2twitter_key .= '&';
$post2twitter_key .= rawurlencode("$access_token_secret");

$post2twitter_signature = base64_encode(hash_hmac('sha1', $post2twitter_base, $post2twitter_key, true));
$post2twitter_signature = rawurlencode($post2twitter_signature);

#
# cURL Headers
$post2twitter_oauth_header = '';
$post2twitter_oauth_header .= 'oauth_consumer_key="' . $consumer_key . '", ';
$post2twitter_oauth_header .= 'oauth_nonce="' . time() . '", ';
$post2twitter_oauth_header .= 'oauth_signature="' . $post2twitter_signature . '", ';
$post2twitter_oauth_header .= 'oauth_signature_method="HMAC-SHA1", ';
$post2twitter_oauth_header .= 'oauth_timestamp="' . time() . '", ';
$post2twitter_oauth_header .= 'oauth_token="' . $access_token . '", ';
$post2twitter_oauth_header .= 'oauth_version="1.0"';

$post2twitter_curl_header = array("Authorization: OAuth {$post2twitter_oauth_header}", 'Expect:');


#
# cURL Request
$post2twitter_curl_request = curl_init();
curl_setopt($post2twitter_curl_request, CURLOPT_HTTPHEADER, $post2twitter_curl_header);
curl_setopt($post2twitter_curl_request, CURLOPT_HEADER, false);
curl_setopt($post2twitter_curl_request, CURLOPT_URL, $post2twitter_api_url);
curl_setopt($post2twitter_curl_request, CURLOPT_POST, true);
curl_setopt($post2twitter_curl_request, CURLOPT_RETURNTRANSFER, true);
curl_setopt($post2twitter_curl_request, CURLOPT_SSL_VERIFYPEER, false);

$post2twitter_response = curl_exec($post2twitter_curl_request);
var_dump($post2twitter_response);

curl_close($post2twitter_curl_request);
?>

Ojala alguien pueda ayudarme。 saludos

1 个答案:

答案 0 :(得分:0)

Me juego a que tiene que ver con permisos。 Fijate https://dev.twitter.com/apps/tu_id/show tener OAuth设置 - &gt;访问级别en“读取和写入”y lo mismo en您的访问令牌 - &gt;访问权限。

Yo tarde en entender como dar acceso para escribir al access token。 Si es eso and a a https://dev.twitter.com/apps/tu_id/oauth y selecciona en Request settings - &gt; POST。

Espero sea eso。

P.S。 Me olvide de aclarar por que a mi me paso con la version 1.1。 Si haces un muestreo de ids x ejemlo

get("friends/ids.json?screen_name=USU_ID&cursor=".$cursor);

Y te lo muestra,entonces es casi seguro que tenes el permiso de solo para lectura(GET)。