PHP : Twitter 検索テンプレート

  twitter_search.php



<?php
require_once("common.php");

$result = '';
if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
	$result = twitter_search(
		$_SESSION['consumer_key'],
		$_SESSION['consumer_secret'],
		$_SESSION['access_token'],
		$_SESSION['access_token_secret'],
		$_POST['text']
	);
	if ( $result != '' ) {
		file_put_contents("json.txt", $result );
		$obj = json_decode($result);
		file_put_contents("json.php", "<" . "?php header(\"Content-type: text/plain; charset=utf-8\");  ?>" . print_r( $obj, true ) );

		$_SESSION['twitter_error'] = "";
		if ( $obj->error != '' ) {
			$_SESSION['twitter_error'] = $obj->error;
		}
		else {
			$cnt = count($obj->statuses);
			$search_result = "";
			for( $i = 0; $i < $cnt; $i++ ) {
				$search_result .= "<div class='entry'>";
				$search_result .= "<table><tr>";
				// 画像
				$search_result .= "<td><a href='https://twitter.com/{$obj->statuses[$i]->user->screen_name}/status/{$obj->statuses[$i]->id_str}' target='_blank' style='border:0'><img src='{$obj->statuses[$i]->user->profile_image_url}'></a></td>";
				// URL をアンカーに変換
				// テキスト
				$search_result .= "<td><pre style='margin-top:0'>" . url2a($obj->statuses[$i]->text) . "</pre></td>";
				$search_result .= "</tr></table>";
	
				// ***************************************************
				// 画像がある場合
				// ***************************************************
				if ( $obj->statuses[$i]->entities->media ) {
					$search_result .= "<img src='{$obj->statuses[$i]->entities->media[0]->media_url}' style='width:200px;'>";
				}
	
				$search_result .= "</div>";
			}

			$regex_result = "";

			$result = file_get_contents("json.php");
			preg_match_all("|(https?://.+?)[\"']?[;)>\\s]|u", $result, $matches, PREG_PATTERN_ORDER );
			$regex_result .= "<pre>";
			foreach( $matches[1] as $value ) {
				$regex_result .= (url2a( $value ) . "\n");
			}
			$regex_result .=  "</pre>";

		}



	}


}

require_once("view.php");



?>




  view.php



<!doctype html>
<html lang="ja">
<head>
<title>検索</title>
<meta charset="utf-8">
<link type="text/css" rel="stylesheet" href="client/style.css">

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<link type="text/css" href="http://homepage2.nifty.com/lightbox/jquery/jqcss/black-tie/jquery-ui-1.10.1.custom.css" rel="stylesheet" />
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>


<script>
$(function() {
	$( "#tabs" ).tabs();
});
</script>


<style>
body {
	margin: 0px;
	padding:10px 30px 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;
}
.search {
	width:540px;
}
td {
	vertical-align: top;
	padding: 4px;
}

pre {
	white-space: pre;
	white-space: pre-wrap;
	white-space: -pre-wrap;
	white-space: -o-pre-wrap;
	white-space: -moz-pre-wrap;
	white-space: -hp-pre-wrap;
	word-wrap: break-word;
}

</style>
</head>
<body>


<div id="tabs">

	<ul>
		<li><a href="#tabs-1">結果の JSON =></a></li>
		<li><a href="#tabs-2">JSON Decode</a></li>
		<li><a href="#tabs-3">生 JSON</a></li>
		<li><a href="#tabs-4">URL 抽出</a></li>
	</ul>

	<!-- ******************************************* -->
	<div id="tabs-1">

	<form method="post">
	<input class="search" type="text" name="text" value="<?= $_POST['text'] ?>">
	<br>
	<input type="submit" value="送信">
	</form>
	<br>
<?= $search_result ?>

	</div>

	<!-- ******************************************* -->
	<div id="tabs-2">

	<iframe
		src="json.php"
		id="result"
		name="result"
		frameborder="1"
		scrolling="yes"
		style='width:1000px;height:450px;'
	></iframe>

	</div>

	<!-- ******************************************* -->
	<div id="tabs-3">

	<iframe
		src="json.txt"
		id="result"
		name="result"
		frameborder="1"
		scrolling="yes"
		style='width:1000px;height:450px;'
	></iframe>

	</div>

	<!-- ******************************************* -->
	<div id="tabs-4">

<?= $regex_result ?>

	</div>
</div>
<hr>

<?php debug_session(); ?>


</body>
</html>




  debug_lib.php

<?php
// *********************************************************
// デバッグ用のセッション表示
// *********************************************************
function debug_session() {

	print "<pre style='clear:left;font-size:20px;padding:20px;border:solid 2px #DE4600;margin-top:50px;'>";

	if ( $_GET['err'] != '' ) {
		$_SESSION['err'] = $_GET['err'];
	}
	print_r($_SESSION);

	print "</pre>";

}
?>




  common.php

<?php
session_start();

$_SESSION['consumer_key'] = "";
$_SESSION['consumer_secret'] = "";
$_SESSION['access_token'] = "";
$_SESSION['access_token_secret'] = "";

require_once("debug_lib.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" );


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

function twitter_search( $apikey, $secret, $token, $token_secret, $userid ) {
	// **********************************************************
	// API
	// **********************************************************
	$twitter_url = 'https://api.twitter.com/1.1/search/tweets.json';
	$count = 20;

	// **********************************************************
	// 認証データ
	// **********************************************************
	$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 .= "count%3D{$count}%26";
	$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 .= "%26q%3D".urle(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 . "?q=" . urle($userid) . "&count={$count}"  );

	// *********************************************************
	// 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;
}


?>











  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ