Skip to content

Instantly share code, notes, and snippets.

@co3k
Created June 22, 2009 10:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save co3k/133912 to your computer and use it in GitHub Desktop.
Save co3k/133912 to your computer and use it in GitHub Desktop.
<?php
set_include_path('/path/to/oauth');
require_once 'OAuth.php';
define('CONSUMER_KEY', '');
define('CONSUMER_SECRET', '');
define('BASE_URL', 'https://twitter.com');
define('REQUEST_TOKEN_URL', BASE_URL.'/oauth/request_token');
define('AUTHORIZE_URL', BASE_URL.'/oauth/authorize');
define('ACCESS_TOKEN_URL', BASE_URL.'/oauth/access_token');
header('Content-Type: text/html; charset=utf8');
if ('post' !== strtolower($_SERVER['REQUEST_METHOD'])
&& 'do_tweet' !== $_GET['mode']):
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>うべったー</title>
</head>
<body>
<p>以下のボタンを押すと、あなたは Twitter で「うべー」とつぶやくことになります。以下のボタンを押すと、あなたは Twitter で「うべー」とつぶやくことになります。</p>
<p>「うべー」とつぶやきたくない人はボタンを押さないでください。「うべー」とつぶやきたくない人はボタンを押さないでください。</p>
<p>「うべー」とつぶやきたい人だけボタンを押してください。「うべー」とつぶやきたい人だけボタンを押してください。</p>
<form action="./" method="post">
<input type="submit" value="うべー" />
</form>
<p>連続のうべーはできません。連続のうべーはできません。</p>
<p>投稿後、あなたのプロフィールページにジャンプします。投稿後、あなたのプロフィールページにジャンプします。</p>
</body>
</html>
<?php
exit;
elseif('do_tweet' !== $_GET['mode']):
$consumer = new OAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
// request token
$request = OAuthRequest::from_consumer_and_token($consumer, null, 'POST', REQUEST_TOKEN_URL);
$request->sign_request(new OAuthSignatureMethod_HMAC_SHA1(), $consumer, null);
$res = do_post($request->get_normalized_http_url(), $request->to_postdata());
$token = token_array_by_string($res);
// direct
header('Location: '.AUTHORIZE_URL.'?oauth_token='.$token['oauth_token']);
else:
// access token
$request = OAuthRequest::from_consumer_and_token($consumer, $_GET['oauth_token'], 'POST', ACCESS_TOKEN_URL, $_GET);
$request->sign_request(new OAuthSignatureMethod_HMAC_SHA1(), $consumer, $_GET['oauth_token']);
$res = do_post($request->get_normalized_http_url(), $request->to_postdata());
$token = tokenArrayByString($res);
// tweet
$request = OAuthRequest::from_consumer_and_token($consumer, $token['oauth_token'], 'POST', 'https://twitter.com/statuses/update.xml', array_merge($token, array('status' => 'うべー')));
$request->sign_request(new OAuthSignatureMethod_HMAC_SHA1(), $consumer, $token['oauth_token']);
do_post($request->get_normalized_http_url(), $request->to_postdata());
header('Location: http://twitter.com/'.$token['user']);
endif;
function do_post($uri, $data = '')
{
$h = curl_init();
curl_setopt($h, CURLOPT_URL, $uri);
curl_setopt($h, CURLOPT_POST, true);
curl_setopt($h, CURLOPT_POSTFIELDS, $data);
curl_setopt($h, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($h);
curl_close($h);
return $result;
}
function token_array_by_string($string)
{
$result = array();
$params = explode('&', $string);
foreach ($params as $param)
{
$pieces = explode('=', $param);
$result[$pieces[0]] = $pieces[1];
}
return $result;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment