/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Grab NowPlaying-tekst fra DR's Netradioafs~
Fra : Ace


Dato : 31-08-10 08:31

Hejsa.

DR har for rimelig lang tid siden ændret deres måde at vise hvad
de spiller på deres forskellige kanaler i deres
netradioafspiller, og lige siden da har jeg forsøgt at finde ud
af hvordan jeg skulle bære mig ad med at "grabbe"
NowPlaying-teksten - men må nu erkende at jeg desværre er stødt
på lidt af en mur hvad det angår :S

Jeg tror at dataen hentes fra
http://www.dr.dk/drnetradio/inc/poll/poll.drxml men ved så bare
ikke hvordan mit script bør se ud for at være i stand til at
"hente" de enkelte artist- og title-informationer fra de
individuelle kanaler.

Jeg var så heldig, at der i sin tid var en venlig sjæl herinde,
som assisterede mig da jeg første gang havde samme problem, og
håber derfor at der denne gang måske vil være nogle som lettere
kan se løsningen end jeg, og evt. give et eksempel på hvordan et
php-script, til dette formål, kunne se ud.

På forhånd tak.

Venligst
Ace

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Chano Andersen (31-08-2010)
Kommentar
Fra : Chano Andersen


Dato : 31-08-10 19:34

Den 31-08-2010 09:31, Ace skrev:
> Jeg tror at dataen hentes fra
> http://www.dr.dk/drnetradio/inc/poll/poll.drxml men ved så bare
> ikke hvordan mit script bør se ud for at være i stand til at

Det var da et helt horribelt format..

> "hente" de enkelte artist- og title-informationer fra de
> individuelle kanaler.

Umiddelbart ligner det noget blanding af XML og JSON. Prøv at kigge på
hvordan de to formater håndteres, jeg har desværre ikke lige tiden til
at skrive noget der kan parse DR's data.

- Chano Andersen

Chano Andersen (31-08-2010)
Kommentar
Fra : Chano Andersen


Dato : 31-08-10 19:36

Den 31-08-2010 20:33, Chano Andersen skrev:
> Umiddelbart ligner det noget blanding af XML og JSON. Prøv at kigge på

Rettelse.. Det er HTML og JSON.. Du er interesseret i JSON delen, der
står mellem
<div id="nowNext">
og
</div>

Tiden til et eksempel på at trække det ud, er desværre heller ikke
tilstede. Men der er sikkert eksempler på at hente noget ud fra HTML
dokumenter mellem 2 tags, at finde via google.

- Chano Andersen

Martin Larsen (31-08-2010)
Kommentar
Fra : Martin Larsen


Dato : 31-08-10 23:13

Chano Andersen wrote:

> Det var da et helt horribelt format..

Ja!

Det var vist mig der hjalp ACE i sin tid, og umiddelbart tænkte jeg så
nu at det burde være let nok, men der er grumme fejl i deres
opmarkering. Jeg fandt fx denne:

{
"st":"P3",
"curPro":"
}

curPro bør vise det aktuelle program, hvad der da også gør i de fleste
tilfælde. Er der af en eller anden grund ikke noget curPro, burde de i
det mindste vise "curPro":"" altså med 2 stk. apostroffer. Det her er
hverken fugl eller fisk.

Deres fejl gør det vanskeligt at parse med både JSON og regex, men
skulle det endelig være, ville jeg holde på at bruge regex selv om PHP
udmærket kan håndtere JSON. Blot ikke fejlbehæftet JSON!

Martin


Martin Larsen (31-08-2010)
Kommentar
Fra : Martin Larsen


Dato : 31-08-10 23:37

Martin Larsen wrote:

> Deres fejl gør det vanskeligt at parse med både JSON og regex, men
> skulle det endelig være, ville jeg holde på at bruge regex

Ikke desto mindre er her noget kode som ser ud til at virke. Garanterer
dog ikke at det altid virker - der kan være andre fejl i deres opmarkering!

Demo: http://kreacom.dk/files/playlist.php
Sovs: http://kreacom.dk/files/playlist.php.txt

<?php
$url = 'http://www.dr.dk/drnetradio/inc/poll/poll.drxml';
$playlistdata = file_get_contents($url);

$regex = <<<EOD
"st":"(?P<station>[^"]*)"[\s,]*
(?:"curPro":"(?P<curpro>[^"}]*)")?[\s,]*
(?:"nxtPro":"(?P<nxtpro>[^"}]*)")?[\s,]*
(?:"curNum":\s*{"tit":"(?P<title>[^"}]*)"[\s,]*"art":"(?P<artist>[^"}]*))?
EOD;

preg_match_all("%$regex%x", $playlistdata, $matches, PREG_SET_ORDER);
foreach($matches as $match) {
foreach($match as $key => $value) {
if (is_numeric($key) || trim($value)=='') {
unset($result[$key]);
continue;
}
echo "$key: $value<br>";
}
echo "<br>";
}
?>


Ace (01-09-2010)
Kommentar
Fra : Ace


Dato : 01-09-10 21:35

Martin Larsen wrote:
>
> Ikke desto mindre er her noget kode som ser ud til at virke. Garanterer
> dog ikke at det altid virker - der kan være andre fejl i deres opmarkering!
>
> Demo: http://kreacom.dk/files/playlist.php
> Sovs: http://kreacom.dk/files/playlist.php.txt
>
> <?php
> $url = 'http://www.dr.dk/drnetradio/inc/poll/poll.drxml';
> $playlistdata = file_get_contents($url);
>
> $regex = <<<EOD
> "st":"(?P<station>[^"]*)"[\s,]*
> (?:"curPro":"(?P<curpro>[^"}]*)")?[\s,]*
> (?:"nxtPro":"(?P<nxtpro>[^"}]*)")?[\s,]*
> (?:"curNum":\s*{"tit":"(?P<title>[^"}]*)"[\s,]*"art":"(?P<artist>[^"}]*))?
> EOD;
>
> preg_match_all("%$regex%x", $playlistdata, $matches, PREG_SET_ORDER);
> foreach($matches as $match) {
> foreach($match as $key => $value) {
> if (is_numeric($key) trim($value)=='') {
> unset($result[$key]);
> continue;
> }
> echo "$key: $value<br>";
> }
> echo "<br>";
> }
> ?>
>

Hold da op Martin, tusind tak for din hjælp (endnu engang :)) .. din løsningen
er i hvertfald langt mere stabil, end hvad jeg var på vej udi. Min endnu
sparsomme indsigt i PHP's mange muligheder, gjorde at jeg var rimelig meget på
herrens mark, pga. den type markup som DR i dette tilfælde har gjort brug af.

Igen, mange tak :)

Ace

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Martin Larsen (01-09-2010)
Kommentar
Fra : Martin Larsen


Dato : 01-09-10 21:51

Ace wrote:

> Igen, mange tak:)

Selv tak :)

Jeg opdagede lige en fejl som ikke har betydning for demoen, men måske
har det hvis du bygger videre på det.

Erstat

unset($result[$key]);

med

unset($match[$key]);

Det der sker i linjen ovenover er at tomme matches smides væk, så der fx
kun står en "title" der hvor der faktisk er en titel. Uden linjen ville
disse blot springes over, men ikke smides væk.

Hilsen
Martin

Martin (06-09-2010)
Kommentar
Fra : Martin


Dato : 06-09-10 19:36

On 31-08-2010 20:33, Chano Andersen wrote:
> Den 31-08-2010 09:31, Ace skrev:
>> Jeg tror at dataen hentes fra
>> http://www.dr.dk/drnetradio/inc/poll/poll.drxml men ved så bare
>> ikke hvordan mit script bør se ud for at være i stand til at
>
> Det var da et helt horribelt format..

Det er et hamrende skønt format, og utrolig lækkert at arbejde med -
faktisk nemmere end XML :)

Dog selvfølgelig burde koden være korrekt, men desværre ikke

Chano Andersen (06-09-2010)
Kommentar
Fra : Chano Andersen


Dato : 06-09-10 22:01

Den 06-09-2010 20:36, Martin skrev:
> On 31-08-2010 20:33, Chano Andersen wrote:
>> Det var da et helt horribelt format..
>
> Det er et hamrende skønt format, og utrolig lækkert at arbejde med -
> faktisk nemmere end XML :)
>

Det kommer vel an på om det er et menneske eller en maskine der skal
læse det? :P

- Chano Andersen

Henning (07-09-2010)
Kommentar
Fra : Henning


Dato : 07-09-10 07:58

On 2010-08-31 20:33, Chano Andersen wrote:
> Den 31-08-2010 09:31, Ace skrev:
>> Jeg tror at dataen hentes fra
>> http://www.dr.dk/drnetradio/inc/poll/poll.drxml men ved så bare
>> ikke hvordan mit script bør se ud for at være i stand til at
>
> Det var da et helt horribelt format..

Ja ikke det mest logiske, men så galt er det nu heller ikke.

>> "hente" de enkelte artist- og title-informationer fra de
>> individuelle kanaler.

Jeg har skruet et script sammen som samler data sammen i et array.

Det ligger på http://hpc.dk incl koden.

/Henning

Martin (07-09-2010)
Kommentar
Fra : Martin


Dato : 07-09-10 14:00

On 07-09-2010 08:57, Henning wrote:
> On 2010-08-31 20:33, Chano Andersen wrote:
>> Den 31-08-2010 09:31, Ace skrev:
>>> Jeg tror at dataen hentes fra
>>> http://www.dr.dk/drnetradio/inc/poll/poll.drxml men ved så bare
>>> ikke hvordan mit script bør se ud for at være i stand til at
>>
>> Det var da et helt horribelt format..
>
> Ja ikke det mest logiske, men så galt er det nu heller ikke.
>
>>> "hente" de enkelte artist- og title-informationer fra de
>>> individuelle kanaler.
>
> Jeg har skruet et script sammen som samler data sammen i et array.
>
> Det ligger på http://hpc.dk incl koden.

PS
Henning, du skal nok til at "lære" at bruge perl regular expressions
(preg) istedet for regular expressions (ereg) da denne motor med stor
sandsynlighed er på vej ud af PHP i version 6.0 (og deprecated i 5.3)

Henning (08-09-2010)
Kommentar
Fra : Henning


Dato : 08-09-10 07:19

On 2010-09-07 14:59, Martin wrote:
>
> PS
> Henning, du skal nok til at "lære" at bruge perl regular expressions
> (preg) istedet for regular expressions (ereg) da denne motor med stor
> sandsynlighed er på vej ud af PHP i version 6.0 (og deprecated i 5.3)

Ja det kunne da godt være.




Martin Larsen (08-09-2010)
Kommentar
Fra : Martin Larsen


Dato : 08-09-10 09:22

Martin wrote:

> Henning, du skal nok til at "lære" at bruge perl regular expressions
> (preg) istedet for regular expressions (ereg) da denne motor med stor
> sandsynlighed er på vej ud af PHP i version 6.0 (og deprecated i 5.3)

preg er i øvrigt også meget rarere at arbejde med

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste