JSON рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Icecast2 рдХреЗ рд▓рд┐рдП рдЕрдм рдмрдЬрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрднрд╛рдЧ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░!
рдЖрдЬ рдореБрдЭреЗ рд░реЗрдбрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдкреГрд╖реНрда рдкрд░ рд╡рд░реНрддрдорд╛рди рдЯреНрд░реИрдХ рдФрд░ рдмреБрдирд┐рдпрд╛рджреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред
рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рд░реНрд╡реЛрддреНрддрдо рддрд░реАрдХреЗ рдХреА рдЦреЛрдЬ рдореЗрдВ, рдореИрдВрдиреЗ рдЦреМрдлрдирд╛рдХ PHP рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХреЛ рдареЛрдХрд░ рджреА, рдЬреЛ рдХрд┐ рдЖрдЗрд╕рдХрд╛рд╕реНрдЯ рд╕реНрдЯреЗрдЯрд╕ рдкреЗрдЬ рдХреЛ рдмреЗрд╡рдХреВрдлрд╝ рдмрдирд╛ рджреЗрддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрдВрдЯрд░рдиреЗрдЯ рд░реЗрдбрд┐рдпреЛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдордВрдЪ рдореЗрдВ, рдореИрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рджрд┐рд▓рдЪрд╕реНрдк рд╕рд╡рд╛рд▓ рдкрд░ рдЖрдпрд╛ - "рдЖрдк рдореЗрд░реА рд╕рд╛рдВрд╕ рдХреНрдпреЛрдВ рдЦреАрдВрдЪ рд░рд╣реЗ рд╣реИрдВ?"ред рд╕рдЪ рдореЗрдВ, рдХреНрдпреЛрдВ?
рдФрд░ рдореИрдВрдиреЗ JSON рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕реНрдЯреЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдЕрдкрдиреЗ рд╕рднреА рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред

рддреЛ, рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП: рд╕рд░реНрд╡рд░ рдЦреБрдж, рдЖрдЗрд╕рдХрд╛рд╕реНрдЯ рдХреЗ рд▓рд┐рдП XSLT рдлрд╝рд╛рдЗрд▓, рдбреЗрдЯрд╛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП JS рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдПрдХ PHP рдлрд╝рд╛рдЗрд▓ (рдореИрдВ рдЖрдкрдХреЛ рдмрд╛рдж рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛)ред

рдПрдХ рдХрджрдо: рдЖрдЗрд╕рдХрд╛рд╕реНрдЯ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░реЗрдВ

Icecast2 рд╕рд░реНрд╡рд░ рдЖрдкрдХреЛ рд╕реНрдЯреЗрд╢рди рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо XSL рдлрд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╡реИрд╕реЗ, рдЗрд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдореВрд▓ рдкреГрд╖реНрда рднреА рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкрддрд╛ рдХрд░реЗрдВ рдХрд┐ icecast рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдХрд╣рд╛рдВ рд╣реИред рдпрд╣ рдкрде рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ / usr / рд╢реЗрдпрд░ / icecast2 рд╣реИ)ред
рд╣рдо / usr / share / icecast2 / www рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣рд╛рдВ info.xsl рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ - рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЬреЛ рдорд╛рдЙрдВрдЯ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░реЗрдЧреАред
рдкрд░реАрдХреНрд╖рдг рдФрд░ рддреНрд░реБрдЯрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдПрдХ XSLT рдлрд╝рд╛рдЗрд▓ рд╕рдВрдХрд▓рд┐рдд рдХреА, рдЬреЛ рдорд╛рдЙрдВрдЯ рдкреЙрдЗрдВрдЯреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдорд╛рдиреНрдп JSON рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕реЗ рдирд╛рдорд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдЕрджреНрдпрддрди: Habrahabr рдкрд╛рд░реНрд╕рд░ рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рдЧрдбрд╝рдмрдбрд╝ рдХрд░ рджрд┐рдпрд╛ред рдпрд╣ рддрдп рд▓рдЧ рд░рд╣рд╛ рд╣реИред
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" > <xsl:output omit-xml-declaration="yes" method="text" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="no" encoding="UTF-8" /><xsl:strip-space elements="*"/> <xsl:template match = "/icestats" > {<xsl:for-each select="source"> "<xsl:value-of select="@mount" />": { <!--      --> "name" : "<xsl:value-of select="server_name"/>", "listeners" : "<xsl:value-of select="listeners" />", "description" : "<xsl:value-of select="server_description" />", "title" : "<xsl:value-of select="title" />", "genre" : "<xsl:value-of select="genre" />", "url" : "<xsl:value-of select="server_url" />" }<xsl:if test="position() != last()"><xsl:text>,</xsl:text></xsl:if> <!-- ,   ,   -   --> </xsl:for-each> } </xsl:template> </xsl:stylesheet> 


рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рд░реНрд╡рд░ рдХреЛ рдЗрд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВ: example.com:8000/info.xsl

рдЬрд╡рд╛рдм рдореЗрдВ, рд╣рдо рд╕рднреА рдореМрдЬреВрджрд╛ рдорд╛рдЙрдВрдЯ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрд░рдЪрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
 { "/ns": { "name" : "Nyan-nyan :3", "listeners" : "3", "description" : "This is sparta~", "title" : "Freaking On Shpongle - Dorset Perception Remix", "genre" : "Kircore", "url" : "http://*********.com" } } 


рдЪрд░рдг 2: рдкреНрд░реЙрдХреНрд╕реА рд╕реЗрдЯ рдХрд░рдирд╛

рд╣рдордиреЗ рдЬрд╛рдирдХрд╛рд░реА рдЙрддреНрдкрдиреНрди рдХреА, рд▓реЗрдХрд┐рди рдкрд░реЗрд╢рд╛рдиреА рдпрд╣ рд╣реИ: рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рдХрд┐рд╕реА рдЕрдиреНрдп рдбреЛрдореЗрди рдпрд╛ рдкреЛрд░реНрдЯ рддрдХ рднреА рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗред рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛, рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдПрдбрд╛рдкреНрдЯрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ:
 <?php $s = file_get_contents("http://example.com:8000/info.xsl"); echo($s); ?> 


рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ PHP рдХреЗрд╡рд▓ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ, рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ, рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ, рдирд┐рдпрдорд┐рдд рдЕрдВрддрд░рд╛рд▓ рдкрд░ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдиреЗ рдФрд░ рдлрд┐рд░ рдмрд╕ рдЬрд╛рдирдХрд╛рд░реА рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ "get.php" рдкрд░ рдХреЙрд▓ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕реНрдерд╛рди рдкрд░ рд╕рд░реНрд╡рд░ рдкрд░ рд░рдЦреЗрдВред

рдЪрд░рдг 3: рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ

рдЗрд╕рд▓рд┐рдП, рдЕрдм рд╣рдо рдЬрд╛рдирдХрд╛рд░реА рдЙрддреНрдкрдиреНрди рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдорд╛рдорд▓рд╛ рдЫреЛрдЯрд╛ рд╣реИ - рдЗрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред
рдпрд╣рд╛рдБ рдореИрдВ рдЦреБрдж рдХреЛ рдЙрд╕ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде рдХреЛрдб рддрдХ рд╕реАрдорд┐рдд рдХрд░реВрдВрдЧрд╛:
 //    ,    DOM.  -  ! function set (id, dat) { var d = document.getElementById(id); d.innerHTML = dat; } function getXmlHttp() //   XMLHttpRequest,      { var xmlhttp; try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { xmlhttp = false; } } if (!xmlhttp && typeof XMLHttpRequest!='undefined') { xmlhttp = new XMLHttpRequest(); } return xmlhttp; } function req () //   { var xmlhttp = getXmlHttp() xmlhttp.open("GET", "get.php", true); //        xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4) { if(xmlhttp.status == 200) processResult(xmlhttp.responseText); //    } }; xmlhttp.send(null); } function processResult (res) //    { var csRes = eval("(" + res + ")"); // -,    jQuery,     . ,       ,     . var a = []; //  ,    //       -   (/stream)  ,  ,    (/ns). if (csRes["/stream"] != null) //   ? { a = csRes["/stream"]; //  ,      set("sName", " "); //  ""    } else //      - { a = csRes["/ns"]; set("sName", "Non-Stop ( )"); //  ""   } set("trackholder", a["title"]); //    //      (, - ,    ..) set("sGenre", a["genre"]); set("sListeners", a["listeners"]); set("sDescr", a["description"]); setTimeout("req()", 15000); //    ,  15      //   setInterval  setTimeout,    icecast     . } req(); //   


рдЪрд░рдг 4: рдкреГрд╖реНрда рд╕реЗрдЯрдЕрдк

рд╕рдм рдХреБрдЫ рдЙрддрдирд╛ рд╣реА рд╕рд░рд▓ рд╣реИред рд╣рдо рдкреГрд╖реНрда рдмрдирд╛рддреЗ рд╣реИрдВ, рдКрдкрд░ рджрд┐рдП рдЧрдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде div рддрддреНрд╡реЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрди рддрддреНрд╡реЛрдВ рдХреЗ рдмрд╛рдж рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рд▓рд┐рдВрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ:
 ... <div id="sDescr"> </div> <script type="text/javascript" src="./track.js"></script> 


рдкрд░рд┐рдгрд╛рдо

рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдо рднрд░рд╛ рд╣реБрдЖ рд╕рд░реНрд╡рд░ рд╣реИ, рдЖрдЙрдЯрдкреБрдЯ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдзрд┐рдХ рдкреЛрд░реНрдЯреЗрдмрд▓ рдкреНрд░рд╛рд░реВрдк (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рд╕реНрдЯреЗрд╢рди рдХреЛ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦреЗ рдЧрдП рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди)ред рдЖрдЗрд╕рдХрд╛рд╕реНрдЯ рдХреЗ рд▓рд┐рдП XSLT рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рдЬрд╛рдирдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЗрд╕ рдЕрджреНрднреБрдд рдУрдкрди рдореАрдбрд┐рдпрд╛ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдХрдИ рдФрд░ рдЕрдзрд┐рдХ рд░реЛрдЪрдХ рдмрд╛рддреЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдВрдд рдореЗрдВ, рдореБрдЭреЗ рд╡рд░реНрддрдорд╛рди рдЯреНрд░реИрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреЗрдЬ рдорд┐рд▓рд╛:


рдЬрдм рдЖрдк рдХрд┐рд╕реА рдЯреНрд░реИрдХ рдХреЗ рд╕рд╛рде рдПрдХ рд▓рд╛рдЗрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕реНрдЯреЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЦреБрдж рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:


рдпрд╣ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдкреГрд╖реНрда рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдмрд┐рдирд╛ рдЕрдкрдбреЗрдЯ рдХреА рдЬрд╛рддреА рд╣реИред

Source: https://habr.com/ru/post/In145694/


All Articles