{"id":2947,"date":"2019-01-03T15:25:21","date_gmt":"2019-01-03T15:25:21","guid":{"rendered":"http:\/\/blog.designed79.co.uk\/?p=2947"},"modified":"2019-01-03T15:25:21","modified_gmt":"2019-01-03T15:25:21","slug":"php-to-get-custom-playlist-from-xtream-codes-api","status":"publish","type":"post","link":"https:\/\/blog.designed79.co.uk\/?p=2947","title":{"rendered":"PHP TO GET CUSTOM PLAYLIST FROM XTREAM-CODES API"},"content":{"rendered":"<p>Use the code below as simple reference to build your own custom playlist from your xtream-codes server.<\/p>\n<p>Change the $url and $port values with your main server domain and port values.<\/p>\n<div class=\"codecolorer-container php default\" style=\"overflow:auto;white-space:nowrap;height:300px;\"><div class=\"php codecolorer\"><span class=\"kw2\">&lt;?php<\/span><br \/>\n<br \/>\n<span class=\"re0\">$url<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;domain.com&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"re0\">$port<\/span> <span class=\"sy0\">=<\/span> <span class=\"nu0\">1234<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"re0\">$protocol<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;http&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<br \/>\n<span class=\"re0\">$pls_header<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;#EXTM3U&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"re0\">$json<\/span> <span class=\"sy0\">=<\/span> <a href=\"http:\/\/www.php.net\/json_decode\"><span class=\"kw3\">json_decode<\/span><\/a><span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.php.net\/file_get_contents\"><span class=\"kw3\">file_get_contents<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;<span class=\"es4\">{$protocol}<\/span>:\/\/<span class=\"es4\">{$url}<\/span>:<span class=\"es4\">{$port}<\/span>\/panel_api.php?username=<span class=\"es4\">{$_GET['username']}<\/span>&amp;password=<span class=\"es4\">{$_GET['password']}<\/span>&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span> <span class=\"kw4\">true<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"re0\">$link<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;<span class=\"es4\">{$protocol}<\/span>:\/\/<span class=\"es4\">{$json['server_info']['url']}<\/span>:<span class=\"es4\">{$json['server_info']['port']}<\/span>&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span><span class=\"sy0\">!<\/span><a href=\"http:\/\/www.php.net\/isset\"><span class=\"kw3\">isset<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"re0\">$_GET<\/span><span class=\"br0\">&#91;<\/span><span class=\"st_h\">'type'<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">||<\/span> <a href=\"http:\/\/www.php.net\/empty\"><span class=\"kw3\">empty<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"re0\">$_GET<\/span><span class=\"br0\">&#91;<\/span><span class=\"st_h\">'type'<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"re0\">$extension<\/span> <span class=\"sy0\">=<\/span> <span class=\"st_h\">'ts'<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"kw1\">else<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"re0\">$extension<\/span> <span class=\"sy0\">=<\/span> <span class=\"re0\">$_GET<\/span><span class=\"br0\">&#91;<\/span><span class=\"st_h\">'type'<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"re0\">$playlist<\/span> <span class=\"sy0\">=<\/span> <span class=\"br0\">&#91;<\/span><span class=\"br0\">&#91;<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"re0\">$i<\/span> <span class=\"sy0\">=<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"re0\">$id<\/span> <span class=\"sy0\">=<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">foreach<\/span> <span class=\"br0\">&#40;<\/span><span class=\"re0\">$json<\/span><span class=\"br0\">&#91;<\/span><span class=\"st_h\">'available_channels'<\/span><span class=\"br0\">&#93;<\/span> <span class=\"kw1\">as<\/span> <span class=\"re0\">$channel<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"re0\">$playlist<\/span><span class=\"br0\">&#91;<\/span><span class=\"re0\">$i<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#91;<\/span><span class=\"st_h\">'name'<\/span><span class=\"br0\">&#93;<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;#EXTINF:0 channel-id=&quot;<\/span><span class=\"br0\">&#123;<\/span><span class=\"re0\">$id<\/span><span class=\"br0\">&#125;<\/span><span class=\"st0\">&quot; tvg-id=&quot;<\/span><span class=\"br0\">&#123;<\/span><span class=\"re0\">$channel<\/span><span class=\"br0\">&#91;<\/span><span class=\"st_h\">'name'<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#125;<\/span><span class=\"st0\">&quot; tvg-logo=&quot;<\/span><span class=\"br0\">&#123;<\/span><span class=\"re0\">$channel<\/span><span class=\"br0\">&#91;<\/span><span class=\"st_h\">'stream_icon'<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#125;<\/span><span class=\"st0\">&quot; channel-id=&quot;<\/span><span class=\"br0\">&#123;<\/span><span class=\"re0\">$channel<\/span><span class=\"br0\">&#91;<\/span><span class=\"st_h\">'name'<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#125;<\/span><span class=\"st0\">&quot; group-title=&quot;<\/span><span class=\"br0\">&#123;<\/span><span class=\"re0\">$channel<\/span><span class=\"br0\">&#91;<\/span><span class=\"st_h\">'category_name'<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">|<\/span><span class=\"br0\">&#123;<\/span><span class=\"re0\">$channel<\/span><span class=\"br0\">&#91;<\/span><span class=\"st_h\">'stream_type'<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#125;<\/span><span class=\"st0\">&quot;,<span class=\"es4\">{$channel['name']}<\/span>&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"re0\">$playlist<\/span><span class=\"br0\">&#91;<\/span><span class=\"re0\">$i<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#91;<\/span><span class=\"st_h\">'url'<\/span><span class=\"br0\">&#93;<\/span> <span class=\"sy0\">=<\/span> <span class=\"re0\">$link<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;\/<span class=\"es4\">{$channel['stream_type']}<\/span>\/<span class=\"es4\">{$json['user_info']['username']}<\/span>\/<span class=\"es4\">{$json['user_info']['password']}<\/span>\/&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"re0\">$channel<\/span><span class=\"br0\">&#91;<\/span><span class=\"st_h\">'stream_id'<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;.&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"re0\">$extension<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"re0\">$id<\/span><span class=\"sy0\">++;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"re0\">$i<\/span><span class=\"sy0\">++;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"re0\">$playlist_final<\/span> <span class=\"sy0\">=<\/span> <span class=\"re0\">$pls_header<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;<span class=\"es1\">\\n<\/span>&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw1\">foreach<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$playlist<\/span> <span class=\"kw1\">as<\/span> <span class=\"re0\">$line<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"re0\">$playlist_final<\/span> <span class=\"sy0\">.=<\/span> <span class=\"st0\">&quot;<span class=\"es4\">{$line['name']}<\/span><span class=\"es1\">\\n<\/span>&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;<span class=\"es4\">{$line['url']}<\/span><span class=\"es1\">\\n<\/span>&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<a href=\"http:\/\/www.php.net\/header\"><span class=\"kw3\">header<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;Content-type: text\/plain&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<a href=\"http:\/\/www.php.net\/header\"><span class=\"kw3\">header<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;Content-Disposition: attachment; filename=<span class=\"es4\">{$_GET['name']}<\/span>&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw1\">echo<\/span> <span class=\"re0\">$playlist_final<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>Use the code below in .htaccess file to setup pretty url:<\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"text codecolorer\"># AddType application\/x-httpd-php53 .php<br \/>\nphp_flag magic_quotes_gpc Off<br \/>\n<br \/>\nOptions +FollowSymLinks<br \/>\nRewriteEngine On<br \/>\nRewriteRule ^([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)$ \/GetChannelsList.php?username=$1&amp;password=$2&amp;type=$3&amp;name=$4 [L<\/div><\/div>\n<p>Depending of how you name your php file, adjust in the above code the filename, change GetChannelsList to the filename you place in the php code.<\/p>\n<p>The request will look like: http:\/\/domain.com\/user\/pass\/hls\/name.m3u8<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Use the code below as simple reference to build your own custom playlist from your xtream-codes server. Change the $url and $port [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-2947","post","type-post","status-publish","format-standard","hentry","category-info-on-tech"],"_links":{"self":[{"href":"https:\/\/blog.designed79.co.uk\/index.php?rest_route=\/wp\/v2\/posts\/2947","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.designed79.co.uk\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.designed79.co.uk\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.designed79.co.uk\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.designed79.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2947"}],"version-history":[{"count":0,"href":"https:\/\/blog.designed79.co.uk\/index.php?rest_route=\/wp\/v2\/posts\/2947\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.designed79.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2947"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.designed79.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2947"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.designed79.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2947"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}