さらいふ

NowPlayingをPythonでTweetする

投稿日 : 2020/12/7 23:07:05

タグ : #salad's memo#Python#旧ブログシステム

warningこの記事は作成から一年以上が経過しています

最新のコードやバージョンに対応していない場合があります。ご了承ください。

前置き

どうも、この前学校で体脂肪率測ったら6.8%だったけどこれがどうなのかよくわからないさらだぼぉるです。
みなさん音楽って聞きますか?僕は音楽大好きですね。大体毎日1~2時間以上は聞きますね(学生なので聞く時間がないとか言えない)プログラミングしているときとか音楽は離せないという方も多いのではないでしょうか。
そんな音楽ですが、Twitterなどで#NowPlayingというハッシュタグがあるのはご存知でしょうか?今聴いている曲を#をつけてツイートするというものなのですが、いちいちツイートするのめんどくないですか?何か作業しているのに#NowPlayingするためだけにTwitterに移動して投稿して、、、ということで、(Spotifyで)音楽を聴いているときに#NowPlayingをツイートしてくれる仕組みをPythonで作りました。

spotipy と tweepy

ということで今回はspotifyの情報を取得したいのでspotipyを使ってデータを取得したいと思います。Tweetにはtweepyを使って簡単に実装しました。

今回使うPythonライブラリの一覧です。事前にインストールを済ませておいてください。

まぁPythonを常用している人は何に使うのかは大体予想できると思いますが、使いながら説明していきたいと思います。

NowPlayingの取得

とりあえずまず、Spotifyの現在再生している音楽を取得しないと話が始まりません。早速コードを書いていきましょう。
まず、SpotifyのDevelperサイトにアクセスしてCLIENT IDとCLIENT SECRET IDを取得します。
サイトにアクセスして、(過去に作ったのがあるので、一つありますが本来なら追加ボタンしかないはずです)MyNewAppをクリック
SpotifyのDasbBoardページ
アプリの名前と、説明を書いてCREATE
SpotifyCreateAPP
すると画像のようにClient ID が生成されます。(その下にあるボタンを押すとSecret IDが表示されます)
ClientID生成成功

とりあえずコード書き書き

では実際にデータを取得していきましょう。

SPOTIFY_CLIENT_ID = XXXXXXXXXXXXXXXXXXXXXX
SPOTIFY_CLIENT_SECRET = XXXXXXXXXXXXXXXXXXXXXX
from dotenv import load_dotenv
import os
import spotipy
import spotipy.util as util

#環境変数の設定
load_dotenv(verbose=True)
s_client_id = os.environ.get("SPOTIFY_CLIENT_ID")
s_client_secret = os.environ.get("SPOTIFY_CLIENT_SECRET")

#下に詳細
token = util.prompt_for_user_token(username="詳しくは↓", scope='user-read-currently-playing', client_id=s_client_id, client_secret=s_client_secret, redirect_uri="http://example.com")
spotify = spotipy.Spotify(auth=token)
current_track = spotify.current_user_playing_track()
print(current_track)

これでとりあえず、実行できます。usernameに関してですが、表示されている名前では通らないことがあります。SpotifyのHPのアカウントページから確認してください。

Spotifyのユーザー名画面
(この画像のユーザー名をコピペしてください)

初回はwebページが開くのでそのページのURLをコピーしてください。
Spotifyのアカウント確認画面

コードを詳しく解説

token = util.prompt_for_user_token(
	username="HOGEHOGE",  #ユーザーネームを送信
	scope='user-read-currently-playing', #socope(どんな情報を得るか)の設定
	client_id=s_client_id, #Client IDの送信
	client_secret=s_client_secret, #Secret Client IDの送信
	redirect_uri="http://example.com" #リダイレクト先のURLを指定
)
spotify = spotipy.Spotify(auth=token) #tokenの認証
current_track = spotify.current_user_playing_track() #再生中の楽曲情報取得
print(current_track) #再生中の楽曲情報表示

current_trackの中身についてはSpotifyのページGet the User's Currently Playing Trackに書いてあります。

Tweeeeeeeet

では、現在再生中の楽曲は取得できたのでTweetをするコードを書いていきましょう。そのためにTwitterのAPIキーを取得する必要があります。

ではコード取得できたので.envとmain.pyに追記していきます。

TWITTER_APIKEY ="XXXXXXXXXXXXXXXXXXXXXX"
TWITTER_SECRET_APIKEY="XXXXXXXXXXXXXXXXXXXXXX"
TWITTER_ACCESSTOKEN="XXXXXXXXXXXXXXXXXXXXXX"
TWITTER_SECRET_ACCESSTOKEN ="XXXXXXXXXXXXXXXXXXXXXX"
import tweepy
t_api_key = os.environ["TWITTER_APIKEY"]
t_api_skey = os.environ["TWITTER_SECRET_APIKEY"]
t_token = os.environ["TWITTER_ACCESSTOKEN"]
t_s_token = os.environ["TWITTER_SECRET_ACCESSTOKEN"]
auth = tweepy.OAuthHandler(t_api_key, t_api_skey)
auth.set_access_token(t_token, t_s_token)
api = tweepy.API(auth)
tweet = '曲名:' + current_track['item']['name']+'\n'\
            +'アーティスト:' + current_track['item']['artists'][0]['name']+'\n'\
            +'Spotify:' + current_track['item']['external_urls']['spotify']+'\n'\
            +'#NowPlaying'
api.update_status(tweet)

これでTweetができるはずです。
では一度全文を書いておきます。

SPOTIFY_CLIENT_ID = XXXXXXXXXXXXXXXXXXXXXX
SPOTIFY_CLIENT_SECRET = XXXXXXXXXXXXXXXXXXXXXX
TWITTER_APIKEY ="XXXXXXXXXXXXXXXXXXXXXX"
TWITTER_SECRET_APIKEY="XXXXXXXXXXXXXXXXXXXXXX"
TWITTER_ACCESSTOKEN="XXXXXXXXXXXXXXXXXXXXXX"
TWITTER_SECRET_ACCESSTOKEN ="XXXXXXXXXXXXXXXXXXXXXX"
from dotenv import load_dotenv
import os
import spotipy
import spotipy.util as util
import tweepy

#環境変数の設定
load_dotenv(verbose=True)
s_client_id = os.environ.get("SPOTIFY_CLIENT_ID")
s_client_secret = os.environ.get("SPOTIFY_CLIENT_SECRET")
t_api_key = os.environ["TWITTER_APIKEY"]
t_api_skey = os.environ["TWITTER_SECRET_APIKEY"]
t_token = os.environ["TWITTER_ACCESSTOKEN"]
t_s_token = os.environ["TWITTER_SECRET_ACCESSTOKEN"]
auth = tweepy.OAuthHandler(t_api_key, t_api_skey)
auth.set_access_token(t_token, t_s_token)
api = tweepy.API(auth)

#取得&Tweet
token = util.prompt_for_user_token(username="詳しくは↓", scope='user-read-currently-playing', client_id=s_client_id, client_secret=s_client_secret, redirect_uri="http://example.com")
spotify = spotipy.Spotify(auth=token)
current_track = spotify.current_user_playing_track()
print(current_track)
tweet = '曲名:' + current_track['item']['name']+'\n'\
            +'アーティスト:' + current_track['item']['artists'][0]['name']+'\n'\
            +'Spotify:' + current_track['item']['external_urls']['spotify']+'\n'\
            +'#NowPlaying'
api.update_status(tweet)

ツイートできましたか?
これでよき#NowPlayingLifeをお過ごしください!
以上さらだぼぉるでした。

参考

TweepyでTwitterに投稿する

さらだぼぉる

[非公式]滋賀県コロナまとめサイトをはじめとした滋賀情報ネットプロジェクトといった地域情報を発信する取り組みをしている。 2022年10月現在高校三年生で滋賀在住。 PythonやSvelteKitが最近のお気に入り。