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