SQLの窓

2013年08月28日


PHP で GET statuses/user_timeline を使って何か作る為のテンプレート

GET statuses/user_timeline



基本的には、API 制限があるので( 300/app )たいした事はできませんが、個人的に楽しむぶんには十分使えると思います。投稿に関しては weetDeck 等の公式クライアントを使ったほうがいいと思いますが、PHP で投稿する方法はこちら

使用方法は、アプリを作って『Consumer key、Consumer secret、Access token、Access token secret』を手に入れてテキストエリアに1行づつ入力し、5行目にユーザの表示名( ログイン用の文字列 ) を入力します
<?php
header("Content-type: text/html; charset=utf-8");
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );

$result = '';
if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
	$token = explode("\r\n", $_POST['text']);
	$result = twitter_user_timeline(
		$token[0],
		$token[1],
		$token[2],
		$token[3],
		$token[4]
	);
}

?>
<!doctype html>
<html lang="ja">
<head>
<title>SkyDrive Word</title>
<meta charset="utf-8">
<style>
body {
	margin: 0px;
	padding:10px 0 30px 30px;
}
.entry {
	width: 600px;
	border-top: solid 1px #000000;
	padding: 5px;
	font-size:16px;
	font-family: Arial, Helvetica, Verdana, "ヒラギノ角ゴPro W3", "Hiragino Kaku Gothic Pro", Osaka, "メイリオ", Meiryo, "MS Pゴシック", sans-serif;
}
textarea {
	width:540px;
	height:100px;
}
</style>
</head>
<body>

<form method="post">
<textarea name="text" style='float:left'><?= $_POST['text'] ?></textarea>
<input type="submit" value="送信" style='float:left;'>
</form>
<br style='clear:left'><br>

<?
if ( $result != '' ) {
	$obj = json_decode($result);
	$cnt = count($obj);
	for( $i = 0; $i < $cnt; $i++ ) {
		if ( $i == 0 ) {
			print "<div class='entry'>";
			print "<img src='{$obj[$i]->user->profile_image_url}'>";
			print "</div>";
		}
		print "<div class='entry'";

		// ***************************************************
		// リツイート
		// ***************************************************
		if ( $obj[$i]->retweeted_status ) {
			print  " style='background-color:#D6B6CE'>";
			print "<div style='float:left;width:60px;'><img style='width:48px;' src='{$obj[$i]->retweeted_status->user->profile_image_url}'></div>";
			// URL をアンカーに変換
			$work = url2a($obj[$i]->text);
			print "<div style='float:left;width:530px'>{$work}</div>";
		}
		else {
			// *******************************************
			// 返信
			// *******************************************
			if ( $obj[$i]->in_reply_to_screen_name ) {
				print  " style='background-color:#B6D6D6'>";
			}
			// *******************************************
			// 通常
			// *******************************************
			else {
				print  ">";
			}
			// URL をアンカーに変換
			print url2a($obj[$i]->text);
			print "<br>";
		}

		// ***************************************************
		// 画像がある場合
		// ***************************************************
		if ( $obj[$i]->entities->media ) {
			print "<br>";
			print "<div style='clear:left;'><img src='{$obj[$i]->entities->media[0]->media_url}' style='width:200px;'></div>";
		}
		else {
			print "<br style='clear:left;'>";
		}

		print "</div>";
	}

print "<pre>";
//print_r($obj);
print "</pre>";

}
?>
</body>
</html>
<?

// **********************************************************
// AOuth 用の urlencode 関数
// **********************************************************
function urle( $str ) {
	// php 5.3.x 〜 ではこの変換は必要無い
	return str_replace('%7E', '~', rawurlencode($str));
}

function twitter_user_timeline( $apikey, $secret, $token, $token_secret, $userid ) {
	// **********************************************************
	// API
	// **********************************************************
	$twitter_url = 'https://api.twitter.com/1.1/statuses/user_timeline.json';

	// **********************************************************
	// 認証データ
	// **********************************************************
	$oauth_consumer_key = $apikey;
	$oauth_consumer_secret = $secret;
	$oauth_token = $token;
	$oauth_secret = $token_secret;
	
	// 毎回変化するランダムな文字列
	$mt = microtime();
	$rand = mt_rand();
	$oauth_nonce = md5($mt . $rand);
	
	$oauth_signature_method = "HMAC-SHA1";
	$oauth_timestamp = time();
	$oauth_version = "1.0";
	
	// *********************************************************
	// シグネチャ用ベース文字列作成
	/*
	  httpMethod + "&" +
	  url_encode(  base_uri ) + "&" +
	  sorted_query_params.each  { | k, v |
	      url_encode ( k ) + "%3D" +
	      url_encode ( v )
	  }.join("%26")
	*/
	// *********************************************************
	$base_string = "GET";
	$base_string .= "&" . urle($twitter_url);
	$base_string .= "&";
	
	$base_string .= urle("oauth_consumer_key")."%3D".urle($oauth_consumer_key)."%26";
	$base_string .= urle("oauth_nonce")."%3D".urle($oauth_nonce)."%26";
	$base_string .= urle("oauth_signature_method")."%3D".urle($oauth_signature_method)."%26";
	$base_string .= urle("oauth_timestamp")."%3D".urle($oauth_timestamp)."%26";
	$base_string .= urle("oauth_token")."%3D".urle($oauth_token)."%26";
	$base_string .= urle("oauth_version")."%3D".urle($oauth_version);
	$base_string .= "%26screen_name%3D".urle($userid);
	
	// *********************************************************
	// シグネチャ作成
	/*
	url_encode( consumer_secret ) + "&" +
	url_encode( oauth_token_secret || nil )
	*/
	// *********************************************************
	$oauth_signature = 
	base64_encode( hash_hmac(
		"sha1",
		$base_string,
		$oauth_consumer_secret . "&" . $oauth_secret,
		true
	));
	
	// *********************************************************
	// curl 処理
	// *********************************************************
	$curl = curl_init();
	curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
	curl_setopt($curl, CURLOPT_HEADER, false);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($curl, CURLOPT_BINARYTRANSFER, true);
	curl_setopt($curl, CURLOPT_URL, $twitter_url . "?screen_name=" . urle($userid));

	// *********************************************************
	// http ヘッダ作成
	// *********************************************************
	$header = array();
	$header[] = 'Expect:';
	
	$header[] = "Authorization: OAuth ".
	urle("oauth_consumer_key")."=\"".urle($oauth_consumer_key)."\",".
	urle("oauth_token")."=\"".urle($oauth_token)."\",".
	urle("oauth_nonce")."=\"".urle($oauth_nonce)."\",".
	urle("oauth_timestamp")."=\"".urle($oauth_timestamp)."\",".
	urle("oauth_signature_method")."=\"".urle($oauth_signature_method)."\",".
	urle("oauth_version")."=\"".urle($oauth_version)."\",".
	urle("oauth_signature")."=\"".urle($oauth_signature)."\"";
	
	curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
	
	// *********************************************************
	// https 用 ( https://api.twitter.com 利用時に必要 )
	// *********************************************************
	curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1);
	
	// *********************************************************
	// 戻された http ヘッダの出力
	// *********************************************************
	$handle = fopen("./header.txt", "w");
	curl_setopt($curl, CURLOPT_WRITEHEADER, $handle);
	
	// *********************************************************
	// 送信
	// *********************************************************
	$result = curl_exec($curl);
	
	// *********************************************************
	// 結果
	// *********************************************************
	$ret = true;
	if($result === false) {
		$ret = false;
	}
	curl_close($curl);

	return $result;

}

// URL をアンカーに変換
function url2a( $target ){

	$target = str_replace("http", " http", $target );

	if ( preg_match( "/http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/", $target ) ) {
		preg_match_all( "/http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/", $target, $pattarn );
		foreach ( $pattarn[0] as $key => $val ){
			$replace[] = "<a href=\"{$val}\" target=\"_blank\">{$val}</a>";
		}
		$target = str_replace( $pattarn[0], $replace, $target );
	}
	return $target;
}
?>

関連する記事

PHP + cURL で、Twitter API 1.1 の search/tweets を呼び出して、RSS に変換する



posted by lightbox at 2013-08-28 16:34 | PHP + Twitter | このブログの読者になる | 更新情報をチェックする
バッチ処理

Microsoft Office
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
CSS ドロップシャドウの参考デモ
PHP正規表現チェッカー
Google Hosted Libraries
cdnjs
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり