昨日の続き。Spotify Web API PHPを使ってごにょごにょ。
doroyamada.hatenablog.jp
プレイリストの取得はスムーズに行った。複数のミュージシャンのコラボレーション曲ではartistsが参加ミュージシャン名の配列になっていたりするという細かい仕様で感心したけど、今回はメインのミュージシャンだけ取得するようにした。
ついでに、サーバ(といってもlocalhost)上で動くように作り変え。アルバムとプレイリスト両対応。
<html> <header><style type="text/css"> <!-- pre {color:blue; font-size:x-large; background-color:#F8F8FF; padding-left:20px;} body {margin-left:30px; margin-top:20px;} --> </style> </header><body> <form action="list.php" method="get"> <p><label>URL <input type="text" size="60" name="url"/></label></p> <p> <label>Lang <input type="radio" name="lang" value="JA" checked="checked" />JP</label> <label><input type="radio" name="lang" value="US"/>US</label> <input type="submit" value="送信"> </p> </form> <pre> <?php require 'vendor/autoload.php'; use SpotifyWebAPI\Session; use SpotifyWebAPI\SpotifyWebAPI; $url = $_GET["url"]; $lang = $_GET["lang"]; include("account.php"); if(isset($url)){ #プレイリスト if(preg_match('/https:\/\/open\.spotify\.com\/playlist\/(.+)/', $url,$temp)){ $session = new Session($client_id, $client_secret); $api = new SpotifyWebAPI(); $session->refreshAccessToken($RefreshToken); $api->setAccessToken($session->getAccessToken()); $playlist = $api->getPlaylist($temp[1], $lang); foreach($playlist->tracks->items as $track){ print_r($track->track->artists[0]->name); echo "\t"; print_r($track->track->name); echo "\n"; } exit(); }elseif(preg_match('/https:\/\/open\.spotify\.com\/album\/(.+)/', $url,$temp)) { $session = new Session($client_id, $client_secret); $api = new SpotifyWebAPI(); $session->refreshAccessToken($RefreshToken); $api->setAccessToken($session->getAccessToken()); $album = $api->getAlbum($temp[1], $lang); foreach($album->tracks->items as $track){ echo $track->name; echo "\n"; } exit(); }else{ die("URL形式が正しくありません。\n"); } }else{ #die("引数を指定してください。\n"); } ?> </pre> </body> </html>
ついでに、ブックマークレットも作成。
avascript:(function(){ var url=location.href; if( url.match(/https:\/\/open\.spotify\.com\/(album|playlist)\//)!=null){ window.open("http://localhost/spotify/list.php?url=" + location.href );} else{ alert('bad url'); } })();
これでやりたかったことはできるようになったので満足。これ以上高度なことをしようとも思っていないし。あとはweb上の操作で十分だと思う。