RSS
 

Posts Tagged ‘php’

Ladda program från SVTPlay?

16 Mar

Dags för ett inlägg på svenska tycker jag. Ämnet blir (som titeln också säger) att ladda ner intressanta avsnitt från svtplay.se för att se dem utanför webbläsaren. Många avsnitt finns endast tillgängliga en begränsad tid, så då kan det vara trevligt att ha möjligheten att se dem lite senare… förutsatt att du kom ihåg att ladda ner förstås. :)

Förberedelser:
Du behöver en linux-burk som du kan installera rtmpdump på. I Ubuntu gör du det lättast med kommandot sudo apt-get install rtmpdump. Annars finns källkoden på http://rtmpdump.mplayerhq.hu/.

Ett nerladdat avsnitt, steg för steg:

  1. Hitta avsnittet på svtplay.se
  2. Visa källkoden (Ctrl+U i Chrome)
  3. Sök efter “dynamicStreams”
    dynamicStreams svtplay
  4. Markera från rtmp: till .mp4 (se bilden ovan) och kopiera URLen
  5. Öppna upp terminalen, skriv in följande:
    rtmpdump -r KlistraInURLenDuNyssKopierat -o NyttFilnamn
  6. Rulla tummarna ett tag. Varierar en hel del hur snabbt det går att få ner avsnittet, snittar själv från 1½ minut till runt 10 minuter.

Filerna som laddas ner är .mp4 med en resolution på 1280×720, dvs de är ca 500mb/30min.

Om du känner dig utmanad att göra det lättare för dig själv så kan du alltid knåpa ihop ett skript som gör det mesta åt dig per automatik. :)

Snäll som jag är så kan jag ge lite idéer på köpet, t.ex. lite PHP för att underlätta hela processen. ;)

function curl_download($Url){
  if (!function_exists('curl_init')){
    die('cURL is not installed!');
  }
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $Url);
  curl_setopt($ch, CURLOPT_REFERER, "http://svtplay.se/");
  curl_setopt($ch, CURLOPT_USERAGENT, 
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.25 (KHTML, like Gecko) "
    ."Chrome/12.0.705.0 Safari/534.25");
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_TIMEOUT, 10);
  $output = curl_exec($ch);
  curl_close($ch);
  return $output;
}

if(isset($_POST['url'])) {
  $url = $_POST['url'];
  $svtplay_src = curl_download($url);
  $stream_start = strpos($svtplay_src, "dynamicStreams=url:");
  $stream_end = strpos($svtplay_src, ".mp4,", $stream_start);
  $stream_url = substr($svtplay_src, $stream_start+19, $stream_end-$stream_start-15);	
  $name_pos = strrpos($stream_url, "/");
  $stream_name = substr($stream_url, $name_pos+1, strlen($stream_url)-$name_pos+1);
  $shellcmd = "rtmpdump -r ".$stream_url." -o streams/".$stream_name."";
  $time_start = microtime(true);
  system($shellcmd);
  $time_end = microtime(true);
  $exectime = $time_end - $time_start;
  echo "

Downloaded ".$stream_name." in ".round(($exectime/60),1)." minutes.

"; }

Förutsättningen för skriptet är att en form skickar med POST variabeln “url” som innehåller URLen till klippet på svtplay och att det finns en mapp som heter “streams”. $_POST kan döpas om till $_GET, så kan man ange ?url=http://svtplay.se/osv som en query i adressen. Observera att det hela är väldigt beroende på hastigheten av internetuppkopplingen och hur laggigt svtplay är när anropet görs. Sidan kan se ut som att den hängt sig, men den slutar ladda när rtmpdump blivit klar.

Kanske jag borde skriva ihop ett färdigt paket en vacker dag? Där har jag nåt att tänka på…

 
3 Comments

Posted in Tech