recordere.dk forum     Det danske community for hjemmets elektronik og indhold     Siden 2003
<b>Forside</b> Forside > Modtagelse og distribution > IP TV og WebTV
  Nye indlæg Nye indlæg  Seneste forum emner Seneste   Seneste forum emner (vindue) Vindue   De emner du deltager i Mine emner RSS Feed - DR NU som podcast
  FAQ FAQ  Søg i forum   Opret ny bruger Opret ny bruger  Log ind Log ind

DR NU som podcast

 Besvar Besvar Side  12>
Forfatter
Besked
Desperate Se dropdown menu
Bruger
Bruger


Oprettet: 20-April-2008
Sted: Denmark
Status: Offline
Point: 159
Funktioner Funktioner   Tak (0) Tak(0)   Citér Desperate Citér  BesvarSvar Direkte link til dette indlæg Emne: DR NU som podcast
    Sendt: 02-September-2013 kl. 00:42
Jeg har lavet et PHP script, som tager en programserie fra DR NU og leverer den som podcast. Det virker ikke med iTunes, da iTunes skal kende størrelsen på filen, hvilket ikke oplyses i data fra DR. Måske er der en kvik person som kan løse dette?

Scriptet virker som sagt ikke med iTunes, men det virker fint med Miro (www.getmiro.com). Jeg har dog ikke testet med andre klienter end Miro, så forvent ikke meget andet. Og hvis nogen kunne finde på at skrive, at det er for dårligt... så kom selv med en løsning i stedet.

Edit: Med tak fra Kim80 virker det nu perfekt i iTunes.

For at benytte det script som jeg har lavet, skal man have en server der kan håndterer PHP samt JSON. Derudover skal man lave en mappe med navn "videourls" som skal gøres skrivbar, da scriptet spare på antallet af kald til DR, ved kun at hente video-urlen en gang.

For at kalde podcast-feedet skal man henvise til den URL man nu engang har lavet (eks. www.domæne.dk/mappe/podcast.php). Til selve scriptet skal man bruge "programSerieSlug" som skal indsættes i forespørgslen. Vi man eks. abonnerer på Matador, skal man indsætte ?ps=matador i adressen, så den fulde adresse bliver http://www.domæne.dk/mappe/podcast.php?ps=matador
"programSerieSlug " kan findes på denne side:
http://www.dr.dk/nu/api/programseries

Jeg har desuden også lavet et script til at programmer, som står nedenunder podcast-scriptet.

Fordelen ved at benytte dette script til programmerne, også dem som DR selv podcaster er, at kvaliteten er noget højere. Desværre overser DR podcasting som et medie, som folk gerne vil have i ordentlig kvalitet.

podcast.php
<?php
error_reporting(-1);
echo '<?xml version="1.0" encoding="utf-8"?>';
echo "\r\n";

function cleanText($impText) {
$impText = strip_tags($impText);
$impText = htmlspecialchars($impText);
$impText = htmlspecialchars_decode($impText);
$impText = str_replace('&',"&amp;", $impText);
$impText = str_replace('.',". ", $impText);
$impText = str_replace('  '," ", $impText);
return $impText;
}

$erVist = "";

?>
<rss version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">
  <channel>
  
 <?php

function DR_NU_FILESIZE($url) {
  $remoteFile = $url;
  $ch = curl_init($remoteFile);
  curl_setopt($ch, CURLOPT_NOBODY, true);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_HEADER, true);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
  $data = curl_exec($ch);
  curl_close($ch);

  $contentLength = 'unknown';
  $status = 'unknown';
  if (preg_match('/^HTTP\/1\.[01] (\d\d\d)/', $data, $matches)) {
    $status = (int)$matches[1];
  }
  if (preg_match('/Content-Length: (\d+)/', $data, $matches)) {
    $contentLength = (int)$matches[1];
  }
return $contentLength;
}

$introXML = "";
$data = join('',file('http://www.dr.dk/nu/api/programseries/'.$_GET['ps'].'/videos'));
$data = json_decode($data);

while (list($a,$obj) = each($data)) {
$broadcastTime = $obj->{'formattedBroadcastTime'};

if (!$introXML) {
$podTitel = cleanText($obj->{'title'});
list($podTitel) = explode(" (",$podTitel);
list($podTitel) = explode(": ",$podTitel);
list($podTitel) = explode(" - ",$podTitel);
list($beskrivelse) = explode(". ", cleanText($obj->{'description'}));
echo "    <title>".$podTitel."</title>\r\n";
echo "    <itunes:category text=\"\">\r\n";
echo "    </itunes:category>\r\n";
echo "    <itunes:image href=\"http://www.dr.dk".$obj->{'webCmsImagePath'}."\">\r\n";
echo "    </itunes:image>\r\n";
echo "    <itunes:author>DR</itunes:author>\r\n";
echo "    <itunes:explicit>no</itunes:explicit>\r\n";
echo "    <itunes:subtitle>\r\n";
echo "    </itunes:subtitle>\r\n";
echo "    <itunes:summary>".$beskrivelse.".</itunes:summary>\r\n";
echo "    <link>http://www.dr.dk</link>\r\n";
echo "    <description>".$beskrivelse.".</description>\r\n";
echo "    <language>da</language>\r\n";
echo "    <copyright>DR</copyright>\r\n";
echo "    <lastBuildDate>\r\n";
echo "    </lastBuildDate>\r\n";
echo "    <ttl>\r\n";
echo "    </ttl>\r\n\r\n";
}

$timediff = time()-strtotime($obj->{'broadcastTime'});
if ($timediff < 5184000) {
$lokalFil = preg_replace("/[^A-Za-z0-9 ]/", '', $obj->{'videoManifestUrl'});
if (file_exists("videourls/".$lokalFil.".txt")) {
$mediaData = join('',file("videourls/".$lokalFil.".txt"));
list($mediaURL,$mediaSize) = explode("||",$mediaData);
} else {
$mediaURL = join('',file($obj->{'videoManifestUrl'}));
$mediaURL = str_replace('rtmp://vod.dr.dk/cms/mp4:', 'http://vodfiles.dr.dk/', $mediaURL);
$mediaSize = DR_NU_FILESIZE($mediaURL);
if ($mediaSize > 200) {
$fp = fopen("videourls/".$lokalFil.".txt", 'w');
fwrite($fp, $mediaURL."||".$mediaSize);
fclose($fp);
}
}
if ($mediaSize > 0 && @$erVist[$obj->{'title'}] != $obj->{'broadcastTime'}) {
list($besket, $beskto, $besktre) = explode(". ", cleanText($obj->{'description'}));
echo "    <item>\r\n";
echo "      <title>".cleanText($obj->{'title'})."</title>\r\n";
echo "      <description>".$besket.". ".$beskto.". ".$besktre.".</description>\r\n";
echo "      <link>".$mediaURL."</link>\r\n";
echo "      <itunes:author>DR</itunes:author>\r\n";
echo "      <itunes:duration>".$obj->{'duration'}."</itunes:duration>\r\n";
echo "      <itunes:summary>".$besket.". ".$beskto.".</itunes:summary>\r\n";
echo "      <itunes:subtitle>".$besket.".</itunes:subtitle>\r\n";
echo "      <itunes:explicit>no</itunes:explicit>\r\n";
echo "      <pubDate>".date("D, j M Y H:i:s O",strtotime($obj->{'broadcastTime'}))."</pubDate>\r\n";
echo "      <enclosure url=\"".$mediaURL."\" length=\"".$mediaSize."\" type=\"video/mp4\" />\r\n";
echo "      <guid isPermaLink=\"false\">DR".$obj->{'id'}."</guid>\r\n";
echo "    </item>\r\n\r\n";
$introXML++;
}
$erVist[$obj->{'title'}] = $obj->{'broadcastTime'};
}
if ($introXML == 5) {
break;
}
}

?>
  </channel>
</rss>

Hvis man vil gøre det lidt ekstra lækkert for sig selv, har jeg også lavet et script til at søge efter "programSerieSlug". Dette script forventer at ovenstående script hedder "podcast.php"

find-podcast.php
<?php
$soegeord = $_GET['q'];
if (!$soegeord) {
 $input = array("hest", "musik", "ding", "dr", "have", "natur", "liv", "matador", "film", "fugl", "fisk", "sommer", "vinter", "forår", "efterår", "zoo", "nyheder", "show", "live");
 $rand_keys = array_rand($input, 2);
 $soegeord = $input[$rand_keys[1]];
}
?>
<html>
<head>
<title>Find programserier</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body bgcolor="#FFFFFF">
<font face="Verdana,Arial" size="2">

<form action="find-podcast.php" method="GET">
Søgeord: <input type="text" name="q" value="<?php echo $soegeord; ?>"> <input type="submit" value="Søg">
</form>
<?php

$soegeord = urlencode($soegeord);
$soegeord = str_replace('+', '%20', $soegeord);
$data = join('',file('http://www.dr.dk/nu/api/search/'.$soegeord.''));
$data = json_decode($data);

while (list($a,$obj) = each($data)) {
echo "<b><a href=\"podcast.php?ps=".$obj->{'programSerieSlug'}."\">".$obj->{'title'}."</a> - (".$obj->{'programSerieSlug'}.")</b><br>\r\n";
echo "".$obj->{'description'}."</a><p>\r\n\r\n";
}

?>

</font>
</body>
</html>

Håber det kan bruges og folk må meget gerne poste ideer til, hvordan koden kan blive bedre (ikke mindst hvis det kan komme til at virke med iTunes)

Edit: Opdateret med ny kode til podcast.php
Den nye kode undlader at se på programmer der er ældre end 60 dage og koden virker nu med iTunes.


Redigeret af Desperate - 26-September-2013 kl. 20:18
Til top
kim80 Se dropdown menu
Ny bruger
Ny bruger


Oprettet: 04-September-2012
Status: Offline
Point: 16
Funktioner Funktioner   Tak (0) Tak(0)   Citér kim80 Citér  BesvarSvar Direkte link til dette indlæg Sendt: 02-September-2013 kl. 10:41
Jeg har tidligere lavet noget lignende.

For at få størrelsen på en af MP4 filerne, laver du en funktion som nedenstående.
Den kalder du blot med DR_NU_FILESIZE($mediaurl) og så returnerer den filstørrelsen i bytes. :)


function DR_NU_FILESIZE($url) {
  $remoteFile = $url;
  $ch = curl_init($remoteFile);
  curl_setopt($ch, CURLOPT_NOBODY, true);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_HEADER, true);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); //not necessary unless the file redirects (like the PHP example we're using here)
  $data = curl_exec($ch);
  curl_close($ch);
  if ($data === false) {
    echo 'cURL failed';
    exit;
  }

  $contentLength = 'unknown';
  $status = 'unknown';
  if (preg_match('/^HTTP\/1\.[01] (\d\d\d)/', $data, $matches)) {
    $status = (int)$matches[1];
  }
  if (preg_match('/Content-Length: (\d+)/', $data, $matches)) {
    $contentLength = (int)$matches[1];
  }
return $contentLength;
}

Til top
Desperate Se dropdown menu
Bruger
Bruger


Oprettet: 20-April-2008
Sted: Denmark
Status: Offline
Point: 159
Funktioner Funktioner   Tak (0) Tak(0)   Citér Desperate Citér  BesvarSvar Direkte link til dette indlæg Sendt: 26-September-2013 kl. 20:20
Med stor tak til Kim80 virker scriptet nu i iTunes. Jeg har desuden ændret scriptet sådan at samme titel og sendetidspunk ikke vil fremgå to gange samt at programmer der er blevet vist for mere end 60 dage siden, ville vil indgå i feedet.
Til top
Nagash Se dropdown menu
Guld medlem
Guld medlem


Oprettet: 24-Oktober-2007
Sted: Hillerød, DK
Status: Offline
Point: 6061
Funktioner Funktioner   Tak (0) Tak(0)   Citér Nagash Citér  BesvarSvar Direkte link til dette indlæg Sendt: 26-September-2013 kl. 21:30
Skal lige forstå det rigtigt. Kan du få alt på DR NU til at virke som podcast? For en lang række af deres programserier findes jo som podcasts i forvejen.
Til top
Desperate Se dropdown menu
Bruger
Bruger


Oprettet: 20-April-2008
Sted: Denmark
Status: Offline
Point: 159
Funktioner Funktioner   Tak (0) Tak(0)   Citér Desperate Citér  BesvarSvar Direkte link til dette indlæg Sendt: 26-September-2013 kl. 22:08
Ja, det er korrekt forstået. Du kan hente alt fra DR NU, også Broen II.

Det sker dog at DR NU har nogle tekniske problemer og så benytter de en ekstern partner. I de tilfælde kan man ikke hente det enkelte program som podcast.
Til top
Nagash Se dropdown menu
Guld medlem
Guld medlem


Oprettet: 24-Oktober-2007
Sted: Hillerød, DK
Status: Offline
Point: 6061
Funktioner Funktioner   Tak (0) Tak(0)   Citér Nagash Citér  BesvarSvar Direkte link til dette indlæg Sendt: 28-September-2013 kl. 21:15
Hvordan får jeg det til at virke? Jeg tror ikke helt jeg fatter hvordan jeg laver de, så iTunes henter en bestemt video.
Hvis jeg nu fx. vil se afsnittene fra serien Danmarks Skønneste Hjem, hvordan skal php'en så se ud?

Link til serien.
Til top
Desperate Se dropdown menu
Bruger
Bruger


Oprettet: 20-April-2008
Sted: Denmark
Status: Offline
Point: 159
Funktioner Funktioner   Tak (0) Tak(0)   Citér Desperate Citér  BesvarSvar Direkte link til dette indlæg Sendt: 29-September-2013 kl. 04:12
Oprindeligt skrevet af Nagash Nagash skrev:

Hvordan får jeg det til at virke? Jeg tror ikke helt jeg fatter hvordan jeg laver de, så iTunes henter en bestemt video.
Hvis jeg nu fx. vil se afsnittene fra serien Danmarks Skønneste Hjem, hvordan skal php'en så se ud?

Link til serien.
For udsendeler fra 2012, ser det umiddelbart ud til at del er delt ud på flere programserier. Men for 2013 sæsonen burde det være nemt.

Når du har sat scriptet op på din server, skulle du kunne kalde podcast.php?ps=danmarks-skoenneste-hjem fra iTunes og derefter vælge de afsnit som du gerne vil hente.

Hvis du oplever problemer vil jeg anbefale dig at teste URL'en i FireFox, den kan vise podcast-feedet og ved at vise kilden kan du se evt. fejlbeskeder fra serveren.
Til top
ThomasP Se dropdown menu
Super bruger
Super bruger


Oprettet: 26-Februar-2006
Sted: Denmark
Status: Offline
Point: 472
Funktioner Funktioner   Tak (0) Tak(0)   Citér ThomasP Citér  BesvarSvar Direkte link til dette indlæg Sendt: 29-September-2013 kl. 10:55
Jeg synes, at det lyder rigtig spændende, men jeg er ikke sikker på, at jeg har forstået det rigtigt.

Så vidt jeg kan se, understøtter min (billige) NAS ikke PHP eller JSON.

Er der nogen anden måde, jeg så kan downloade programmer fra DR.DK/NU? Altså direkte til en PC eller en Mac?


Redigeret af ThomasP - 29-September-2013 kl. 10:56
Til top
Nagash Se dropdown menu
Guld medlem
Guld medlem


Oprettet: 24-Oktober-2007
Sted: Hillerød, DK
Status: Offline
Point: 6061
Funktioner Funktioner   Tak (0) Tak(0)   Citér Nagash Citér  BesvarSvar Direkte link til dette indlæg Sendt: 29-September-2013 kl. 12:17
ThomasP - Jeg har hidtil brugt løsningen fra denne side drnu.tumblr.com
Det fungerer rigtig fint.
Til top
ThomasP Se dropdown menu
Super bruger
Super bruger


Oprettet: 26-Februar-2006
Sted: Denmark
Status: Offline
Point: 472
Funktioner Funktioner   Tak (0) Tak(0)   Citér ThomasP Citér  BesvarSvar Direkte link til dette indlæg Sendt: 29-September-2013 kl. 21:14
Oprindeligt skrevet af Nagash Nagash skrev:

ThomasP - Jeg har hidtil brugt løsningen fra denne side drnu.tumblr.com
Det fungerer rigtig fint.

Jeg har også installeret scriptet og har hentet flere udsendelser, men ved mange programmer (fx Broen II eller "Gift ved første blik") virker det ikke. Når jeg clicker "Start programskanning" i Firefox, kommer der ingen programmer frem. Det samme sker i Chrome. Derfor leder jeg efter en alternativ løsning.
Til top
Desperate Se dropdown menu
Bruger
Bruger


Oprettet: 20-April-2008
Sted: Denmark
Status: Offline
Point: 159
Funktioner Funktioner   Tak (0) Tak(0)   Citér Desperate Citér  BesvarSvar Direkte link til dette indlæg Sendt: 29-September-2013 kl. 22:19
Oprindeligt skrevet af ThomasP ThomasP skrev:

Oprindeligt skrevet af Nagash Nagash skrev:

ThomasP - Jeg har hidtil brugt løsningen fra denne side drnu.tumblr.com
Det fungerer rigtig fint.

Jeg har også installeret scriptet og har hentet flere udsendelser, men ved mange programmer (fx Broen II eller "Gift ved første blik") virker det ikke. Når jeg clicker "Start programskanning" i Firefox, kommer der ingen programmer frem. Det samme sker i Chrome. Derfor leder jeg efter en alternativ løsning.
Jeg benytter samme trick som drnu.tumblr.com, så hvis det ikke virker med det script, vil det højst tænkeligt heller ikke virke med mit. Der er dog en lille forskel, nemlig at jeg benytter DR's API.

Det er dog ikke alle programmer der er med i DR's API, da de ofte er begyndt at benytte en ekstern partner. Det gælder eksempelvis Broen II, som ikke er med. Der er også nogle afsnit af Gift ved første blik, som ikke er med i DR's API.
Til top
Desperate Se dropdown menu
Bruger
Bruger


Oprettet: 20-April-2008
Sted: Denmark
Status: Offline
Point: 159
Funktioner Funktioner   Tak (0) Tak(0)   Citér Desperate Citér  BesvarSvar Direkte link til dette indlæg Sendt: 29-September-2013 kl. 22:50
Hvis man har Mac og Safari, kan man benytte nedenstående script i et bogmærke.

Set-up:
1. Det kræver at man slår "Udvikler" til under Indstillinger > Avanceret.
2. Derefter skal man skifte til iPad under Udvikler > Brugeragent (dette skal gøres hver gang man har åbnet et nyt vindue - men den husker det så længe man browser rundt)
3. Lav et bogmærke med følgende adresse:
javascript: var videoURL = document.getElementById('player').getElementsByTagName('source')[0].src; var videoURL=videoURL.replace("http://om.gss.dr.dk/mediacache/_definst_/mp4:content","http://vodfiles.dr.dk"); var videoURL=videoURL.replace("http://hls0.11003-od0.dna.qbrick.com/11003-od0/_definst_/mp4:","http://vodfiles.dr.dk"); var videoURL=videoURL.replace("/playlist.m3u8",""); document.getElementById('player').innerHTML = '<center><a href="'+videoURL+'">'+videoURL+'</a>';

For at gemme en video skal man føre følgende
1. Skift brugeragent til iPad
2. Find den video du gerne vil hente
3. Klik på bogmærket
4. Højreklik på det link der erstatter videoen og vælg "Overfør arkiv, der henvises til".

Jeg har testet det på Broen II og Gift ved første blik, og det virker med de programmer.

Scriptet kræver ikke at man installerer noget specielt.

Edit: Jeg har tilrettet javascript koden, som det også kan ses senere i debatten.


Redigeret af Desperate - 30-September-2013 kl. 16:34
Til top
 
 Besvar Besvar Side  12>
 
Skift forum Forum-tilladelser Se dropdown menu