🌶️
[WIP]Spotify × Pythonで今の気分、作業内容、トレンドによってアルバムを自動作成する。
webインターフェイスからの入力によるSpotifyのアルバム作成を行う。
イメージとしては下のような画面から、入力を行い。その入力内容によって独自にspotify APIを用いることでアルバムを作成する。
アルバム作成に用いる情報として、webインターフェイスから得られるその時の気分、今から行う作業内容に加えて、Spotify内の曲のランキング、温度などを用いた独自のアルゴリズムで選曲、アルバム作成を行う。とりあえず、ひとつのアルバムにつき10曲くらいを目安に追加する。
ここで用いるアルゴリズムには、spotify内の曲にそれぞれ付けられている以下のような情報をもとに作成していこうと思う。
環境構築
app--
--Dockerfile
--docker-compose.yaml
--README.md
--app
|--index.py
|--templates
--|--index.html
--|--create_album.html
|--spotify
--|--sp_controller.py
Dockerfile
FROM python:3.9
WORKDIR /app
COPY ./app /app
RUN pip install Flask
RUN pip install -U MarkupSafe
RUN pip install flask-login
RUN pip install flask-mysql
RUN pip install -U PyMySQL
RUN pip install python-dotenv
CMD ["python", "index.py"]
docker-compose.yaml
version: '3'
services:
db:
image: mysql:8.0
platform: linux/x86_64
container_name: demoapp-mysql-db
hostname: demoapp-mysql-db
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: password
ports:
- '3306:3306'
command: --default-authentication-plugin=mysql_native_password
networks:
- app-net
flask:
build: .
ports:
- "5005:80"
volumes:
- ./app:/app
networks:
- app-net
depends_on:
- db
networks:
app-net:
driver: bridge
volumes:
db_data:
templates/index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h2>今日の気分を入力しよう</h1>
<form action="/create_album" method="POST">
<input type="checkbox" name="date-term" value="morning">
<label for="date-term">朝</label>
<input type="checkbox" name="date-term" value="noon">
<label for="date-term">昼</label>
<input type="checkbox" name="date-term" value="night">
<label for="date-term">夜</label><br>
<select name="feeling">
<option value="">--今の気分を選択しよう--</option>
<option value="workingonsunshine">最高</option>
<option value="feelinggood">気分がいい</option>
<option value="soso">まあまあ</option>
<option value="feelingbad">気分が悪い</option>
<option value="depressed">落ち込んでる</option>
<option value="wannadonothing">何もしたくない</option>
</select><br>
<select name="todo">
<option value="">--今からする作業を選ぼう--</option>
<option value="workingonsunshine">移動</option>
<option value="feelinggood">コーディング</option>
<option value="soso">事務作業</option>
<option value="feelingbad">大学の勉強</option>
<option value="depressed">記事</option>
<option value="wannadonothing">睡眠</option>
</select><br>
<input type="submit" value="アルバム作成">
</form>
</body>
</html>
index.py
from flask import Flask, render_template, request, session, url_for, redirect
from markupsafe import escape
import model
from spotify import sp_controller
app = Flask(__name__)
@app.route("/")
def index():
return render_template('index.html')
@app.route("/create_album", methods=["POST", "GET"])
def create_album():
album = sp_controller.manage_album(request.form["date-term"], request.form["feeling"], request.form["todo"])
return render_template("spotify_page.html", album=album)
if __name__ == "__main__":
app.run(host="0.0.0.0", port=80, debug=True)
続く。。。
Discussion