Mi szól a Sláger Rádióban?

A Sláger Rádió Online nem közli a jelenleg szóló számok címét az mp3 streamben. Cserébe van külön HTML felület.

Ha nem akarunk állandóan a honlapjukon lógni, ezen kis script segít. Függése: Lynx, iconv.


#!/bin/bash

LYNX="$(which lynx)"
LYNX="${LYNX} -dump"

URL="http://www.slagerradio.eu/mostszol2.php"

################################################

txt="$(${LYNX} ${URL} | iconv -f latin2 -t utf8 | head -n +2 | sed -e 's/\[1\]\[hallgasd\.gif\]//g' -e 's/ +/_/g' | tr '\n' '$') "

artist="$(echo ${txt} | cut -d'$' -f1 )"
title="$(echo  ${txt} | cut -d'$' -f2 )"
echo "Artist: ${artist}"
echo "Title: ${title}"

Hozzászólások

wget nem jau? Mondjuk mindegy a lényeg szempontjából. :) Ügyes.

Azert nem jo, mert a html kod semmilyen segitseget nem ad. Legalabb 3 hasonlo felepitesu resz van, mint amire greppelhetnek.

Eredetileg python-ba akartam DOM XML-lel parsolni, de ezek a nyavajasok a javascriptet nem jeloltek meg XML kommentnek (ugy kellene), igy teljesen invalid xml-t kapok, az & jel miatt, a sax meg megint nem jo, pont azert, amiert a wget: egyaltalan semmilyen azonositoja nincs a kerdeses szakasznak. Ezert ez az undorto gany. A lynx azert tunt jo megoldasnak, mert tud mindenfele html inputot parsolni, teljesen hidegen hagyja a totalis invaliditas.

Zsír! :) Már csak bele kell hekkelni, hogy a kinyert infókat a lejátszó jelenítse meg. Egy streamhez hozzá lehet adni id3 taget, miközben éppen lejátszák? :)

nem ertem miert nem tudnak egy rendes title-t tenni
maskull epp a napokba asztattak. mostmar (winapba) irja h slager radio

hmm latom xmms kiirja szepen h Slager Radio

szerk: nalam nem mukodik :-?
$ sh slater.er
iconv: iconv_open(utf8, latin2): Invalid argument
Artist:
Title:
$
ha kiveszem az iconv szarsagot:
$ sh slater.er
Artist:
Title: BRYAN ADAMS
$
ha megeditelem:
$ sh slager
Artist: BRYAN ADAMS
Title: HAVE YOU EVER REALLY LOVED A WOMAN
$

$ diff slater.er ../slager
10c10
< txt="$(${LYNX} ${URL} | head -n +2 | sed -e 's/\[1\]\[hallgasd\.gif\]//g' -e 's/ +/_/g' | tr '\n' '$') "
---
> txt="$(${LYNX} ${URL} | head -n +3 | sed -e 's/\[1\]\[hallgasd\.gif\]//g' -e 's/ +/_/g' | tr '\n' '$') "
12,13c12,13
< artist="$(echo ${txt} | cut -d'$' -f1 )"
< title="$(echo ${txt} | cut -d'$' -f2 )"
---
> artist="$(echo ${txt} | cut -d'$' -f2 )"
> title="$(echo ${txt} | cut -d'$' -f3 )"
$

Erdekes, neked elmaszik... fura... iconv plane. Nekem unicode a terminalom, ergo nekem sajna kotelezo a iconv, kulonben nem latom a szam cimet. meg azt tudom elkepzelni, hogy neked a lynx kisse mas kimenetet ad, mint nalam. sajnos ezzel nem tudok mit csinalni, nem tudom mi a standard.

Apropo, van egy bug: idonkent nem adnak szamcimet csak eloadot, ilyenkor a szamcim [elvalaszto-24.gif] lesz asszem. Ha valaki kesobb ez alapjan akar valamit fejleszteni, jo ha tudja.

Ja, es ferfiasan bevallom, hogy en real playeren (helix player vagy mi) hallgatom a musort. Eleg kicsire osszehuzza magat, raadasul 3 asztallal arrebb van, ugyhogy fingom nincs, kiirja-e azt hogy slager radio, de azt tudom, hogy a szamcimeket kihagyja. Igenytelenseg magas fokon.

Lehetne ra valami CGI-vel webservice-t irni, majd gondolkodom rajta. Persze akkor utana kell neznem valami emberibb parsolasi modnak.

Ugye feltűnt, hogy direkt kiemeltem: hivatalos. Azaz UTF-8 formában mindenütt kell(ene) működnie, UTF8-ként viszont nem. (Mint ahogy a Latin2 -vel is az a helyzet, hogy korrekten ISO-8859-2 néven kéne nevezni - ha jól tudom.) És persze sejthető, hogy máshol megy UTF8 -ként, mert ha nem menne így, akkor az eredeti kódban sem így lenne.

Ertelek.

A latin2-t azert szeretem amugy jobban, mert kevesebb szamot kell megjegyezni mint a iso-8859-2 megnevezeshez, emellett rovidebb.

Amugy az utf8 sztringet a _hivatalos_ iconv man-ban lattam, tekintve, hogy ezt a progit ez elott nem nagyon hasznaltam ilyesmire (meg masra sem). Azert igy kerult a scriptbe, mert copypasta volt az egesz, nem is gondoltam arra, hogy masnal esetleg nem mukodhet. Amugy megy a Google van olyan rendes, es mindenkinek segit :-)

Ezzel egyutt koszonom a hasznos infot, meg a kiigazitast is.

kerülőút:
hallgass Petőfit, mer' ott a szamcimek még XMMS-ben is lejönnek:)
nem mellesleg elofordulnak jokis jazz notak...
pontpontpont...

---
"... nem zsaru vagyok, hanem a rendorfonok."

Aki az egyszerű megoldásokban hisz, annak:

wget -q -O - 'http://www.slagerradio.eu/mostszol2.php' | sed -n '30,31{s/<[^>]*>//g;s/^ *//;p}'

És ha UTF-8 terminálod van, akkor írd mögé:

| recode l2..u8

De ez a tudás nem slágerrádió specifikus.

output:

ROBBIE WILLIAMS
SOMETHING BEAUTIFUL

Ha most valaki azzal jön, hogy ez nem semantic sensitive, hanem syntax only hack, az kérem pályázzon a semantic sensitive megoldásával és megnézzük, hogy amikor változik az oldal, akkor működik-e az majd tovább. Arra is kiváncsi leszek, hogy vajon melyiket lesz könnyebb megjavítani, egy átlátható hacket vagy egy logikát tartalmazó dom szörnyeteget.

Gergő

Gondolom ismeritek azt az érzést, amikor délután hallgattad a rádiót és megtetszett egy szám, de a címét nem tudtad. Sajnos nem voltál netközelben, hogy a fenti parancssorozattal lekérd az aktuális számot. Ilyenkor mi a teendő?

Írni egy szkriptet rá, ami naplózza az éppen a rádióban hallható számot egy fájlba.

Nos, bátorkodtam összeharácsolni, annak ellenére, hogy nem tudok különösebben bashül. Screennel párosítva hasznosnak tartom.

Mit csinál? Másfél percenként megnézi, hogy még mindig ugyan az szól-e, és ha nem, kiírja az időt és az előadót + címet egy fájlba a többi után. Naponta rotálja a fájlokat. (Megoldhattam volna symlinkkel is, stb., de nem szántam rá különösebben sok időt, meg hogy csinos legyen, ...)

Soha nem tanultam basht, úgyhogy a kód minőségéért felelősséget nem vállalok:) Építő jellegű hozzászólásokat szívesen veszem, hogyan lehetne javítani esetleg rajta.

Update: ha sokáig hagyom futni, csomó új processt fog indítani a

sleep 90 && ./slager.sh

miatt, érthető módon. Ezt hogyan lenne célszerű elkerülni? Lehet bashben rekurzív dolgokat írni?!

(Átmenetileg azt csináltam, hogy egy while ciklusba foglaltam az egészet, a feltétel miatt pedig soha nem fog kiugrani belőle, így folyamatosan fut, de nem hoz létre új processeket. Viszont ezt nagyon nem tartom elegáns megoldásnak.) Van valakinek vmi jó ötlete?