Avatar billede xpresand Nybegynder
30. maj 2011 - 11:30 Der er 16 kommentarer og
1 løsning

simple xml parser

Hej

Jeg har fået at vide at man skal bruge simple xml parser til brug af et API.
Jeg vil gerne prøve at arbejde med DRs api fra http://dr.dk/nu/api/ men jeg ved ikke hvordan at man bruger xml parser.

Så derfor ville jeg gerne høre om der er nogle der kunne komme med et eksempel?
Avatar billede repox Seniormester
30. maj 2011 - 11:51 #1
Prøv at kigge på denne artikel jeg selv har skrevet: http://err0r.dk/articles/read/simplexml-og-dine-xml-data

Og så vend tilbage med spørgsmål, hvis der er noget du ikke forstår.
Avatar billede xpresand Nybegynder
30. maj 2011 - 12:55 #2
Nu har jeg ingen xml adresse til DRs API men det burde vel ikke gøre noget?
Har blot skrevet http://www.dr.dk/nu/api/programseries i adressefeltet i dit første eksempel på din side. Men allerede der får jeg fejl, som du kan se her:

http://drvideo.dk/smarttv.php
Avatar billede repox Seniormester
30. maj 2011 - 13:04 #3
Det du henviser til er heller ikke et XML feed - der står i dokumentationen at som udgangspunkt får du serveret et JSON feed. For at få XML'en skal du altså huske at skrive .xml efter den URL som du gerne vil have fra API'et. Altså: http://www.dr.dk/nu/api/programseries.xml
Avatar billede xpresand Nybegynder
30. maj 2011 - 13:48 #4
ahh.. okay :) Så forstår jeg bedre.

Jeg har skrevet min kode således nu:
    $xmlContent = file_get_contents("http://www.dr.dk/nu/api/programseries.xml");
    $xmlObject = new SimpleXMLElement( $xmlContent );

    echo "Dato: ".$xmlObject->Slug; //Vis datoen
    echo "Ordrenummer: ".$xmlObject->Title; // Vis ordrenummeret

Dog kommer der intet andet end, dato og ordrenummer, og det burde der vel egentlig.
Avatar billede repox Seniormester
30. maj 2011 - 13:57 #5
Nej, for dataene eksisterer ikke sådan.
Slug og Title er childs af ProgramSerie som igen er et child af det rod elementet.

Det betyder du bliver nød til at iterere ned over ProgramSerie elementerne (eller aktivt vælge det første ProgramSerie element.

F.eks:
<?php
    $xmlContent = file_get_contents("http://www.dr.dk/nu/api/programseries.xml");
    $xmlObject = new SimpleXMLElement( $xmlContent );

    echo "Slug: ".$xmlObject->ProgramSerie[0]->Slug;
    echo "Title: ".$xmlObject->ProgramSerie[0]->Title;
?>
Avatar billede xpresand Nybegynder
30. maj 2011 - 15:14 #6
Super det hjalp. Ved du hvordan jeg så får den til at hente alle programmerne og ikke kun den første.. Har prøvet at fjerne [0] men det gør ingen forskel.
Avatar billede olsensweb.dk Ekspert
30. maj 2011 - 16:06 #7
 <?php
    $xmlContent = file_get_contents("http://www.dr.dk/nu/api/programseries.xml");
    $xmlObject = new SimpleXMLElement( $xmlContent );
    $lng = count($xmlObject->ProgramSerie);
    for($i=0; $i<$lng; $i++){   
        echo "Slug: ".$xmlObject->ProgramSerie[$i]->Slug;
        echo "Title: ".$xmlObject->ProgramSerie[$i]->Title;         
    }

?>
Avatar billede xpresand Nybegynder
30. maj 2011 - 16:58 #8
Mange tak, det hjalp!
Er dog stødt på endnu et problem. For at kunne hente videoerne til det enkelte program gøres det via dette link:
http://www.dr.dk/nu/api/programseries/bag-facaden/videos

Dog fungere det ikke som et xml. Hvad gør jeg så?
Avatar billede olsensweb.dk Ekspert
30. maj 2011 - 17:51 #9
du json decoder filen
<?php
// http://php.net/manual/en/function.json-decode.php
$JsonContent = json_decode(file_get_contents("http://www.dr.dk/nu/api/programseries/bag-facaden/videos"), true);
$lng = count($JsonContent);
for($i=0; $i<$lng; $i++){
    echo $JsonContent[$i]["title"]; echo "<br />";
}
// var_dump(json_decode($JsonContent, true));
?>
Avatar billede xpresand Nybegynder
30. maj 2011 - 18:09 #10
Det virkede! Lige et sidste spørgsmål (har haft mange!)

Hvordan får man selve url-adrsssen til videoen ud fra dette?
http://www.dr.dk/nu/api/videos/1

Video linket burde ca se ud som dette:
http://vodfiles.dr.dk/CMS/Resources/dr.dk/Ramasjang/Video/2010/02/6503ec92-7f46-46f2-9d31-e9edbbef79f2/bardaItre_6b4a2d1bab1942fa879a3ec3b3125d54-0-0.mp4?ID=676628
Avatar billede olsensweb.dk Ekspert
31. maj 2011 - 10:53 #11
>Hvordan får man selve url-adrsssen til videoen ud fra dette?
jeg kan ikke umildbart finde nogle referancer i filen.
"id": 6362,: er bare deres interne referance, og man kan finde denne post med "Get a video by its id"
qid=2019018: bruges til deres interne medie player, og virker tilsyneladende kun på egen side, da men der har adgang  til fil referancen, via nogle interne opslag.

jeg tror ikke meningen med API'er er at man skal have adgang til at kun se / downloade filer, uden for DR's domæne
Avatar billede repox Seniormester
31. maj 2011 - 12:08 #12
Du kan stadig bare skrive .xml efter de adresser du finder for at se XML - det står i API dokumentationen.

http://www.dr.dk/nu/api/videos/1.xml
Avatar billede olsensweb.dk Ekspert
31. maj 2011 - 12:34 #13
hov !!!
hvis man i
"videoManifestUrl": "http://www.dr.dk/Forms/Published/PlaylistGen.aspx?qid=2019018&OnlyWritePath=True",
fjerner alt efter & så virker linken :)
http://www.dr.dk/Forms/Published/PlaylistGen.aspx?qid=2019018
 <?php
// http://php.net/manual/en/function.json-decode.php
$JsonContent = json_decode(file_get_contents("http://www.dr.dk/nu/api/programseries/bag-facaden/videos"), true);
$lng = count($JsonContent);
for($i=0; $i<$lng; $i++){
    $videoManifestUrl = $JsonContent[$i]["videoManifestUrl"];
    $title = $JsonContent[$i]["title"];   
    $pos = strpos($videoManifestUrl, "&");
    $videoManifestUrlCut = substr($videoManifestUrl, 0, $pos);       
    echo "\n";
    echo '<a href="'.$videoManifestUrlCut.'" title="'.$title.'">'.$title.'</a>';   
    echo "<br />";
}
?>


demo     http://olsensweb.dk/test/experten/spm/939991/
source     http://olsensweb.dk/test/experten/spm/939991/?source
Avatar billede xpresand Nybegynder
31. maj 2011 - 13:08 #14
Ronols, det er ikke selve flash videoen at jeg skal bruge. Jeg skal have mp4 filen, hvilket man kan få ud fra deres API se evt. http://sait.dk/dr/programseries.php

og her fra det link der er i filen du snakker om
http://www.dr.dk/Forms/Published/PlaylistGen.aspx?qid=1433977&OnlyWritePath=True
der kan du se adressen til en mp4 fil det eneste problem er at det er en rtpm
Avatar billede olsensweb.dk Ekspert
31. maj 2011 - 14:13 #15
prøv denne :)
 <?php
$JsonContent = json_decode(file_get_contents("http://www.dr.dk/nu/api/programseries/bag-facaden/videos"), true);
$lng = count($JsonContent);
for($i=0; $i<$lng; $i++){   
    $title = $JsonContent[$i]["title"];   
    echo "\n";
    $SubJsonContent = json_decode(file_get_contents($JsonContent[$i]["videoResourceUrl"]), true);
    $SubUrL = $SubJsonContent["links"][0]["uri"]; // der er 3 kvaliteter 0, 1, 2
    $pos = strpos($SubUrL, "CMS/Resources/");   
    $LinkCut = substr($SubUrL, $pos);
    echo '<a href="http://vodfiles.dr.dk/'.$LinkCut.'" title="'.$title.'">'.$title.'</a>';   
    echo "<br />";
}
?>


demo og source fra #13 er opdateret
Avatar billede xpresand Nybegynder
31. maj 2011 - 16:15 #16
Ja, sådan nu virker det. Hvis i begge ligger et svar, så skal i få jeres point :)
Avatar billede olsensweb.dk Ekspert
31. maj 2011 - 16:51 #17
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester