Added README
parent
c5856964ed
commit
4789e52626
56
README.md
56
README.md
|
@ -1,3 +1,55 @@
|
||||||
# backend
|
# Jos
|
||||||
|
|
||||||
The backend, written using Python and Flask.
|
Jos is one of my oldest project ideas, and the one that's definitely stuck
|
||||||
|
around the longest.
|
||||||
|
|
||||||
|
The idea is pretty straightforward: I like music, and I'd like to download any
|
||||||
|
music I want from YouTube using
|
||||||
|
[YoutubeDL](https://github.com/ytdl-org/youtube-dl)
|
||||||
|
([mirror](https://git.roosens.me/mirrors/youtube-dl)). I've written dozens of
|
||||||
|
scripts that automate some parts of this process, such as looking up the
|
||||||
|
correct video, or searching for metadata using the
|
||||||
|
[Spotify API](https://developer.spotify.com/documentation/web-api/). The goal
|
||||||
|
of this project is to be the final "script", housing everything I need to grow
|
||||||
|
my music collection.
|
||||||
|
|
||||||
|
## Design of the project
|
||||||
|
|
||||||
|
I've decided to create Jos using the classic frontend-backend combo: a backend
|
||||||
|
(written in Python using Flask) serves a RESTful API that does all the hard
|
||||||
|
work. We then put a lovely frontend in front of it (Vue 3) that interacts with
|
||||||
|
this API to make a functional website.
|
||||||
|
|
||||||
|
Ever since I had my Web Development course (taught by
|
||||||
|
[Ruben Verborgh](https://ruben.verborgh.org/)), I've been very interested in
|
||||||
|
developing high-performing and practical web applications using RESTful API's.
|
||||||
|
I know developing two separate applications requires more work, but it allows
|
||||||
|
for more flexibility, e.g. it allows me to swap out the backend for a
|
||||||
|
completely new implementation,
|
||||||
|
[in a different language](https://git.roosens.me/Chewing_Bever/fej).
|
||||||
|
|
||||||
|
## Plans
|
||||||
|
|
||||||
|
### API
|
||||||
|
|
||||||
|
* Search engine for high-quality music videos (using the `"auto-generated"`
|
||||||
|
trick.)
|
||||||
|
* Wrapper layer around the Spotify API for searching for tracks/albums/artists
|
||||||
|
* Return a JSON dump containing all metadata & urls you need to download a
|
||||||
|
track/album
|
||||||
|
This allows the API to be used by non-authenticated users as well (e.g. we
|
||||||
|
could write a Python client that uses the API, but downloads locally.)
|
||||||
|
* Download a track/album (should use some sort of authentification probably)
|
||||||
|
|
||||||
|
### Frontend
|
||||||
|
|
||||||
|
* Search for tracks/albums/artists
|
||||||
|
* Edit metadata & select best video
|
||||||
|
* Tell server to download track/album
|
||||||
|
* Live updates per track on how far the download is (or just wether or not
|
||||||
|
it's done)
|
||||||
|
* file explorer for music collection
|
||||||
|
* metadata editor for collection
|
||||||
|
* Analysis of existing collection
|
||||||
|
* Find incomplete albums & suggest missing tracks to download
|
||||||
|
* Detect invalid metadata
|
||||||
|
|
26
ideation.md
26
ideation.md
|
@ -1,26 +0,0 @@
|
||||||
# Ideation
|
|
||||||
|
|
||||||
This file just serves as a central point for all the ideas I have for this
|
|
||||||
project.
|
|
||||||
|
|
||||||
## Used software/services
|
|
||||||
|
|
||||||
* Spotify API to look up album information
|
|
||||||
* YouTubeDL to download the videos
|
|
||||||
* Something to set the mp3 tags, not sure about this one yet
|
|
||||||
|
|
||||||
## API Design
|
|
||||||
|
|
||||||
### Endpoints
|
|
||||||
|
|
||||||
* `GET /search?q=`
|
|
||||||
* search for albums & tracks, given a search query
|
|
||||||
* returns a list of albums/tracks (basically the same as the API, just
|
|
||||||
cleaned up a bit)
|
|
||||||
* `GET /albums?ids=`: get detailed information about an album/a list of albums.
|
|
||||||
I'm not actually sure if I need this one.
|
|
||||||
* `GET /tracks?ids=`: get detailed information about a track/a list of tracks.
|
|
||||||
* `GET /tracks/videos?id=`: given a track, search YouTube for videos about the
|
|
||||||
track. Returns a list of youtube ids
|
|
||||||
* `POST /tracks/download`: download a track. The data should contain the wanted
|
|
||||||
metadata in the file & the id of the youtube video
|
|
Reference in New Issue