spotify-paivittaja/README.md

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`.