View Single Post
  #3  
Old 02-18-2012, 09:45 AM
Ed999 Ed999 is offline
Senior Member
 
Join Date: Feb 2009
Posts: 115
Ed999 is on a distinguished road
Default

Parse a BBC iPlayer MediaSelector XML file using Javascript


This is a Batch file which performs the same function as the .HTM file in my post of yesterday (above).

Code:
@ECHO OFF

::  *** MediaSelector ID  ***

::  Final 8 Characters
    SET ID=b01by95r

::  Source -
::  http://www.bbc.co.uk/radio/aod/availability/radio4extra.xml


::  *** Create a HTM file ***

ECHO ^<html^>   >> %temp%\temp.htm
ECHO ^<head^>   >> %temp%\temp.htm
ECHO.  >> %temp%\temp.htm
ECHO ^<title^>Parse XML File^</title^> >> %temp%\temp.htm
ECHO.   
ECHO ^<!-- Downloading from a BBC iPlayer page --^> >> %temp%\temp.htm
ECHO ^<!-- This parses the elements in a MediaSelector xml page --^>  >> %temp%\temp.htm
ECHO.   >> %temp%\temp.htm
ECHO ^<SCRIPT^>   >> %temp%\temp.htm
ECHO.  >> %temp%\temp.htm
ECHO // Target XML file's URL address [MediaSelector URL]  >> %temp%\temp.htm
ECHO var url = "http://www.bbc.co.uk/mediaselector/4/mtis/stream/%ID%" ;  >> %temp%\temp.htm
ECHO.   >> %temp%\temp.htm
ECHO var xmlDoc; >> %temp%\temp.htm
ECHO. >> %temp%\temp.htm
ECHO window.open('','_self');  >> %temp%\temp.htm
ECHO.  >> %temp%\temp.htm
ECHO function loadxml()  >> %temp%\temp.htm
ECHO { >> %temp%\temp.htm
ECHO    xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); >> %temp%\temp.htm
ECHO    xmlDoc.async = false;  >> %temp%\temp.htm
ECHO    xmlDoc.onreadystatechange = readXML;  >> %temp%\temp.htm
ECHO    xmlDoc.load(url);  >> %temp%\temp.htm
ECHO } >> %temp%\temp.htm
ECHO.  >> %temp%\temp.htm
ECHO function readXML() >> %temp%\temp.htm
ECHO { >> %temp%\temp.htm
ECHO    if(xmlDoc.readyState == 4) {    >> %temp%\temp.htm
ECHO    // This function is called on statechange >> %temp%\temp.htm
ECHO    // When the state reaches 4 this function reads the xml document  >> %temp%\temp.htm
ECHO.  >> %temp%\temp.htm
ECHO    // Create a Text File   >> %temp%\temp.htm
ECHO.  >> %temp%\temp.htm
ECHO    var fso = new ActiveXObject("Scripting.FileSystemObject");  >> %temp%\temp.htm
ECHO    var fh = fso.CreateTextFile("C:\\Users\\dg\\AppData\\Local\\Temp\\MediaSelector.bat", true);  >> %temp%\temp.htm
ECHO.   >> %temp%\temp.htm
ECHO    for(i=0; i^<xmlDoc.getElementsByTagName("media").length; i++) {   >> %temp%\temp.htm
ECHO.  >> %temp%\temp.htm
ECHO    bitrate  = xmlDoc.getElementsByTagName("media")[i].attributes.getNamedItem("bitrate").nodeValue  ;  >> %temp%\temp.htm
ECHO    encoding = xmlDoc.getElementsByTagName("media")[i].attributes.getNamedItem("encoding").nodeValue ;  >> %temp%\temp.htm
ECHO.  >> %temp%\temp.htm
ECHO       if ( bitrate==128 ^&^& encoding=="aac" ){   >> %temp%\temp.htm
ECHO.   >> %temp%\temp.htm
ECHO       fh.WriteLine( '@echo off' );    >> %temp%\temp.htm
ECHO       fh.WriteLine( ':: Media tag #' + [i] );                                                                       >> %temp%\temp.htm
ECHO       fh.WriteLine( '' );  >> %temp%\temp.htm
ECHO       fh.WriteLine( 'SET rtmpdump=C:\\Data\\General\\iPlayer\\- Recording iPlayer\\rtmpdump.exe' );  >> %temp%\temp.htm
ECHO       fh.WriteLine( '' );  >> %temp%\temp.htm
ECHO       fh.WriteLine( 'SET server=' +                                                                                 >> %temp%\temp.htm
ECHO          xmlDoc.getElementsByTagName("media")[i].firstChild.attributes.getNamedItem("server").nodeValue );          >> %temp%\temp.htm
ECHO       fh.WriteLine( '' );                                                                                           >> %temp%\temp.htm
ECHO       fh.WriteLine( 'SET application=' +                                                                            >> %temp%\temp.htm
ECHO          xmlDoc.getElementsByTagName("media")[i].firstChild.attributes.getNamedItem("application").nodeValue );     >> %temp%\temp.htm
ECHO       fh.WriteLine( '' );                                                                                           >> %temp%\temp.htm
ECHO       fh.WriteLine( 'SET identifier=' +                                                                             >> %temp%\temp.htm
ECHO          xmlDoc.getElementsByTagName("media")[i].firstChild.attributes.getNamedItem("identifier").nodeValue );      >> %temp%\temp.htm
ECHO       fh.WriteLine( '' );                                                                                           >> %temp%\temp.htm

ECHO       var str1=xmlDoc.getElementsByTagName("media")[i].firstChild.attributes.getNamedItem("authString").nodeValue ; >> %temp%\temp.htm
ECHO       fh.WriteLine( 'SET authString=' + str1.replace(/^&/g,"^&") );                                                 >> %temp%\temp.htm
ECHO              fh.WriteLine( '' );                                                                                    >> %temp%\temp.htm
ECHO       var str2=xmlDoc.getElementsByTagName("media")[i].firstChild.attributes.getNamedItem("identifier").nodeValue ; >> %temp%\temp.htm
ECHO       fh.WriteLine( '"%%rtmpdump%%" --protocol 0 --host "%%server%%" -a "%%application%%?%%authString%%" ' +        >> %temp%\temp.htm
ECHO                     '-y "%%identifier%%" -o ' + str2.slice(28,999) );                                               >> %temp%\temp.htm
ECHO.                                                                                                                    >> %temp%\temp.htm
ECHO       }                                                                                                             >> %temp%\temp.htm
ECHO    }                                                                                                                >> %temp%\temp.htm
ECHO.                                                                                                                    >> %temp%\temp.htm
ECHO    fh.Close();                                                                                                      >> %temp%\temp.htm
ECHO.                                                                                                                    >> %temp%\temp.htm
ECHO    }                                                                                                                >> %temp%\temp.htm
ECHO }                                                                                                                   >> %temp%\temp.htm
ECHO.                                                                                                                    >> %temp%\temp.htm
ECHO ^</SCRIPT^>                                                                                                         >> %temp%\temp.htm
ECHO.                                                                                                                    >> %temp%\temp.htm
ECHO ^</head^>                                                                                                           >> %temp%\temp.htm
ECHO ^<body onload="loadxml();window.close()"^> ^</body^>                                                                >> %temp%\temp.htm
ECHO ^</html^>                                                                                                           >> %temp%\temp.htm


::  *** Run HTM file in Internet Explorer ***
"C:\Program Files (x86)\Internet Explorer\IEXPLORE.EXE" %temp%\temp.htm

::  *** Run MediaSelector.bat ***
CALL %temp%\MediaSelector.bat
Reply With Quote