見出し画像

Genius API 使い方(簡易)2024年度

講義および自身の研究で歌詞を取得できるGenius APIを用いるのでその使い方を備忘がてらいかに記す。

(1)
https://genius.com/developers
まず上記のdeveloperサイトにアクセスし、サインアップして自分の作成するアプリを登録して
・CRIENT_ID,
・CRIENT_SECRET,
・CRIENT_ACCESS_TOKEN の3つを取得する。
実際に用いるのは以下の通りACCESS_TOKENのみ。
最低限、app名とwebsiteURLだけを登録すれば、発行されます。

私のアプリ登録


(2)
これでtokenを取得したら、認証通すため以下のコードを走らせます。なお私の実行環境はJupiter Notebookです。以下のtokenに自身のtokenをコピペしてください。

import lyricsgenius
# Genius APIのアクセストークンを設定
token = '??????????'
# Geniusオブジェクトを生成
genius = lyricsgenius.Genius(token)

(3)
これが問題なく走れば実際にデータを取得できます。私の動作環境はjupiter notebookでした。当初はVScodeおよびcolabで走らせていましたが途中で原因不明のエラーにそうぐしたのですが、ここで議論されている通り、ワークアラウンドもないっぽいです。また定かではなうがしっかりこのAPIはメンテされていないようなのでデータをとるなら早め早めですね。
https://github.com/johnwmillr/LyricsGenius/issues/220

ただJupiterNotebookであれば問題なく走りました。そしたら2023年の年間のspotify再生回数ランキング(日本)の上位10位を取得しましょう。

# 曲リスト
tracks = [
    ("アイドル", "YOASOBI"),
    ("怪獣の花唄", "Vaundy"),
    ("Subtitle", "OFFICIAL HIGE DANDISM"),
    ("ダンスホール", "Mrs. GREEN APPLE"),
    ("W / X / Y", "Tani Yuuki"),
    ("KICK BACK", "Kenshi Yonezu"),
    ("Overdose", "natori"),
    ("美しい鰭", "SPITZ"),
    ("ベテルギウス", "Yuuri"),
    ("シンデレラボーイ", "Saucy Dog")]

上記のリストをもとに以下で取得します。

import lyricsgenius
import pandas as pd
import time

# Genius APIのアクセストークンを設定
token = '??????????'
# Geniusオブジェクトを生成
genius = lyricsgenius.Genius(token, remove_section_headers=True, skip_non_songs=True)

# データを格納するリスト
data = []

for title, artist in tracks:
    try:
        # 曲情報を検索
        print(f"Searching for \"{title}\" by {artist}...")
        song = genius.search_song(title, artist)
        if song:
            lyrics = song.lyrics
            data.append([title, artist, lyrics])
        else:
            data.append([title, artist,None])
    except Exception as e:
        print(f"Error fetching data for {title} by {artist}: {e}")
        data.append([title, artist, None])
    time.sleep(5)  # APIレート制限を避けるために待機

# データをデータフレームに変換
df = pd.DataFrame(data, columns=["Track Name", "Artist Name", "Lyrics"])
df

出力は以下です。Lyricsの中身をcsv化したものはさらに下です。

以下がcsvにして見やすくしたもの。

https://docs.google.com/spreadsheets/d/1PhKXENuUkcIqXhBkuC67XRLKlOu4X7z10uWgSOZD18g/edit?usp=sharing


見ていただけると、
歌詞の一行目にはこのような
「4 ContributorsTranslationsRomanizationEnglish怪獣の花唄 (Kaijuu No Hanauta) LyricsVaundy 「怪獣の花唄」の歌詞 思い出すのは君の歌 会話よりも鮮明だ4 ContributorsTranslationsRomanizationEnglish怪獣の花唄 (Kaijuu No Hanauta) LyricsVaundy 「怪獣の花唄」の歌詞 思い出すのは君の歌 会話よりも鮮明だ…..」

外国語の場合は貢献した人(?)の情報があったり、また日本語の歌詞がローマ字表記であったり、またこれ以外のやつでは貢献者の名前だけが書いてあるものもあり、
例えば、「8 ContributorsList of Virtual YouTubers (VTubers) Lyrics # | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O P | Q | R | S | T | U | V | W | X | Y | Z | Graduated Last updated May 23, 2024 Feel free to add any VTubers that aren't on this list using this format! / (Agency or group)Graduating Soon (as far as active contributors know of) Give them some support before they're gone by clicking on their name(s)!Shisui Kiki / 紫水キキ (Nanashiinku) # - 2 8 (Hachiya Eito) / はちやえいとA - 137Abi Kadabura (V4Mirai) Abyss DIVA AesopDu / 伊索渡 Aether Crescentia / エーテル・クレスエンティア African Penguin -Cape- / ケープペンギン (KemoV) Agato Yo / 鼎 曜….」
みたいな文字列が入っていたり実際に分析などを行うケースの場合はその中身を確認してクリーニングする必要がありそうです。

また、古い曲はそもそもデータがないので取れなくて空で出力されることもあります。基本最近の曲は多くのケースでは歌詞が取れますが。

とりあえずこんなもんですかね。

いいなと思ったら応援しよう!