91 lines
3.2 KiB
Markdown
91 lines
3.2 KiB
Markdown
# Wiki-to-Spotify Soittolistan Päivittäjä 🎵
|
|
|
|
Tämä Python-skripti hakee automaattisesti kuluvan viikon biisivalinnat MediaWiki-sivulta ja päivittää ne haluttuun Spotifyn soittolistaan.
|
|
|
|
## Ominaisuudet
|
|
* **Kaksi toimintatilaa:**
|
|
1. **Komentorivi:** Hakee biisit kerran ja lopettaa (sopii Cron-ajoon).
|
|
2. **Webhook-palvelin:** Kuuntelee (Flask/Gunicorn) ilmoituksia Wikistä ja päivittää soittolistan reaaliajassa kun sivu tallennetaan.
|
|
* Kirjautuu MediaWiki-rajapintaan ja lukee kuluvan viikon (esim. `== Viikko 10 ==`) sisällön.
|
|
* Etsii tekstistä suorat Spotify-linkit.
|
|
* Jättää huomiotta muiden palveluiden (esim. YouTube) linkit.
|
|
* Korvaa valitun Spotify-soittolistan sisällön löydetyillä kappaleilla.
|
|
|
|
## Vaatimukset
|
|
* Python 3
|
|
* [uv](https://github.com/astral-sh/uv) (suositeltu) tai perinteinen `pip` paketinhallintaan.
|
|
* Spotify Developer -sovelluksen tunnukset (Client ID & Client Secret).
|
|
* Tunnukset kohde-MediaWikiin.
|
|
|
|
## Asennus ja käyttöönotto
|
|
|
|
**1. Lataa koodi ja luo virtuaaliympäristö**
|
|
|
|
```bash
|
|
uv venv
|
|
source .venv/bin/activate
|
|
uv pip install -r requirements.txt # Tai asenna manuaalisesti: spotipy requests python-dotenv flask gunicorn
|
|
```
|
|
|
|
**2. Asetukset**
|
|
|
|
Luo tiedosto nimeltä `.env` (voit kopioida `.env.example` -tiedoston pohjaksi) ja täytä sinne omat tietosi:
|
|
|
|
```env
|
|
SPOTIPY_CLIENT_ID="sinun_spotify_client_id"
|
|
SPOTIPY_CLIENT_SECRET="sinun_spotify_client_secret"
|
|
SPOTIPY_REDIRECT_URI="http://localhost:8888/callback"
|
|
PLAYLIST_ID="soittolistan_id_jota_paivitetaan"
|
|
|
|
WIKI_USERNAME="wiki_tunnuksesi"
|
|
WIKI_PASSWORD="wiki_salasanasi"
|
|
WIKI_API_URL="https://sinun-wikisi.fi/api.php"
|
|
WIKI_PAGE_TITLE="Sivun_Nimi"
|
|
|
|
# Valinnainen webhookin suojaus
|
|
WEBHOOK_SECRET="valitse_oma_salasana"
|
|
```
|
|
|
|
## Toimintatila 1: Komentorivi (Cron)
|
|
|
|
Aja skripti kerran:
|
|
```bash
|
|
python levyraati.py
|
|
```
|
|
|
|
Voit asettaa tämän ajumaan Cron-työkalulla esimerkiksi klo 04:00:
|
|
```bash
|
|
0 4 * * * cd /polku/projektiin && .venv/bin/python levyraati.py >> loki.log 2>&1
|
|
```
|
|
|
|
## Toimintatila 2: Webhook-palvelin (Nginx + Gunicorn)
|
|
|
|
Tämä tila mahdollistaa reaaliaikaisen päivityksen kun Wikissä muokataan sivua.
|
|
|
|
### 1. Testaus manuaalisesti
|
|
```bash
|
|
python levyraati.py --server
|
|
```
|
|
Palvelin kuuntelee portissa 5000. Webhook-osoite on `http://osoite:5000/webhook?secret=salainen_avain`.
|
|
|
|
### 2. Tuotantoasennus (Systemd)
|
|
1. Kopioi `levyraati.service` hakemistoon `/etc/systemd/system/`.
|
|
2. `sudo systemctl daemon-reload`
|
|
3. `sudo systemctl enable --now levyraati`
|
|
|
|
### 3. Nginx-konfiguraatio
|
|
1. Kopioi `levyraati.nginx` hakemistoon `/etc/nginx/sites-available/`.
|
|
2. Aktivoi ja käynnistä uudelleen: `sudo ln -s ... /etc/nginx/sites-enabled/ && sudo systemctl restart nginx`
|
|
|
|
## Spotifyn luvitus
|
|
|
|
Ensimmäisellä käyttökerralla (tai jos kirjautuminen vanhenee / token mitätöidään):
|
|
1. Aja terminaalissa:
|
|
```bash
|
|
python levyraati.py --auth
|
|
```
|
|
2. Skripti tulostaa Spotify-linkin. Avaa se selaimessasi ja hyväksy luvat.
|
|
3. Kopioi selaimen osoiterivillä oleva koko URL ja liitä se takaisin terminaaliin.
|
|
4. `.cache` -tiedosto syntyy ja pitää sinut kirjautuneena jatkossa.
|
|
|
|
Jos soittolistan päivityksessä tulee virhe `error: invalid_grant, error_description: Refresh token revoked`, aja uudelleen `python levyraati.py --auth`.
|