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