LoginSignup
7
2

More than 3 years have passed since last update.

Geniusで歌詞を取ってくる方法

Posted at

はじめに

現在作成中のアプリで、歌詞を取ってくる機能を実装したいと思い
そのようなAPIがないのか探したところGeniusと言うAPIが存在することを
知りました。
ですが、日本語での解説記事に全然巡り合えなかったので、今回は
Geniusの使い方を記載させてもらえたらと思います。
以下Geniusの使い方、また詰まったところを解説します。
※デモgifです
キータgenius.gif

詰まった点

英語のドキュメントしか巡り合えなかったため、英文を読む or Google翻訳なりで
訳して理解するかのどちらかだと思うが、自分は前者を採用して頑張って
英文を理解することにした。
難しい英文ではなかった事と、ドキュメントのAPI使用法の解説が丁寧であった
事から一応読めた。
ドキュメントを読むうちにこの英文はこういう意味では?と思ってコードを書いても
実際は全然理解が違ったりしたのが詰まった点。
全く関係ないライブラリをダウンロードして実装していたりとドキュメントの意味を
間違えてかなり時間を食ってしまった。
逆に言うと、英語を難なく理解できる人であればたやすく利用できるのではないのか?
と感じた。
やはり英語が出来るのは強いと感じた。
あと、自分が参考にしたのは100%公式のドキュメントだった。
公式ドキュメントは何と言ってもそのAPIを作成した人たちが書いているので、
一番強いと思っている。

使用法

まず、Geniusのページ(https://genius.com/developers)
に飛んでサインアップして自分の作成するアプリを登録して
CRIENT_ID,CRIENT_SECRET,CRIENT_ACCESS_TOKENの3つを取得します。
※歌詞を取得する際に使うのはCRIENT_ACCESS_TOKENだけです。

そして、Geniusのアノテーションを作成しているアプリに埋め込みます。
↓こちらがGeniusのアノテーション

sample.php
<script src="https://genius.codes"></script>

アノテーションはmetaタグの次に埋め込むと良いと思います。
そうした後は、composerを使用して
コマンドプロンプトやターミナルでアプリのディレクトリにて
composer require simivar/genius-php php-http/message php-http/guzzle6-adapter
を打ち込んで、Geniusのパッケージをダウンロードします。
Geniusからは、楽曲に関する様々な情報が取得できます。
歌詞以外に関する情報はこちらには記載しないので、公式ドキュメント
(https://docs.genius.com/#/getting-started-h1)
を参照していただければ、と思います。
実際のコードを載せます。

sample.php
require 'vendor/autoload.php';
  $authentication = new \Http\Message\Authentication\Bearer($_ENV['CLIENT_ACCESS_TOKEN']);
  $genius = new \Genius\Genius($authentication);
  $getSongId = $genius->getSearchResource()->get('lemon 米津')->response->hits[0]->result->id;
  $searchSong = $genius->getSongsResource()->get($getSongId,'html')->response->song>embed_content;

2行目のCLIENT_ACCESS_TOKENには、アプリ登録時にGeniusから送信されたアクセストークンを設定します。
そのあと

$getSongId = $genius->getSearchResource()->get('lemon 米津')->response->hits[0]->result->id;

でget()の中に入れた文字列(ここではヒットしやすいように入れた米津玄氏さんのlemon)をもとに
曲のidを取得しています。
そしてそのidをもとにして、ヒットした歌詞を表示しています。

$searchSong = $genius->getSongsResource()->get($getSongId,'html')->response->song>embed_content;

getの2つ目の引数には、dom,plainそしてhtmlなど様々な引数を代入できますが、
歌詞を取ってくるにはhtmlじゃないとキツそうだったので僕はhtml
を選択しました。

そのあと、取ってき歌詞を表示するためにhtmlを生成してあげればOKです。

<?php print($searchSong);?>

おわりに

外部APIを使用すると段違いに実装できる内容が増えて、よりアプリの利便性を
高めてくれる事を実感しました。
これからも面倒くさがらずに、英語のドキュメントに挑戦して
外部APIを使用していきます。

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2