iTunes Search APIを使って、音楽検索してみた!
今回は「 iTunes Search API 」を使ってみました。
ドキュメントはこちら
developer.apple.com
アップルはUIが優れているイメージがありますが、ドキュメントもシンプルでわかりやすいです。
ソースコード
index.html
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script type="text/javascript" src="https://code.jquery.com/jquery-3.4.1.min.js"></script> </head> <body> <h1>曲検索アプリ</h1> <input id="serch_keyword" type="text"><input id="serch_button" type="button" value="検索"> <div class="result"></div><!--ここに検索結果を表示します--> <script type="text/javascript" src="script.js"></script> </body> </html>
style.js
let keyword=''; let music_infos = {}; $('#serch_button').click(function(){ keyword = $('#serch_keyword').val(); console.log(keyword); $('#serch_keyword').val(''); $('.result').empty(); $.ajax({ url:'https://itunes.apple.com/search', type:'GET', dataType:'json', data:{ lang: 'ja_jp', media: 'music', entity:'song', country: 'JP', term: keyword, limit: '10' } }).done( function(data){ for(let i=0;i<10;i++){ let music_info ={}; music_info.artworkUrl = data.results[i].artworkUrl100; music_info.artistName = data.results[i].artistName; music_info.trackName = data.results[i].trackName; music_info.collectionViewUrl = data.results[i].collectionViewUrl; music_infos[i] = music_info; } console.log(music_infos); for(let i=0;i<10;i++){ $('.result').append("<img src=\""+music_infos[i].artworkUrl+"\">"); $('.result').append("<h3>"+music_infos[i].artistName+"</h3>"); $('.result').append("<p>"+music_infos[i].trackName+"</p>"); $('.result').append("<a href=\""+music_infos[i].collectionViewUrl+"\">曲のページへ</a><br>"); } } ).fail( function(data){ console.log('失敗しました!'); } ); });
今回は曲について検索を行いましたが、ドキュメントによると他にも映画やポットキャスト、電子書籍などさまざまな情報を取得することができるみたいです。
ハンバーガーメニューを作ってみた【jQuery】
こんにちは。
大学の期末テストやレポートが落ち着いて、やっとコーディングできます!
今回は、レスポンシブデザインにおいて必須と言っても過言ではない「ハンバーガーメニュー」を作っていきたいと思います!
こちらの記事を参考にさせてもらいました。
ハンバーガーメニュー(ドロワーメニュー)の作り方 | KUBOGEN
完成品
See the Pen
by sk (@sk232423)
on CodePen.
ソースコード
HTML
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="style.css"> <title>Document</title> </head> <body> <header> <div class="hamburger_and_logo"> <div class="hamburger"> <span></span><!--ハンバーガーの棒たち--> <span></span><!--ハンバーガーの棒たち--> <span></span><!--ハンバーガーの棒たち--> </div> <img src="https://cdn.pixabay.com/photo/2017/11/10/05/05/youtube-2935416_1280.png" alt="" style="height:50px"><!--ヘッダーのロゴ--> </div> <nav class="menu"><!--横からでてくるメニュー--> <div class="menu_bottom_border"><!--線引くためのクラス--> <div class="menu-hamburger"><!--横からでてくるハンバーガー--> <span></span><!--横からでてくるハンバーガーの棒たち--> <span></span><!--横からでてくるハンバーガーの棒たち--> <span></span><!--横からでてくるハンバーガーの棒たち--> </div> <img src="https://cdn.pixabay.com/photo/2017/11/10/05/05/youtube-2935416_1280.png" alt="" style="height:50px"><!--ヘッダーのロゴ--> </div> <ul class="menu-content"><!--横からでてくるメニューの内容--> <li>メニュー1</li> <li>メニュー2</li> <li>メニュー3</li> <li>メニュー4</li> <li>メニュー5</li> </ul> </nav> <div class="menu-background"></div><!--ハンバーガー押されたら、背景をグレーにする--> </header> <p>テスト</p> </body> <script src="https://code.jquery.com/jquery-3.3.1.js"></script> <script> //toggleは表示していたら非表示に、非表示の場合は表示にしてくれる!!! $(function(){ $('.hamburger').click(function(){ $('.menu').toggleClass('open'); $('.menu-background').toggleClass('menu-background2'); }); $('.menu-hamburger').click(function(){ $('.menu').toggleClass('open'); $('.menu-background').toggleClass('menu-background2'); }); $('.menu-background').click(function(){ $('.menu').toggleClass('open'); $('.menu-background').toggleClass('menu-background2'); }); }); </script> </html>
body { margin: 0; background-color:rgb(248, 248, 248); } /*----------------------------ハンバーガーメニュー----------------------------*/ header{ height:50px; position: relative; background-color: white; } .hamburger_and_logo{ display: flex; } .hamburger { width: 30px; height: 30px; padding: 10px; display: flex; justify-content: center; align-items: center; z-index: 1; } .hamburger:hover { cursor: pointer; } .hamburger span { background: black; width: 20px; height: 2px; position: absolute; } .hamburger span:nth-of-type(1) { top: 19px; } .hamburger span:nth-of-type(3) { bottom: 19px; } /*---------------------メニュー-----------------------*/ .menu { z-index:3; width: 300px; height: 100vh; background-color: white; color: black; position: absolute; top:0; transform: translate(-300px); transition: 0.3s ease-out; } .menu_bottom_border{ display: flex; height:50px; border-bottom: 1px solid rgb(225, 225, 225); } .menu-hamburger{ width: 30px; height: 30px; padding: 10px; position:relative; display: flex; justify-content: center; align-items: center; } .menu-hamburger:hover { cursor: pointer; } .menu-hamburger span { background: black; width: 20px; height: 2px; position: absolute; } .menu-hamburger span:nth-of-type(1) { top: 19px; } .menu-hamburger span:nth-of-type(3) { bottom: 19px; } .menu-content{ margin-top: 50px; } li { margin-bottom: 10px; } /*----------------------メニューにopenクラスがついたときのスタイル------------------------*/ .menu.open { transform: translate(0); transition: 0.3s ease-out; } /*--------------背景を黒くする、押したらメニューを閉じる--------------------*/ .menu-background { position: fixed; top: 0; left: 0; content: ""; display: block; width: 0; height: 0; background-color: rgba(0, 0, 0, 0.5); z-index: 2; opacity: 0; /* 透明度を0にすることで隠す */ transition: opacity 0.3s; /* 透明度の0→1になる速度 */ } .menu-background2{ width: 100%; height: 100%; opacity: 1; /* メニューが表示されているときには背景が表示 */ }
【jQuery】jQueryのプラグインを使って簡単にバリデーションを実装してみた!
Webアプリケーションを作る際に、考えなくてはいけないのが
入力フォームのバリデーションです。
ユーザーが値を入力しなかった場合の処理や、フォーマットとは違う値を入力した場合など、
色々なケースを考え、対処法を考える必要があります。
今回は「jQuery Validation Plugin」を使って、入力フォームのバリデーションを簡単に実装してみました。
jQuery Validation Plugin | Form validation with jQuery
ポイント
この入力フォームには、url形式のデータを入力し、送信することができます。また何も入力しないと送信できない仕様となっています。
このurl形式のデータの指定はValidation methodsにおいて url:true とし、
入力を必須と指定するためにValidation methodsにおいて required:true としています。
より多くのデモはドキュメントに載っています。分かりやすいです。
バリデーションは、バックエンドにおいての処理も必要なので、このプラグインだけでは十分ではないと思います。しかし手軽にバリデーションを実装できるのは最大のメリットですね。
間違いなど、ご指摘ありましたらよろしくお願いいたします。
【PHP】YouTubeのDATA APIを使ってみた。
こんにちは、なんとなくYouTubeのデータを使ってプログラムを書きたいと思ったので、
PHPを使って、YouTubeのDATA APIを使ってみたいと思います。
GoogleのデベロッパーコンソールからAPIキーの獲得の流れについては以下記事が分かりやすいです。
qiita.com
実際に、公式のデモを動かしてみました。
実行結果
キーワードを入力して、最大表示数を指定して、
検索すると
該当する動画タイトルやid、チャンネルが表示されました。
ソースコード
Search: list | YouTube Data API | Google Developers ←公式サイト載っています。
<?php /** * Library Requirements * * 1. Install composer (https://getcomposer.org) * 2. On the command line, change to this directory (api-samples/php) * 3. Require the google/apiclient library * $ composer require google/apiclient:~2.0 */ if (!file_exists(__DIR__ . '/vendor/autoload.php')) { throw new \Exception('please run "composer require google/apiclient:~2.0" in "' . __DIR__ .'"'); } require_once __DIR__ . '/vendor/autoload.php'; $htmlBody = <<<END <form method="GET"> <div> Search Term: <input type="search" id="q" name="q" placeholder="Enter Search Term"> </div> <div> Max Results: <input type="number" id="maxResults" name="maxResults" min="1" max="50" step="1" value="25"> </div> <input type="submit" value="Search"> </form> END; // This code will execute if the user entered a search query in the form // and submitted the form. Otherwise, the page displays the form above. if (isset($_GET['q']) && isset($_GET['maxResults'])) { /* * Set $DEVELOPER_KEY to the "API key" value from the "Access" tab of the * Google API Console <https://console.developers.google.com/> * Please ensure that you have enabled the YouTube Data API for your project. */ $DEVELOPER_KEY = 'REPLACE_ME'; $client = new Google_Client(); $client->setDeveloperKey($DEVELOPER_KEY); // Define an object that will be used to make all API requests. $youtube = new Google_Service_YouTube($client); $htmlBody = ''; try { // Call the search.list method to retrieve results matching the specified // query term. $searchResponse = $youtube->search->listSearch('id,snippet', array( 'q' => $_GET['q'], 'maxResults' => $_GET['maxResults'], )); $videos = ''; $channels = ''; $playlists = ''; // Add each result to the appropriate list, and then display the lists of // matching videos, channels, and playlists. foreach ($searchResponse['items'] as $searchResult) { switch ($searchResult['id']['kind']) { case 'youtube#video': $videos .= sprintf('<li>%s (%s)</li>', $searchResult['snippet']['title'], $searchResult['id']['videoId']); break; case 'youtube#channel': $channels .= sprintf('<li>%s (%s)</li>', $searchResult['snippet']['title'], $searchResult['id']['channelId']); break; case 'youtube#playlist': $playlists .= sprintf('<li>%s (%s)</li>', $searchResult['snippet']['title'], $searchResult['id']['playlistId']); break; } } $htmlBody .= <<<END <h3>Videos</h3> <ul>$videos</ul> <h3>Channels</h3> <ul>$channels</ul> <h3>Playlists</h3> <ul>$playlists</ul> END; } catch (Google_Service_Exception $e) { $htmlBody .= sprintf('<p>A service error occurred: <code>%s</code></p>', htmlspecialchars($e->getMessage())); } catch (Google_Exception $e) { $htmlBody .= sprintf('<p>An client error occurred: <code>%s</code></p>', htmlspecialchars($e->getMessage())); } } ?> <!doctype html> <html> <head> <title>YouTube Search</title> </head> <body> <?=$htmlBody?> </body> </html>
ポイント
$DEVELOPER_KEY = 'REPLACE_ME';
の 'REPLACE_ME'は自分のAPIキーを記述します。
$searchResponse = $youtube->search->listSearch('id,snippet', array( 'q' => $_GET['q'], 'maxResults' => $_GET['maxResults'], ));
の’id,snippet’のpart部分は必須パラメータで、id、snipperは以下スクリーンショットの通りとなっている。
第二パラメータには連想配列としてキーが’q’の値と、’maxResults’の値が指定されている。各値の説明は以下スクリーンショット通り。
そして$searchResponseに検索結果が代入され、あとは$searchResponseから欲しいデータを抜き取る作業をするだけです。
$searchResponseで取得できるリソースは複数あり、
例えばリソースがvideoかchannelかplaylistかを判断するために、以下スクリーンショットのkindの部分で判断することができます。
videoの場合:
"kind": "youtube#video"
channelの場合:
"kind": "youtube#channel",
Playlistの場合:
"kind": "youtube#playlist"
比較的に簡単にAPIを使うことができました。 近いうちにこのAPIを利用したWEBアプリを作りたいです。
間違えなど、ご指摘がありましたらよろしくお願いいたします。
GitHub Pagesを使ってみた!
結構前にherokuを使ったことがあり、同じことができるサービスないかなとネットをみていたら
「GitHub Pages」というサービスがあったので使ってみました。
無料で静的サイトを公開することができ、JavaScriptも動作するようです。
自分ははてなブログに来る前、独自ドメイン&レンタルサーバーでサイトを運営していたので、
このサービスが無料であることが驚きです。
使い方で参考になるサイト
「2020 NBA プレイオフ」のスタッツが落ちてたので、javaで遊んでみた。
今日はネットにオーランドのディズニーワールドで行われた「2020 nba プレイオフ」のスタッツが記されたExcelファイルが落ちていたので、
Javaでデータを取り出して、遊んでみたいと思います。
昔pythonでcsvファイルの読み取りをやった記憶があったので、Javaでできるのか調べながらやってみました。
使用するExcelファイルは以下サイトからダウンロードすることができます。
nbaファンにとって、選手のスタッツをみるだけでも楽しいものです。
完成したもの
平均得点と平均リバウンド、平均アシストを指定し、指定した成績以上のプレイヤーの名前とポジション、スタッツを出力するプログラム。
平均20得点10リバウンド0アシストを指定した例
平均15得点5リバウンド5アシストを指定した例
ソースコード
package nba_app1; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.ArrayList; import java.util.List; public class nba_app { public static void main(String[] args) { int count =0; BufferedReader br = null; List<nbaplayer> list = new ArrayList<>(); //nbaplayer型のリストを宣言 String file_name = "2019-2020_stats.csv"; // 入力ファイルの指定 try { File file = new File(file_name); //javaでファイルを扱うために、引数にファイル名を指定し、Fileオブジェクトを生成 br = new BufferedReader(new FileReader(file)); //javaでファイルからデータを読み取るために、引数にFileオブジェクトを指定し、BufferedReaderオブジェクトを生成 String line; String[] data; while ((line = br.readLine()) != null) { //readLine()メソッドを使い、一行ずつデータを取得 count++; data = line.split(","); if(count>=3) { //-------------以下のprintはテストコードとして使用しました----------------- //System.out.print(data[1]);//名前出力 //System.out.print(" "+data[3]);//ポジション 出力 //System.out.print(" "+data[18]);//平均得点 出力 //System.out.print(" "+data[19]);//平均リバウンド 出力 //System.out.print(" "+data[21]);//平均アシスト 出力 //System.out.println(); list.add(new nbaplayer(data[1],data[3],data[18],data[19],data[21])); } } nbaplayer.serch_player(list, 15, 5, 5);//nbaプレイヤー検索メソッド } catch (Exception e) { System.out.println(e.getMessage()); } finally { try { br.close(); } catch (Exception e) { System.out.println(e.getMessage()); } } } } class nbaplayer{ String name; String position; String PPG; String RPG; String APG; public nbaplayer(String name,String position,String PPG,String RPG,String APG) { this.name=name; this.position=position; this.PPG=PPG; this.RPG=RPG; this.APG=APG; } public static void serch_player(List<nbaplayer> list,double PPG,double RPG,double APG) { for(nbaplayer n:list) { double p = Double.parseDouble(n.PPG); double r = Double.parseDouble(n.RPG); double a = Double.parseDouble(n.APG); if(p>=PPG&&r>=RPG&&a>=APG) { System.out.print(n.name);//名前出力 System.out.print(" "+n.position);//ポジション 出力 System.out.print(" "+n.PPG);//平均得点 出力 System.out.print(" "+n.RPG);//平均リバウンド 出力 System.out.print(" "+n.APG);//平均アシスト 出力 System.out.println(); } } } }
ソースコードの説明
コードについて、簡単に流れを説明すると、指定ファイルから名前、ポジション、平均得点、平均アシスト、平均リバウンドのデータを抜き出し、
それらのデータを使ってnbaplayerオブジェクトを生成。そしてnbaplayer型リストを作り、nbaplayerオブジェクトを入れていき、
そのリストを利用して、nbaプレイヤーを検索するという流れです。
以下ポイントとなるコードを説明します。
while ((line = br.readLine()) != null) { //readLine()メソッドを使い、一行ずつデータを取得 count++; data = line.split(","); if(count>=3) { //-------------以下のprintはテストコードとして使用しました----------------- //System.out.print(data[1]);//名前出力 //System.out.print(" "+data[3]);//ポジション 出力 //System.out.print(" "+data[18]);//平均得点 出力 //System.out.print(" "+data[19]);//平均リバウンド 出力 //System.out.print(" "+data[21]);//平均アシスト 出力 //System.out.println(); list.add(new nbaplayer(data[1],data[3],data[18],data[19],data[21])); } }
使うExcelファイルについて、1行目と2行目はこのプログラムを作る上で必要ないので、count++とif(count>=3)を使いました。
他のコードの説明については、コードにコメントを書いておきました。
コロナウイルスに関するオープンデータを使ってみた。
こんにちは、今回は題名の通り、内閣官房が公開しているコロナウイルスのオープンデータを利用してみたいと思います。
公開されているデータを見てみると、データの形式はjsonのようです。
1月14日に公開されているデータを見てみると、最新のもので1月12日のものになっていました。
ソースコード
index.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>コロナ感染者数</title> <link rel="stylesheet" href="style.css"> </head> <body> <h1>コロナ感染者数</h1> <h2 id="test1"></h2> <p id="test2"></p> <script type="text/javascript" src="index.js"></script> </body> </html>
index.js
var request = new XMLHttpRequest(); request.open('GET', 'https://opendata.corona.go.jp/api/Covid19JapanAll?dataName=東京都', true); request.responseType = 'json'; request.onload = function () { var data = this.response; console.log(data.itemList[0]); var elem = document.getElementById("test1"); elem.innerHTML = data.itemList[0].date+" までの" var elem = document.getElementById("test2"); elem.innerHTML = data.itemList[0].name_jp+"のコロナウイルス感染者の合計は "+data.itemList[0].npatients+"人です。"; }; request.send();
ソースコードの説明
"itemList":[{"date":"2021-01-12","name_jp":"東京都","npatients":"77133"},,,,,,,]
取得できるjsonデータの形式は上記のような感じです。
data.itemList[0]
最新のデータは配列のインデックス0番目なので、上記のように最新のデータを取得。
日にちは以下のように取得。
data.itemList[0].date
感染者数は以下のように取得。
data.itemList[0].npatients
あとは得たデータをDocument.getElementById()を使ってindex.htmlに表示させるだけです。
感想
めちゃくちゃ久しぶりにjavascript触ったので、たくさんググりました。
知りたい情報を見つけた時の嬉しさは半端ないです。
もっとjavascriptを勉強して、今回のプログラムを応用したものを今後作りたいと思います。
話が変わりますがポケモンapiがあることを、今回初めて知りました。他にもおもしろそうなapiがweb上にあると思うので
暇な時探してみたいと思います。