へそブルー-画像検索サイトのソースコード

私が作成したサイトへそブルー-画像検索サイトのソースコードをほぼそのまま公開します。

使用言語はPHPのみです。また、趣味プログラムなのでコードのキレイさは捨てています。汚いコードです。ロジックは参考にしてよいですが、コードの汚さは参考にしないでください。

画像検索のためにtwitter APIを使用しています。ただし作成後、確かtwitter APIが更新されましたが、真面目に対応していないので、いつか動かなくなるかも。動かなくなったらまた本気で対応しようと思ってます。

また、以下のコードで使ってない関数とかあるかも。あまり気にしないでね。

え?「コピペしたのにへそブルーみたいにならない」?なぜならデザインはcssファイルで別に記述しているからです。でも、画像を検索するという機能は問題ないはず。

formの送信先をaction="/"としていますが、送信先はこのファイル自身を指定しています。(へそブルーでは、このコードのファイル名はindex.phpなので、送信先を"/"と指定することでこのファイル自身を指定しています。)

このコードをほぼ丸コピして画像検索サイトを作りたいようであれば、丸コピしても構いません。ただし、問題が発生しても私は責任を取りません。

また、コードのコピペは良いのですが、デザインも含めてパクるのはご遠慮ください。デザインは各自、自分で作ってください。

また、下記コードに関しての質問はご遠慮いただき、各自コードを自力で解読してください。確か私も当時、ググりまくって作った覚えがあるのですが、すでに内容を忘れつつあるので。

適当プログラマーへ戻る。

<?php
	function isGetText(){
		if(isset($_GET['text']) && is_string($_GET['text']) && !($_GET['text'] === '')) {
			return true;
		} else {
			return false;
		}
	}
	function isGetAdult(){
		if(isset($_GET['adult']) && is_string($_GET['adult']) && !($_GET['adult'] === '')) {
			return true;
		} else {
			return false;
		}
	}

	function isGetPage(){
		if(isset($_GET['max_id']) && is_string($_GET['max_id']) && !($_GET['max_id'] === '') && ctype_digit($_GET['max_id'])) {
			return true;
		} else {
			return false;
		}
	}

	function getImageJson($query, $max_id){
        $bearer_token = '●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●'; // ここにあなたのトークンを設定してください
		$request_url = "https://api.twitter.com/1.1/search/tweets.json";
		$request_url = $request_url ."?q=". $query."&count=100&result_type=recent";
		if($max_id != 1){
		$request_url = $request_url ."&max_id=".$max_id;
		}

		// リクエスト用のコンテキスト
		$context = array(
			'http' => array(
				'method' => 'GET', // リクエストメソッド
				'header' => array( // ヘッダー
					'Authorization: Bearer ' . $bearer_token ,
				),
			),
		);

		// cURLを使ってリクエスト
		$curl = curl_init() ;
		curl_setopt( $curl , CURLOPT_URL , $request_url ) ;
		curl_setopt( $curl , CURLOPT_HEADER, 1 ) ; 
		curl_setopt( $curl , CURLOPT_CUSTOMREQUEST , $context['http']['method'] ) ;			// メソッド
		curl_setopt( $curl , CURLOPT_SSL_VERIFYPEER , false ) ;								// 証明書の検証を行わない
		curl_setopt( $curl , CURLOPT_RETURNTRANSFER , true ) ;								// curl_execの結果を文字列で返す
		curl_setopt( $curl , CURLOPT_HTTPHEADER , $context['http']['header'] ) ;			// ヘッダー
		curl_setopt( $curl , CURLOPT_TIMEOUT , 5 ) ;										// タイムアウトの秒数
		$res1 = curl_exec( $curl ) ;
		$res2 = curl_getinfo( $curl ) ;
		curl_close( $curl ) ;

		// 取得したデータ
		$json = substr( $res1, $res2['header_size'] ) ;				// 取得したデータ(JSONなど)
		$header = substr( $res1, 0, $res2['header_size'] ) ;		// レスポンスヘッダー (検証に利用したい場合にどうぞ)

		$jsonObj = json_decode($json);
		return $jsonObj;
	}

	if(isGetText() && isGetPage()){
		$query = (mb_strlen($_GET['text']) > 478)? mb_substr($_GET['text'], 0, 478): $_GET['text'];
		$query = rawurlencode($query." filter:media lang:ja");
		$max_id = rawurlencode($_GET['max_id']);
		$image_jsonObj = getImageJson($query, $max_id);
	}
	
?>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<meta name="keywords" content="画像検索,写真検索">
		<meta name="description" content="画像検索サイトです。">
		<title>へそブルー - 画像検索サイト</title>
		<link rel="stylesheet" href="css/default.css">
	</head>
	<body>
		<header>
			<div>
				<h1><a href="./">へそブルー</a></h1>
				<p>- 画像検索サイト -</p>
				<form action="/" method="GET">
					<p><input type="text" size="50" name="text" value="<?php if(isGetText()){echo htmlspecialchars($_GET['text']);} ?>"><input type="hidden" name="max_id" value="1"></p>
					<p><input type="submit" value="検索する"></p>
				</form>
			</div>
		</header>
		<section>
<?php
	if(isGetText() && isGetPage()){
//以下、全部表示用コード
//		echo json_encode($image_jsonObj);
//以上全部表示用コード

		echo '<h2>'.htmlspecialchars($_GET['text']).'</h2>'."\n";
		if(count($image_jsonObj->statuses) == 0){
			echo '<p>画像は見つかりませんでした。</p>';
		} else {
			$i = 0;
			echo '<ul id="gallery">'."\n";
			foreach($image_jsonObj->statuses as $value)
			{
				$i = $value->id_str;
				foreach((array)$value->extended_entities->media as $value_media)
				{
					echo '<li><a href="'.$value_media->expanded_url.'"><img src="'.$value_media->media_url.'"></a></li>'."\n";
				}
			}
			echo '</ul>'."\n";

			echo '<ul id="page">'."\n";
/*			if(isGetText() && isGetPage()){
				$query = rawurlencode($_GET['text']);
				$max_id = rawurlencode($_GET['max_id']);
				$max_max_id = (int)((int)($image_jsonObj->totalEstimatedMatches) / 150);
				if((int)($image_jsonObj->totalEstimatedMatches) % 150 > 0){
					$max_max_id++;
				}
				for($i = 1; $i <= $max_max_id; $i++){
					echo '<li><a href="http://www.heso.blue/?text='.$_GET["text"].'&max_id='.$i.'">'.$i.'</a></li>';
				}

			}
*/
			$i = (int)$i - 1;
					echo '<li><a href="http://www.heso.blue/?text='.urlencode($_GET["text"]).'&max_id='.$i.'">次のページ</a></li>'."\n";
			echo '</ul>';

		}
	}
?>

		</section>
		<footer>
			<dl>
				<dt>このサイトを作った人</dt>
				<dd>ガルニモの人</dd>
				<dt>このサイトを作った人のサイト</dt>
				<dd><a href="http://www.garunimo.com/">ガルニモ</a></dd>
			</dl>
		</footer>
	</body>
</html>