如何在PHP中操纵其他服务器的API?

时间:2017-01-19 04:18:14

标签: php json api

我正在使用API​​生成视频流,我希望在PHP下面的链接中更改某些字符串,然后导出它们以用作新的:

https://api.blogit.vn/getlink.php?link=https://drive.google.com/file/d/0B1xQLLJtrzJoaWUxUHdqY01mRGM&json=jwplayer

上面的链接返回一个临时HTML脚本:

[{"label":360,"default":"false","type":"mp4","file":"https:\/\/redirector.googlevideo.com\/videoplayback?api=api.blogit.vn&id=002f5ad6c741e491&itag=18&source=webdrive&requiressl=yes&ttl=transient&mm=31&mn=sn-ab5l6ne7&ms=au&mv=u&nh=IgpwcjAzLmxnYTA3KgkxMjcuMC4wLjE&pl=48&mime=video\/mp4&lmt=1451968289958732&mt=1484794782&ip=2604:a880:400:d0::1300:b001&ipbits=32&expire=1484809258&sparams=ip%2Cipbits%2Cexpire%2Cid%2Citag%2Csource%2Crequiressl%2Cttl%2Cmm%2Cmn%2Cms%2Cmv%2Cnh%2Cpl%2Cmime%2Clmt&signature=2AA8E475C2979F19490C850FDAC99E5F55888F8E.8369F59FA0DF17DBDEB6727BD4805437E2F84F29&key=ck2&app=explorer"},
{"label":480,"default":"true","type":"mp4","file":"https:\/\/redirector.googlevideo.com\/videoplayback?api=api.blogit.vn&id=002f5ad6c741e491&itag=59&source=webdrive&requiressl=yes&ttl=transient&mm=31&mn=sn-ab5l6ne7&ms=au&mv=u&nh=IgpwcjAzLmxnYTA3KgkxMjcuMC4wLjE&pl=48&mime=video\/mp4&lmt=1451968288256365&mt=1484794782&ip=2604:a880:400:d0::1300:b001&ipbits=32&expire=1484809258&sparams=ip%2Cipbits%2Cexpire%2Cid%2Citag%2Csource%2Crequiressl%2Cttl%2Cmm%2Cmn%2Cms%2Cmv%2Cnh%2Cpl%2Cmime%2Clmt&signature=7E46471E73EA1D47A3E40A63C2F9B94559E39C67.085EFA564867C6D8226632185559F9EBECB388AD&key=ck2&app=explorer"}]

如何更改标签默认中的字符串,例如:
360到 360p 这个到默认值:true 而不是480以上
480至 480p 720到 720p *在上面的脚本中不可见但确实存在 1080到 1080p *在上面的脚本中不可见但确实存在

*当然,正确列出它们:
1080
720P
480P
360P

完整的API示例:

<?php 
$link = 'https://drive.google.com/file/d/0BwBTO689s4TSeU84LU5DMkszejg';
$api = 'https://api.blogit.vn/getlink.php?link='.$link.'&json=jwplayer';;
$sources = curl($api);
function curl($url)
{
    $ch = @curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    $head[] = "Connection: keep-alive";
    $head[] = "Keep-Alive: 300";
    $head[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
    $head[] = "Accept-Language: en-us,en;q=0.5";
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36');
    curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
    curl_setopt($ch, CURLOPT_HTTPHEADER, $head);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_TIMEOUT, 60);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
    $page = curl_exec($ch);
    curl_close($ch);
    return $page;
}
?>
<div id="player"></div>
<script type="text/javascript" src="https://api.blogit.vn/BITplayer/jwplayer/jwplayer-7.7.4/jwplayer.js"></script>
<script type="text/javascript">
    jwplayer.key = "####jwplayer.key####";
    var playerInstance = jwplayer("player");
        playerInstance.setup({
            id:'player',
            sources: <?php echo $sources; ?>,
            controls: true,
            displaytitle: true,
            width: "100%",
            height: "100%",
            aspectratio: "16:9",
            fullscreen: "true",
            autostart: true,
        });
</script>

1 个答案:

答案 0 :(得分:0)

我想我忘了将数组转换为json子代码不能正常试试这个

<?php
$link = 'https://drive.google.com/file/d/0BwBTO689s4TSeU84LU5DMkszejg';
$api = 'https://api.blogit.vn/getlink.php?link='.$link.'&json=jwplayer';
$sources = changeValue(curl($api));

function curl($url)
{
    $ch = @curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    $head[] = "Connection: keep-alive";
    $head[] = "Keep-Alive: 300";
    $head[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
    $head[] = "Accept-Language: en-us,en;q=0.5";
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36');
    curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
    curl_setopt($ch, CURLOPT_HTTPHEADER, $head);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_TIMEOUT, 60);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
    $page = curl_exec($ch);
    curl_close($ch);
    return $page;
}

function changeLabel($label) {
    return $label."p";
}

function changeDefault($default) {
    return "true";
}

function changeValue($datas){
    //Define output
    $outputs = [];
    if (!empty($datas)) {
        $datas = json_decode($datas, true);
        rsort($datas);

        foreach ($datas as $data) {
            if (isset($data['label'])) {
                $data['label']   = changeLabel($data['label']);

            }
            if (isset($data['default'])) {
                $data['default'] = changeDefault($data['default']);

            }

            //keep to output
            $outputs[] = $data;
        }
    }
    return json_encode($outputs);
}
?>
<div id="player"></div>
<script type="text/javascript" src="https://api.blogit.vn/BITplayer/jwplayer/jwplayer-7.7.4/jwplayer.js"></script>
<script type="text/javascript">
    jwplayer.key = "rqQQ9nLfWs+4Fl37jqVWGp6N8e2Z0WldRIKhFg=="; //This is a public key, do not remove it
    var playerInstance = jwplayer("player");
        playerInstance.setup({
            id:"player",
            sources: <?php echo $sources; ?>,
            controls: true,
            displaytitle: true,
            width: "100%",
            height: "100%",
            aspectratio: "16:9",
            fullscreen: "true",
            autostart: true,
        });
</script>