我想做一个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
错误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中