Autor | Zpráva | ||
---|---|---|---|
Chatík Profil |
Dobrý den,
prvně Vám sem hodím script který mám a pak popíši co dělá. Script: //priklad pouziti funkce echo getMp3StreamTitle("http://streaming204.radionomy.com/A-Better-Country-Legends-Classics-Station?group=0", 19200); //samotna funkce function getMp3StreamTitle($streamingUrl, $interval, $offset = 0, $headers = true) { $needle = 'StreamTitle='; $ua = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36'; $opts = array('http' => array( 'method' => 'GET', 'header' => 'Icy-MetaData: 1', 'user_agent' => $ua ) ); if (($headers = get_headers($streamingUrl))) foreach ($headers as $h){ $currentSection = explode(':', $h); if (strpos(strtolower($h), 'icy-metaint') !== false && ($interval = $currentSection[1])) break; } $context = stream_context_create($opts); if ($stream = fopen($streamingUrl, 'r', false, $context)) { $buffer = stream_get_contents($stream, $interval, $offset); fclose($stream); if (strpos($buffer, $needle) !== false) { $currentSectionTwo = explode($needle, $buffer); $title = $currentSectionTwo[1]; return substr($title, 1, strpos($title, ';') - 2); } else return getMp3StreamTitle($streamingUrl, $interval, $offset + $interval, false); } else throw new Exception("Unable to open stream [{$streamingUrl}]"); } Takže dělá to že otevře adresu streamu a zobrazí jaký hraje interpret a jaká hraje skladba. Funguje na jedničku. Co bych potřebova nyní já, potřeboval bych přidat pár dalších streamů. Adresa streamu je zde: echo getMp3StreamTitle("http://streaming204.radionomy.com/A-Better-Country-Legends-Classics-Station?group=0", 19200);
Potřeboval bych jestli extuje nějaká možnost přidat streamy aby to bylo například: echo getMp3StreamTitle("stream_id_1"); echo getMp3StreamTitle("stream_id_2"); echo getMp3StreamTitle("stream_id_3"); echo getMp3StreamTitle("stream_id_4"); echo getMp3StreamTitle("stream_id_5"); ....... Samozřejmě že místo stream_id_1, stream_id_2, stream_id_3 atd., by byli správné adresy streamů. Je nějaká možnost to takto udělat? Jde mi o to aby každý stream měl nějaké svoje id abych to mohl potom nějak vrátit ajaxem(sice ještě nevím jak ale to se třeba potom zeptám) Díky za každou radu ať pozitivní nebo negativní Ještě přidám index.php kde pak ajaxem vypisuji ten script <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <head> <title>Untitled</title> <script type="text/javascript" src="jwplayer.js"></script> </head> <body> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/ libs/jquery/1.3.0/jquery.min.js"></script> <script type="text/javascript"> var auto_refresh = setInterval( function () { $('#load_tweets').load('record_count.php').fadeIn("slow"); }, 15000); // refresh every 10000 milliseconds </script> <div id="myElement">Loading the player...</div> <script type="text/javascript"> jwplayer("myElement").setup({ playlist: [{ sources: [{ file: "http://streaming204.radionomy.com/A-Better-Country-Legends-Classics-Station?group=0", provider: "sound", type: "mp3" }], title: '<div>A Better Radio - Country Classics (USA) <marquee behavior=alternate><div id="load_tweets"></div> </div> ' },{ sources: [{ file: "http://7639.live.streamtheworld.com:80/977_COUNTRY_SC", provider: "sound", type: "mp3" }], title: '<div>Country radio<marquee behavior=alternate><div id="load_tweets"></div> </div>' }], autostart: "false", listbar: { position: "bottom", layout: "basic", size: 136 }, height: 164, width: 300 }); </script> </body> </html> Doufám že je tomu rozumět |
||
Chatík Profil |
#2 · Zasláno: 17. 1. 2015, 00:02:54
Takže jsem to vyřešil takto:
$data['fce1'] = getMp3StreamTitle('http://streaming204.radionomy.com/A-Better-Country-Legends-Classics-Station?group=0'); $data['fce2'] = getMp3StreamTitle('http://7639.live.streamtheworld.com:80/977_COUNTRY_SC'); echo json_encode($data); function getMp3StreamTitle($steam_url) { $result = false; $icy_metaint = -1; $needle = 'StreamTitle='; $ua = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36'; $opts = array( 'http' => array( 'method' => 'GET', 'header' => 'Icy-MetaData: 1', 'user_agent' => $ua ) ); $default = stream_context_set_default($opts); $stream = fopen($steam_url, 'r'); if($stream && ($meta_data = stream_get_meta_data($stream)) && isset($meta_data['wrapper_data'])){ foreach ($meta_data['wrapper_data'] as $header){ if (strpos(strtolower($header), 'icy-metaint') !== false){ $tmp = explode(":", $header); $icy_metaint = trim($tmp[1]); break; } } } if($icy_metaint != -1) { $buffer = stream_get_contents($stream, 300, $icy_metaint); if(strpos($buffer, $needle) !== false) { $title = explode($needle, $buffer); $title = trim($title[1]); $result = substr($title, 1, strpos($title, ';') - 2); } } if($stream) fclose($stream); return $result; } Tím pádem mohu připsat streamů kolik chci. Já vím že bych se měl ptát jinde, ale jak teď prosím vrátit ty data di ondex php? Vím že ajaxem ale vůbec nevím jak a ani nemám představu jak by měl script vypadat. |
||
Alphard Profil |
#3 · Zasláno: 17. 1. 2015, 00:17:03
„Vím že ajaxem ale vůbec nevím jak a ani nemám představu jak by měl script vypadat.“
Kde přesně je problém? Ajax už se tam používá, je tam metoda jQuery.load, takže to můžete udělat stejně/podobně. Script data vrací rovnou v json, takže na straně PHP snad ani nejsou třeba změny, možná jen přidat get parametr, který určí požadované streamy, aby to nebylo tak napevno. V javscriptu lze použít metodu $.get, která na rozdíl od load nevkládá data do html bloku, ale zpracovává je callbackem. |
||
Chatik Profil * |
#4 · Zasláno: 17. 1. 2015, 00:35:46 · Upravil/a: Chatik
Zkusil jsem toto,
<script type="text/javascript"> var auto_refresh = setInterval( function () { $.get('record_count.php', function(data) { $('#1').html(data.fce1); $('#2').html(data.fce2); }); }, 3000); // refresh every 10000 milliseconds </script> Nevratí to nic |
||
Alphard Profil |
#5 · Zasláno: 17. 1. 2015, 01:10:07
Měl jsem vám hned poradit metodu getJSON(), ale kouknout se dokumentace jste se mohl taky...
|
||
Chatík Profil |
#6 · Zasláno: 17. 1. 2015, 07:58:51
Takto by to mělo být správně:
<script type="text/javascript"> $(document).ready(function(){ setInterval(function(){ $.getJSON('record_count.php', function(data) { $('#1').html(data.fce1); $('#2').html(data.fce2); }); },3000); }); </script> Už mi to vypisuje v index.php |
||
Chatík Profil |
#7 · Zasláno: 17. 1. 2015, 19:22:03
Ještě bych se zeptal na jednu otázku.
Je možné následující nějak zjednodušit? Aby toho nebylo tolik řádků. Zatím jich je 18 ale bude jich asi +/- 34. Ten script nyní trvá dost dlouho než se funkce zpracuje. $data['fce1'] = getMp3StreamTitle('http://streaming204.radionomy.com/A-Better-Country-Legends-Classics-Station?group=0'); $data['fce2'] = getMp3StreamTitle('http://7639.live.streamtheworld.com:80/977_COUNTRY_SC'); $data['fce3'] = getMp3StreamTitle('http://mp3stream4.abradio.cz/country128.mp3'); $data['fce4'] = getMp3StreamTitle('http://mp3stream3.abradio.cz:8000/folk128.mp3'); $data['fce5'] = getMp3StreamTitle('http://mp3stream4.abradio.cz:8000/clickandcountry128.mp3'); $data['fce6'] = getMp3StreamTitle('http://relay1.181.fm:8134/;stream.nsv'); $data['fce7'] = getMp3StreamTitle('http://play.radiopetrov.com:8000/petrovFC'); $data['fce8'] = getMp3StreamTitle('http://streaming201.radionomy.com/a-better-country-station?group=0'); $data['fce9'] = getMp3StreamTitle('http://icy3.abacast.com/holstonvalley-wmevfmmp3-64'); $data['fce10'] = getMp3StreamTitle('http://out2.cmn.icy.abacast.com:80/wrbi-wrbifm-64'); $data['fce11'] = getMp3StreamTitle('http://crystalout.surfernetwork.com:8001/WBWI_MP3'); $data['fce12'] = getMp3StreamTitle('http://tier1.radiostreamlive.com:8012/radiocountrylive_mp3-high'); $data['fce13'] = getMp3StreamTitle('http://crystalin.surfernetwork.com:8000/KWWR_MP3'); $data['fce14'] = getMp3StreamTitle('http://crystalout.surfernetwork.com:8001/KSWG_MP3'); $data['fce15'] = getMp3StreamTitle('http://out2.cmn.icy.abacast.com:80/krwq-krwqfm-64'); $data['fce16'] = getMp3StreamTitle('http://streams.midutahradio.com/kmti.mp3'); $data['fce17'] = getMp3StreamTitle('http://kkbi.mccurtain.com:88/kkbi-med'); $data['fce18'] = getMp3StreamTitle('http://13.bteradio.com:9090/KGRT.mp3'); echo json_encode($data); |
||
Jan Tvrdík Profil |
Chatík:
„Je možné následující nějak zjednodušit?“ Používáš slovo zjednodušit ve významu zjednodušit nebo zrychlit? Pokud jde o zjednodušení (tj. v podstatě zkrácené kódu), tak můžeš to celé provést v cyklu. „Ten script nyní trvá dost dlouho než se funkce zpracuje.“ Můžeš to řešit paralelně, což by mělo celý proces radikálně zrychlit, nicméně počítej s tím, že pracovat v PHP paralelně se streamy je dost náročné a je k tomu mizerná dokumentace. Ale jde to =) |
||
Chatík Profil |
#9 · Zasláno: 17. 1. 2015, 20:39:10
Jan Tvrdík:
Ta druhá varianta se zdá velmi náročná, takže ji poštím k ledu. U té první varinaty si neumím představit jak to projit cyklem. |
||
Jan Tvrdík Profil |
#10 · Zasláno: 17. 1. 2015, 20:41:30
Chatík:
„U té první varinaty si neumím představit jak to projit cyklem.“ $streams = [ 'fce2' => 'http://7639.live.streamtheworld.com:80/977_COUNTRY_SC', 'fce3' => 'http://mp3stream4.abradio.cz/country128.mp3', ]; foreach ($streams as $name => $url) { $data[$name] = getMp3StreamTitle($url); } |
||
Chatík Profil |
Jan Tvrdík:
Děkuji. Ještě se zeptám, to budu muset pak upravit i ten JS který mi to vraci do index.php? Asi ano. Nebudu už vím jak. Ještě jednou díky |
||
Časová prodleva: 9 let
|
0