あむちょです。
最近マイブームのWeb APIで遊ぶ。
しばらくブログをサボっていたら、漫画ブログになりつつあったので、久しぶりに更新。
今回作ったのは、iTunesから試聴データを拾ってきてHTML5のAudioタグを使って再生する、なんちゃってプレイヤーです。下の検索ボタンを押すとデータをとってきて再生されます。
スマホは自動再生ができないので検索の後、再生ボタンを押してね。そもそも全体が表示されてないよ。こっちで見てね。
今回やったこと
iTunes APIから音楽データ、タイトル、アートワークの取得
そもそも、APIとは賢くて優しい人が便利な機能を提供してくれているので、それをありがたく使わせていただく技術です。
wiki曰く、Webサービスと同義語らしいです。試しに下の送信ボタンを押すとWikipediaのAPIを使って送信したテキストを調べてくれます。
こんな感じで、賢い人達が作った辞書サービスを、優しいので使わせてくれます。
iTunes APIでは、検索ワードを送ると試聴データ,アートワークなどのURLやタイトル,アーティスト名などが返されます。
まずはiTunesのデータサーバーに欲しいデータをajaxで送信しjson形式で受け取る。今回は楽なのでjQueryを使ってます。
<br /> var msg="きゃりーぱみゅぱみゅ"; //検索ワード<br /> var params = {<br /> term: msg,<br /> limit: 30, //データ数の上限<br /> lang: ‘ja_jp’,<br /> entry: ‘music’,<br /> media: ‘music’,<br /> country: ‘JP’,<br /> };<br /> $.ajax({<br /> url: ‘https://itunes.apple.com/search’,<br /> method: ‘GET’,<br /> data: params,<br /> dataType: ‘jsonp’,<br /> success: function(json){<br /> //json形式で受け取り<br /> console.log(json);<br /> }<br /> error: function() {<br /> console.log(‘itunes api search error. ‘, arguments);<br /> },<br /> });<br />
これでデータをsuccess関数内で受け取れます。
お次はjsonデータから必要なものを取り出す。success関数内に以下を追加
<br /> //外で宣言済み<br /> srcUrl = new Array(json.results.length);<br /> srcTitle = new Array(json.results.length);<br /> srcArt = new Array(json.results.length);<br /> srcArtist = new Array(json.results.length);</p> <p>for (var i=0;i<json.results.length;i++) {<br /> srcUrl[i] = json.results[i].previewUrl; //視聴データのurl<br /> srcTitle[i] = json.results[i].trackName; //曲名<br /> srcArt[i] = json.results[i].artworkUrl100; //100*100サイズのアートワークイメージ<br /> srcArtist[i] = json.results[i].artistName; //アーティスト名<br /> }<br />
これ以外にもたくさんデータがとれます。公式のリファレンスでも見ておくれ。
AudioをJavaScriptから制御
次にhtml5の新機能である、audioタグで音をならす。
html側
<br /> <audio id="audio" autoplay controls></audio><br />
controls属性を付けておくと、いい感じのプレイヤーが表示されます。上のサンプルでは自前で用意したもので、再生するだけならcontrolsをつけたほうが楽です。
次にjavascript側で制御
<br /> var trackNum = 0;<br /> var audio = document.getElementById("audio");</p> <p>audio.addEventListener(‘ended’, function(){ //再生終了イベント<br /> trackNum++;<br /> if(trackNum > srcUrl.length-1)trackNum = 0;<br /> audio.src = srcUrl[trackNum];<br /> artImg.src = srcArt[trackNum];<br /> },false);</p> <p>audio.src = srcUrl[trackNum];<br />
autoplay属性を付けておけば、srcが指定されれば勝手に再生されます(スマホは無理だよ)。js側で再生したければaudio.play(),停止はaudio.pause()でできます。autoplayをやめる時はaudio.autoplay = false;で
曲が終わったら、再生終了イベントから次の曲にしてます。
フェードイン,アウトは再生時間の変化イベントから無理やり音量をかえてます。
<br /> audio.addEventListener("timeupdate", function(){<br /> if(audio.currentTime <= 0 || audio.currentTime >= audio.duration){<br /> audio.volume = 0.0; //safariだとcurrentTimeがマイナスをとったりdurationを超えることがあったので<br /> }<br /> else if(audio.currentTime <= 3 &&){<br /> audio.volume = audio.currentTime*0.3; //フェードイン<br /> }<br /> else if(audio.currentTime > audio.duration-3){<br /> audio.volume = (audio.duration – audio.currentTime)*0.3; //フェードアウト<br /> }<br /> else{<br /> audio.volume = 1.0;<br /> }<br /> }, false);<br />
3秒かけてフェードするようにしてます。
あとはいい感じにリストをつくなりして完成です。
視聴ゆえに30秒ぐらいしかないけど、ラジオ感覚でてきとうに聞く分には便利。なのか?
ウィジェット化して使うと多少便利。おかげで最近は
仕事に集中できない
[ad][ad]