当前位置: 首页 > 知识库问答 >
问题:

Getlink谷歌硬盘IPV4

归翔
2023-03-14

我想做一个API让谷歌驱动器视频链接在JW播放器和mysite视频上播放(api.getlinkdrive.com),但我只是找不到这样做的方法。

最近,我在github上找到了一些源代码(https://github.com/marxvn/gdrive).我已经为我的网站修改了它。代码工作正常,但链接无法播放(请参见此处的示例:http://getlinkdrive.byethost7.com/examples/jwplayer.php).

问题可能来自IP或文件的可访问性。我只是想知道我是否需要处理IP或类似OAuth2.0的东西才能访问GoogleAPI

这是我的代码:gdrive。php


namespace Marxvn;
/**
 * Google Drive library
 *
 * @author Marxvn
 * @copyright (c) 2016, Marxvn
 * @license https://spdx.org/licenses/BSD-3-Clause.html BSD-3-Clause
 */

class gdrive
{
    /**
     *
     * @var url
     */
    protected $url;

    /**
     *
     * @var title
     */
    protected $title = '';

    /**
     *
     * @var sources
     */
    public $sources;

    /**
     * 
     * @var itag
     */
    protected $itag = [
        37,
        22,
        59,
        18
    ];


    /**
     *
     * @var vidcode
     */
    protected $vidcode = [
        //2D Non-DASH
        '18'    => '360',
        '59'    => '480',
        '22'    => '720',
        '37'    => '1080',
        //3D Non-DASH
        '82'    => '360',
        '83'    => '240',
        '84'    => '720',
        '85'    => '1080'
    ];

    /**
     *
     * @param  array    $itags
     * @return void
     */

    public function setItag(array $itag)
    {
        $this->itag = $itag;
    }

    /**
     *
     * @param  array    $vidcode
     * @return void
     */

    public function setVidcode(array $vidcode)
    {
        $this->vidcode = $vidcode + $this->vidcode;
    }

    /**
     *
     * @param  array    $title
     * @return void
     */

    public function setTitle($title)
    {
        $this->title = $title;
    }

    /**
     *
     * @param  string   $gurl
     * @return array
     */

    public function getLink($gurl)
    {
        $source = [];

        if( $this->getDriveId($gurl) ) {
            $body = $this->getByfopen();

            if($body && $this->getStr($body,'status=', '&') === 'ok') {

                $fmt = $this->getStr($body, 'fmt_stream_map=','&');

                $urls = explode(',', urldecode($fmt));

                foreach ($urls as $url) {
                    list($itag,$link) = explode('|', $url);
                    if(in_array($itag, $this->itag)){
                        $source[$this->vidcode[$itag]] = preg_replace("/[^\/]+\.google\.com/", "redirector.googlevideo.com",$link);
                    }
                }
            }
        }
        $this->sources = $source;

    }

    /**
     *
     * @param  string   $type
     * @return json
     */

    public function getSources($type = 'jwplayer')
    {
        $s = [];

        $url_tag = ($type == 'jwplayer') ? 'src' : 'file';

        foreach ($this->sources as $itag => $link) {
            $s[] = [
                'type'  => 'video/mp4',
                'label' => $itag,
                'file'  => $link.'&tile='.$itag,
                $url_tag => $link.'&tile='.$this->title.'-'.$itag
            ];
        }
        return json_encode($s);
    }

    /**
     *
     * @param  string   $url
     * @return string
     */
    public function getByfopen()
    {
        try {
            $handle = fopen($this->url, "r");

            if ( !$handle ) {
                throw new \Exception('Url open failed.');
            }  

            $contents = stream_get_contents($handle);
            fclose($handle);

            return $contents ? $contents : '';

        } catch( \Exception $e) {
            echo 'Message: ' .$e->getMessage();
        }
    }

    /**
     *
     * @param  string   $url
     * @return mixed
     */

    private function getDriveId($url)
    {
        preg_match('/(?:https?:\/\/)?(?:[\w\-]+\.)*(?:drive|docs)\.google\.com\/(?:(?:folderview|open|uc)\?(?:[\w\-\%]+=[\w\-\%]*&)*id=|(?:folder|file|document|presentation)\/d\/|spreadsheet\/ccc\?(?:[\w\-\%]+=[\w\-\%]*&)*key=)([\w\-]{28,})/i', $url , $match);

        if(isset($match[1])) {
            $this->url = 'https://docs.google.com/get_video_info?docid='.$match[1];
            return true;
        }

        return false;
    }

    /**
     *
     * @param  string   $string
     * @param  string   $find_start
     * @param  string   $find_end
     * @return mixed
     */
    private function getStr($string, $find_start, $find_end)
    {
        $start = stripos($string, $find_start);

        if($start === false) return false;

        $length = strlen($find_start);

        $end = stripos(substr($string, $start+$length), $find_end);

        if($end !== false) {
            $rs = substr($string, $start+$length, $end);
        } else {
            $rs = substr($string, $start+$length);
        }

        return $rs ? $rs : false;
    }
}

这是玩家的代码:jwplayer.php

<?php
require __DIR__ . 'gdrive.php';
use \Marxvn\gdrive;

$gdrive = new gdrive;
$gdrive->getLink('https://drive.google.com/file/d/0B4EeKbDRC_36QzVNd2xnUEJfU28/view');

?>

<!DOCTYPE html>
<html lang="vi">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Jwplayer</title>
</head>
<body>
    <div id='player'></div>

<script type="text/javascript" src="http://djrocker-anime.com/jwplayer/jwplayer.js"></script>
<script src="https://content.jwplatform.com/libraries/cJ0z4Ufh.js"></script>
<script type='text/javascript'>
    jwplayer.key='r1br2DJmUxLwrLgpi7D4IjgUHoHsDvGWHw2T7Q==';
    var playerInstance = jwplayer(player);
    playerInstance.setup({
        sources: <?php echo $gdrive->getSources('jwplayer');?>,
        width: '50%',
        height: '50%',
        aspectratio: '16:9',
        fullscreen: 'true', 
        autostart: 'true',  
    });
</script>
</body>
</html>

<pre>
    <?php print_r($gdrive->getSources('jwplayer')); ?>
</pre>

当我将直接链接复制到浏览器时,它会显示

403. That’s an error.

Your client does not have permission to get URL /videoplayback?id=2f1b23544d05d291&itag=18&source=webdrive&requiressl=yes&ttl=transient&mm=30&mn=sn-aigllner&ms=nxu&mv=u&pl=22&ei=fSn2WMKwOpTmqgWLsS8&mime=video\/mp4&lmt=1428053688993343&mt=1492527374&ip=185.27.134.64&ipbits=0&expire=1492541885&cp=QVJOVEZfUFhWRlhNOnNmWVVyQ3NPR2Fl&sparams=ip%2Cipbits%2Cexpire%2Cid%2Citag%2Csource%2Crequiressl%2Cttl%2Cmm%2Cmn%2Cms%2Cmv%2Cpl%2Cei%2Cmime%2Clmt%2Ccp&signature=B682DF0E2471F5AB76BF14B2E4CF0C48CDF247BA.62EFECACDDA2D0B2374CC885C2F5804A5976E340&key=ck2&app=explorer&driveid=0B4EeKbDRC_36QzVNd2xnUEJfU28 from this server

共有1个答案

包嘉懿
2023-03-14

错误403表示您无权访问正在调用的文件。您可以做的是使用来自驱动API的导出请求以及来自此SO线程的演示

使用此链接在浏览器上播放或下载:

https://drive.google.com/uc?export=download&id=ID_OF_YOUR_DRIVE_VIDEO

由你在PHP中实现。

 类似资料:
  • 对于我的Google App Engine应用程序,我希望使用服务帐户自己的Google驱动器,即我不希望创建“常规”gmail帐户并向我的服务帐户授予特权,也不希望与任何其他人共享文件,我只希望将该驱动器用作应用程序的“内部文件系统”,仅由应用程序访问。 我的问题是: 1) 是否仍提供此类服务,即是否允许服务帐户使用其自己的专用驱动器,或者我是否被迫使用“新”谷歌云存储? 2)我在哪里可以找到任

  • 我们有一个要求,我们应该提供能力上传文件多达100 GB的大小。当前的流程是将文件从客户端位置/本地系统放到应用服务器。然后,应用服务器将文件推送到Google Drive server中的服务帐户。我想知道是否有办法将文件从本地系统直接推送到Google Drive中的服务帐户。这将帮助我们不必在应用服务器中存储如此大的文件。有人对此有什么建议吗?

  • 我计划使用GoogleDrive服务帐户,因为我的应用程序将使用它来存储实时API文档。这些将是快捷方式文件。在“帮助”页面上显示: 由于无法访问服务号的Google Drive网页风格用户界面,因此无法为此类帐户购买额外的Google Drive存储。因此,您可能更喜欢使用常规帐户而不是服务号。 我看到5GB的数字四处漂浮。如果我只创建快捷文件,我应该担心吗?这种限制是有目的的吗?如果有,原因何

  • 我一直在开发一个移动应用程序,它使用HTTP POST/GET来检索文件/文件夹列表,上传/下载文件等。,这似乎与GData文档列表API配合得很好。既然GDrive SDK V2已经推出,我将转向新的API。 当我将身份验证范围从https://docs.google.com/feeds/到https://www.googleapis.com/auth/drive,我得到了一个400错误。我了解

  • 我有一个谷歌表单,它将所有回复记录在我的谷歌驱动器帐户上的谷歌电子表格中。当在计算机上访问时,Google Drive的“我的驱动器”部分会显示响应的电子表格。 我目前正在编写一个Android应用程序,该应用程序下载电子表格并解析某些数据。 我已经找到了文件并且能够获取文件的标题、描述和导出链接。但是,当我尝试获取文件的DownloadUrl时,我得到了一个NullPointerExceptio

  • 我已经成功安装并运行了名为DriveCommandLine的Google Drive快速启动应用程序。我还对它进行了一些修改,以获取我的驱动器帐户中的一个文件的文件信息。 我现在想做的是以某种方式保存凭证并重用它们,而无需用户每次都访问网页来获得授权码。我已经查看了该页面,其中包含检索和使用OAuth 2.0凭证的说明。为了使用示例类(MyClass ),我修改了DriveCommandLine中