私が作成したサイトへそブルー-画像検索サイトのソースコードをほぼそのまま公開します。
使用言語は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>