ツイートから感情分析をしてSpotifyから感情にあった楽曲を選曲する


この記事は個人開発 Advent Calendar 2018の9日目です。

タイトルのとおりなのですが、Twitterのツイートから感情を分析してSpotifyからその感情に合った楽曲を選曲してみる仕組みを作ってみました。

使い方

このアカウントに対して@をつけてメンションを送ると、楽曲名とSpotifyのトラックリンクを付けてリプライを飛ばします。

*更新間隔が10分なので少し時間がかかります。
*現在日本語と英語のツイートのみ対応しています。

例えば以下のテキストを送ってみると

I hate these new features On #ThisPhone after the update.
I hate #ThisPhoneCompany products, you'd have to torture me to get me to use #ThisPhone.
The emojis in #ThisPhone are stupid.
#ThisPhone is a useless, stupid waste of money.

こんな感じでリプライが送られてきます。

構成

IBM Watson Tone Analyzer

感情分析にWatson Tone Analyzerを使用しました。
今回は怒り、不安、喜び、悲しみの4つの感情分析のスコアに対して選曲を行うようにしました。

またAPIドキュメントが日本語版が古く更新されていないため、Tone Analyzerで開発をする場合は英語版のドキュメントを参照したほうが良いかもしれません。

Spotify API

Tone Analyzerで出力されたスコアに対して選曲を行うために使用しました。
"Get Recommendations Based on Seeds"というAPIからトラックの様々な属性(楽曲のジャンル、テンポ、曲の明るさ、メジャー・マイナー等)を指定して出力することができるので、この属性を感情に当てはめて選曲を行いました。
https://developer.spotify.com/documentation/web-api/reference/browse/get-recommendations/

Twitter API

Spotify APIから選曲した内容をツイートをするために使用しました。
メンションを取得するAPIツイートの投稿を行うAPIを使用しています。

Wordpress

ロジック部分は私が普段使い慣れているWordpress(4.9.8)を使用しました。

Google Apps Script

IBM Tone Analyzerが英語しか対応していないため、日本語のツイートを翻訳するAPIをGoogle Apps Scriptで作り、英語化してから感情分析をするようにしました。
Cloud Translation APIは有料なので、無料で使えるこの方法でやってみました。

以下の記事を参考にしました。
https://qiita.com/tanabee/items/c79c5c28ba0537112922

000Webhost

https://www.000webhost.com/
ホスティングサービスに無料で使える000Webhostというのを使いました。
Wordpressも000Webhostの管理画面上でできるので、煩わしい操作も必要ありませんでした。
また、cronジョブも無料ユーザーは1個であれば使えるため、今回Twitterのメンションのチェックをこれでやりました。

今後の改善点

一番の改善点はその楽曲が本当にその感情を表すのに最適なのか、という点です。
Tone Analyzerから取得できる感情のスコアの内、喜びが80%の曲と喜びが50%の曲でどのように違いをつけるのかといったことや、怒りの感情が強く出ている場合はメタルをジャンルとして出すという形にしているのですが、そもそもメタルが怒りの感情を表すジャンルなのか、等です。

また、同じツイートでもSpotify APIから返ってくる楽曲の結果がバラバラであったり(仕様?)ということもあり、その点もどのように最適化すべきかということが今後の課題です。