php - Combining json output from multiple foreach loop -
i have php script returns video streams output. output contains multiple unique streams.
i trying encode output json because of multiple foreach loop not giving proper output
code :
<?php if (isset($_get["id"])) $id = $_get["id"]; $temp = explode("=",$id); $link=end($temp); parse_str(file_get_contents('http://www.youtube.com/get_video_info?video_id='.$link), $video_data); $streams = $video_data['url_encoded_fmt_stream_map']; $streams = explode(',',$streams); $arr = array(); foreach ($streams $streamdata) { parse_str($streamdata,$streamdata); foreach ($streamdata $key => $value) { $myobj->$key = $value; } $arr = $myobj; } echo json_encode(array("streams"=>$arr)); ?>
above code return last stream/item output.
output :
{ "streams":{ "quality":"small", "type":"video\/3gpp; codecs=\"mp4v.20.3, mp4a.40.2\"", "itag":"17", "url":"video_link" } }
if put echo json_encode(array("streams"=>$arr));
inside upper foreach loop. return streams multiple root nodes, , not acceptable. need 1 root node contains steams.
output :
{ "streams":{ "type":"video\/mp4; codecs=\"avc1.64001f, mp4a.40.2\"", "itag":"22", "url":"video_link", "quality":"hd720" } }{ "streams":{ "type":"video\/webm; codecs=\"vp8.0, vorbis\"", "itag":"43", "url":"video_link", "quality":"medium" } }{ "streams":{ "type":"video\/mp4; codecs=\"avc1.42001e, mp4a.40.2\"", "itag":"18", "url":"video_link", "quality":"medium" } }{ "streams":{ "type":"video\/3gpp; codecs=\"mp4v.20.3, mp4a.40.2\"", "itag":"36", "url":"video_link", "quality":"small" } }{ "streams":{ "type":"video\/3gpp; codecs=\"mp4v.20.3, mp4a.40.2\"", "itag":"17", "url":"video_link", "quality":"small" } }
desired output :
{ "streams":[ { "quality":"hd720", "itag":"44", "url":"video_link", "type":"video\/3gpp; codecs=\"mp4v.20.3, mp4a.40.2\"" }, { "quality":"medium", "itag":"", "url":"video_link", "type":"video\/3gpp; codecs=\"mp4v.20.3, mp4a.40.2\"" }, { "quality":"medium", "itag":"17", "url":"video_link", "type":"video\/3gpp; codecs=\"mp4v.20.3, mp4a.40.2\"" }, { "quality":"medium", "itag":"17", "url":"video_link", "type":"video\/3gpp; codecs=\"mp4v.20.3, mp4a.40.2\"" }, { "quality":"small", "itag":"17", "url":"video_link", "type":"video\/3gpp; codecs=\"mp4v.20.3, mp4a.40.2\"" }, { "quality":"small", "itag":"17", "url":"video_link", "type":"video\/3gpp; codecs=\"mp4v.20.3, mp4a.40.2\"" } ] }
is there way combing multiple root nodes or json output streams.
note :
- outer foreach loop iterates 5 times in script lifetime
- inner foreach loop iterates 4 times per each outer foreach loop in script lifetime
please me new php. tia !!!
tested , got output.
<?php if (isset($_get["id"])) $id = $_get["id"]; $temp = explode("=",$id); $link=end($temp); parse_str(file_get_contents('http://www.youtube.com/get_video_info?video_id='.$link), $video_data); $streams = $video_data['url_encoded_fmt_stream_map']; $streams = explode(',',$streams); $arr = array(); foreach ($streams $streamdata) { parse_str($streamdata,$streamdata); $myobj = new stdclass(); foreach ($streamdata $key => $value) { $myobj->$key = $value; } array_push($arr, $myobj); } print_r (json_encode(array("streams"=>$arr))); ?>
output:
{ "streams": [{ "itag": "22", "url": "https:\/\/r5---sn-q4fl6nlz.googlevideo.com\/videoplayback?expire=1503278582&mm=31&mv=m&pl=14&mt=1503256900&ms=au&ei=lugzwy6ycc-i-wok15ggaq&signature=703194a7aaf91601c8b1a3d674cdee89d9b7f7d4.489762a45fa4a3a72d00974427199fcff1538cf9&source=youtube&beids=%5b9466594%5d&mn=sn-q4fl6nlz&requiressl=yes&mime=video%2fmp4&ipbits=0&initcwndbps=997500&pcm2=yes&lmt=1502949906234234&dur=250.938&itag=22&ip=172.251.185.232&sparams=dur%2cei%2cid%2cinitcwndbps%2cip%2cipbits%2citag%2clmt%2cmime%2cmm%2cmn%2cms%2cmv%2cpcm2%2cpl%2cratebypass%2crequiressl%2csource%2cexpire&ratebypass=yes&id=o-aio4capppe9wpzwlmohlf16f8ylqoykrkwh0steoswbh&key=yt6", "type": "video\/mp4; codecs=\"avc1.64001f, mp4a.40.2\"", "quality": "hd720" }, { "itag": "43", "url": "https:\/\/r5---sn-q4fl6nlz.googlevideo.com\/videoplayback?expire=1503278582&mm=31&mv=m&pl=14&mt=1503256900&ms=au&ei=lugzwy6ycc-i-wok15ggaq&signature=4333d8109a90b3dc6844c6a6930a8558eccc2a05.b736a90e09e2a47a4b3e1630cdd260099a15e17c&source=youtube&beids=%5b9466594%5d&mn=sn-q4fl6nlz&requiressl=yes&clen=25853304&ipbits=0&initcwndbps=997500&pcm2=yes&lmt=1502953964372465&dur=0.000&itag=43&mime=video%2fwebm&ip=172.251.185.232&sparams=clen%2cdur%2cei%2cgir%2cid%2cinitcwndbps%2cip%2cipbits%2citag%2clmt%2cmime%2cmm%2cmn%2cms%2cmv%2cpcm2%2cpl%2cratebypass%2crequiressl%2csource%2cexpire&ratebypass=yes&id=o-aio4capppe9wpzwlmohlf16f8ylqoykrkwh0steoswbh&gir=yes&key=yt6", "type": "video\/webm; codecs=\"vp8.0, vorbis\"", "quality": "medium" }, { "itag": "18", "url": "https:\/\/r5---sn-q4fl6nlz.googlevideo.com\/videoplayback?expire=1503278582&mm=31&mv=m&pl=14&mt=1503256900&ms=au&ei=lugzwy6ycc-i-wok15ggaq&signature=2f70c59bd7f8f63dcefa2935882935245a04c40b.e3d4da76837e3dc74b795b17982796c11bcebf53&source=youtube&beids=%5b9466594%5d&mn=sn-q4fl6nlz&requiressl=yes&clen=18940088&ipbits=0&initcwndbps=997500&pcm2=yes&lmt=1502949691460473&dur=250.938&itag=18&mime=video%2fmp4&ip=172.251.185.232&sparams=clen%2cdur%2cei%2cgir%2cid%2cinitcwndbps%2cip%2cipbits%2citag%2clmt%2cmime%2cmm%2cmn%2cms%2cmv%2cpcm2%2cpl%2cratebypass%2crequiressl%2csource%2cexpire&ratebypass=yes&id=o-aio4capppe9wpzwlmohlf16f8ylqoykrkwh0steoswbh&gir=yes&key=yt6", "type": "video\/mp4; codecs=\"avc1.42001e, mp4a.40.2\"", "quality": "medium" }, { "itag": "36", "url": "https:\/\/r5---sn-q4fl6nlz.googlevideo.com\/videoplayback?expire=1503278582&mm=31&mv=m&pl=14&mt=1503256900&ms=au&ei=lugzwy6ycc-i-wok15ggaq&signature=914720619c03249f8a94b02ca36f95d2cd8a50e7.8c06516cefd9667beea2950f63fedbf701e85d69&source=youtube&beids=%5b9466594%5d&mn=sn-q4fl6nlz&requiressl=yes&clen=6819898&ipbits=0&initcwndbps=997500&pcm2=yes&lmt=1502949683841137&dur=250.961&itag=36&mime=video%2f3gpp&ip=172.251.185.232&sparams=clen%2cdur%2cei%2cgir%2cid%2cinitcwndbps%2cip%2cipbits%2citag%2clmt%2cmime%2cmm%2cmn%2cms%2cmv%2cpcm2%2cpl%2crequiressl%2csource%2cexpire&id=o-aio4capppe9wpzwlmohlf16f8ylqoykrkwh0steoswbh&gir=yes&key=yt6", "type": "video\/3gpp; codecs=\"mp4v.20.3, mp4a.40.2\"", "quality": "small" }, { "itag": "17", "url": "https:\/\/r5---sn-q4fl6nlz.googlevideo.com\/videoplayback?expire=1503278582&mm=31&mv=m&pl=14&mt=1503256900&ms=au&ei=lugzwy6ycc-i-wok15ggaq&signature=a2741e73f8ff9500d84a3a2e69f84536f7168b38.bb6575a1c38784d6841f2d8788fdee38d4f0da2b&source=youtube&beids=%5b9466594%5d&mn=sn-q4fl6nlz&requiressl=yes&clen=2446985&ipbits=0&initcwndbps=997500&pcm2=yes&lmt=1502949684640176&dur=250.961&itag=17&mime=video%2f3gpp&ip=172.251.185.232&sparams=clen%2cdur%2cei%2cgir%2cid%2cinitcwndbps%2cip%2cipbits%2citag%2clmt%2cmime%2cmm%2cmn%2cms%2cmv%2cpcm2%2cpl%2crequiressl%2csource%2cexpire&id=o-aio4capppe9wpzwlmohlf16f8ylqoykrkwh0steoswbh&gir=yes&key=yt6", "type": "video\/3gpp; codecs=\"mp4v.20.3, mp4a.40.2\"", "quality": "small" }] }
Comments
Post a Comment