|
<?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");
?>
|
|
<!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>
|
|
<?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>";
}
?>
|
|
<?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;
}
?>
|
|