Como obter o link redirector.googlevideo.com de um vídeo do Google Drive

9

Eu tenho um arquivo de vídeo do Google Drive (como o link ) e quero obter seu redirecionador. link googlevideo.com.

Como sites como o link fazem isso? Tentei usar a API REST do Google Drive, (v2 e v3), mas ainda não consigo encontrar uma maneira de fazer isso. Muitos sites de programas de TV e filmes hospedam seu conteúdo no Google Drive e usam esse URL "encoberto" que expira, por isso você não pode, por exemplo, incorporá-lo em outro lugar.

O mais próximo que obtive é acessar docs.google.com/get_video_info?docid=FILE_ID e obter os links fmt_stream_map, mas isso não retorna o link do redirecionador de que preciso.

    
por chenophucu 08.02.2017 в 15:01
fonte

4 respostas

1

Ele está falando sobre como obter o URL do google drive em todas as qualidades em 360p, 480p, 720p, 1080p e converter antes do / videoplayback para redirector.googlevideo.com e torná-lo como video / mp4 para reproduzir no JW Player. Eu tenho o script completo, mas tem um pequeno problema que diz 403 proibido e é por causa das alterações feitas no google API.Tenha uma olhada nos códigos em PHP e deixe-me saber se alguém pode consertá-lo, vou postar script completo mais tarde.

function Drive($link) {
    $url = urldecode($link);
    $get = curl1($url);
    $data = explode(',["fmt_stream_map","', $get);
    $data = explode('"]', $data[1]);
    $data = str_replace(array('\u003d', '\u0026'), array('=', '&'), $data[0]);
    $data = explode(',', $data);
    asort($data);
    foreach($data as $list) {
        $data2 = explode('|', $list);
        if($data2[0] == 37) {$q1080p = preg_replace("/\/[^\/]+\.google\.com/","/redirector.googlevideo.com",$data2[1]);}    // 1080P
        if($data2[0] == 22) {$q720p = preg_replace("/\/[^\/]+\.google\.com/","/redirector.googlevideo.com",$data2[1]);}     // 720P
        if($data2[0] == 59) {$q480p = preg_replace("/\/[^\/]+\.google\.com/","/redirector.googlevideo.com",$data2[1]);}     // 480P
        if($data2[0] == 18) {$q360p = preg_replace("/\/[^\/]+\.google\.com/","/redirector.googlevideo.com",$data2[1]);}     // 360P
    }
    $js[0][0] = "$q1080p";
    $js[0][1] = "$q720p";
    $js[0][2] = "$q480p";
    $js[0][3] = "$q360p";
    $js[1][0] = "1080P";
    $js[1][1] = "720P";
    $js[1][2] = "480P";
    $js[1][3] = "360P";
    return $js;     
}
if ($jw[0][0] != "") {
    echo('{file: "'.urldecode($jw[0][0]).'",type: "video/mp4",label: "'.urldecode($jw[1][0]).'"},');
}
if ($jw[0][1] != "") {
    echo('{file: "'.urldecode($jw[0][1]).'",type: "video/mp4",label: "'.urldecode($jw[1][1]).'"},');
}   
if ($jw[0][2] != "") {
    echo('{file: "'.urldecode($jw[0][2]).'",type: "video/mp4",label: "'.urldecode($jw[1][2]).'"},');
}   
if ($jw[0][3] != "") {
    echo('{file: "'.urldecode($jw[0][3]).'",type: "video/mp4",label: "'.urldecode($jw[1][3]).'"},');
}
    
por Football Live Streamings 07.04.2017 / 19:31
fonte
1

Eu implementei um algoritmo melhor a partir da resposta anterior.

function curl($url){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER, $return);
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}

function Drive($id) {
    $o = [];
    $url = "https://docs.google.com/get_video_info?docid=$id";
    $get = curl($url);

    parse_str($get, $out);
    $data = explode(",", $out["fmt_stream_map"]);

    foreach($data as $d) {
        switch ((int)substr($d, 0, 2)) {
            case 18:
                $r = "360P";
                break;
            case 22:
                $r = "720P";
                break;
            case 37:
                $r = "1080P";
                break;
            case 59:
                $r = "480P";
                break;
            default:
                break;
        }
        $o[$r] = substr(preg_replace("/\/[^\/]+\.google\.com/","/redirector.googlevideo.com", $d), 3);
    }
    ksort($o);
    return $o;
}
$jw = Drive(FILE_ID_HERE);

foreach ($jw as $k => $r) {
    echo json_encode(array("file"=> $r, "type"=> "video/mp4", "label"=> $k))."\n";
}
    
por bckps7336 25.06.2017 / 19:51
fonte
0

O código php não funcionará aqui e nem mesmo sem sentido, porque retornará o resultado para o lado do servidor.

Este é o meu código Javascript / Ajax. Infelizmente, você deve usar a extensão Access-Control-Allow-Origin no navegador Chrome . Primeiro, por favor, veja esta imagem da janela do console.

<!DOCTYPE html>
<html>
   <head>
      <script src="https://code.jquery.com/jquery-3.2.1.min.js"integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="  crossorigin="anonymous"></script>
      <script src="https://content.jwplatform.com/libraries/YOUR-JW-PLAYER-LICENSE-KEY.js"></script></head><body><pid="urls"></p>
      <div id="myElement"></div>
   </body>

   <script>
      var docid = "0B4Mn0g4wWmQ1ZThycVhOcDJQc2c";
      var api_url = "https://docs.google.com/get_video_info";
      var ans = {};
      var url = "";

      getGoogleVideoUrl();

      function getGoogleVideoUrl(){
        $.ajax({
          url: api_url,
          type: "get",
          data: { 
            docid: docid,
          },
          success: function(response) {
            //
            // get value of which key is 'fmt_stream_map'.
            //
            var fmt_stream_map = getQueryVariable(response, 'fmt_stream_map');
            //
            // split my comma
            //
            var maps = fmt_stream_map.split("%2C");
            //
            // loop all links, 
            //  
            var purl = "";          
            for (x in maps) {
                var res = decodeURIComponent(decodeURIComponent(maps[x])).split('|');
                // purl = res[1].replace(new RegExp("/\/[^\/]+\.google\.com/", 'g'),"//redirector.googlevideo.com/");
                // purl = res[1].replace(new RegExp("\.google\.com/", 'g'),".googlevideo.com/");

                purl = res[1];
                //.replace(/.c.docs.google.com/g,".googlevideo.com")
                //.replace(/app=explorer/g,"app=storage")
                //.replace(/key=ck2/g,"key=cms1")
                //.replace(/&cp=/g,"&api=")
                //.replace(/,cp&/g,',api&')
                //.replace(/,cp,/g,',api,')
                //.replace(/=cp,/g,'=api,')
                //.replace(/&sparams=/g,'&cms_redirect=yes&sparams=');

                switch (parseInt(res[0])) {
                case 5:
                    quality = 'Low Quality, 240p, FLV, 400x240';
                    break;
                case 17:
                    quality = 'Low Quality, 144p, 3GP, 0x0';
                    break;
                case 18:
                    quality = 'Medium Quality, 360p, MP4, 480x360';
                    break;
                case 22:
                    quality = 'High Quality, 720p, MP4, 1280x720';
                    break;
                case 34:
                    quality = 'Medium Quality, 360p, FLV, 640x360';
                    break;
                case 35:
                    quality = 'Standard Definition, 480p, FLV, 854x480';
                    break;
                case 36:
                    quality = 'Low Quality, 240p, 3GP, 0x0';
                    break;
                case 37:
                    quality = 'Full High Quality, 1080p, MP4, 1920x1080';
                    break;
                case 38:
                    quality = 'Original Definition, MP4, 4096x3072';
                    break;
                case 43:
                    quality = 'Medium Quality, 360p, WebM, 640x360';
                    break;
                case 44:
                    quality = 'Standard Definition, 480p, WebM, 854x480';
                    break;
                case 45:
                    quality = 'High Quality, 720p, WebM, 1280x720';
                    break;
                case 46:
                    quality = 'Full High Quality, 1080p, WebM, 1280x720';
                    break;
                case 82:
                    quality = 'Medium Quality 3D, 360p, MP4, 640x360';
                    break;
                case 84:
                    quality = 'High Quality 3D, 720p, MP4, 1280x720';
                    break;
                case 102:
                    quality = 'Medium Quality 3D, 360p, WebM, 640x360';
                    break;
                case 104:
                    quality =  'High Quality 3D, 720p, WebM, 1280x720';
                    break;
                default:
                    quality =  'transcoded (unknown) quality';
                    break;
                }
                ans[quality] = purl;
            }
             console.log(ans);
             $('#urls').html(JSON.stringify(ans));

             url  = ans[Object.keys(ans)[0]];
             build_player();

          },
          error: function(xhr) {
            //Do Something to handle error
          }
        });
      }



      function build_player(){
        var playerInstance = jwplayer("myElement");
        playerInstance.setup({
            file: url,
            type: "mp4",
            width: 800 , 
            height: 600,
        }); 
      }

      function getQueryVariable(query, variable) {
          var vars = query.split('&');
          for (var i = 0; i < vars.length; i++) {
              var pair = vars[i].split('=');
              if (decodeURIComponent(pair[0]) == variable) {
                  //return decodeURIComponent(pair[1]);
                  return pair[1];
              }
          }
          console.log('Query variable %s not found', variable);
          return "";
      }

   </script>
</html>

Este código funciona basicamente, mas não é reproduzido no componente jwplayer.

No entanto, se você inserir este URL, " link ", diretamente no navegador do Google Chrome, obtenha o arquivo JSON, Analisá-lo manualmente, use um dos URLs diretamente neste código como url arquivo do jwplayer, ele funciona perfeitamente, embora contenha "app = explorer" tag em si.

Não sei por que isso acontece. Então eu tentei comparar 2 links e alguns parâmetros são diferentes. O primeiro é do código acima e não funciona, o segundo arquivo JSON diretamente e funcionando.)

ei=hJ5yWaHCKYXb-wWona2YBA
ei=KZ5yWZSkK4aFqgXAwpoo

susci=o-AC34EOoA1Wst0Heh0U_bP9epqR8K9s4UBhwlqmsxKZKwAOA
susci=o-AH82qbGL8BcWQ3BPybbvZyuNBiDd2Uasz4J0ZNXJCZwobPje

expire=1500698308
expire=1500698217

cp=QVNFUkdfV1NOSVhOOnhwOWFybUloWXNX
cp=QVNFUkdfV1JPSFhOOmpURGRUeUt3eVpv

signature=3D306FD9D9ADA683D313AABDFE057B608A6F2A39.8BB3A9C321B6BEAC8D1D5AEED2F25511DF97CE2B
signature=2C2465BDFC4D9CCFD0D4A42F38BAEF44D55AFDF1.A916937113445ABB90D18B3AE89600729CFADDE6

Por que o primeiro não está funcionando enquanto o segundo está funcionando? Alguma idéia disso?

    
por Lin 22.07.2017 / 02:19
fonte
0

Tenho certeza de que isso foi feito há muito tempo, mas acho que posso levá-lo ao seu caminho para o que você deseja. Então, o que você vai querer fazer é acessar as Configurações do Google Fotos e marcar a opção que permite que seus vídeos em disco sejam exibidos mostrado nas fotos. Volte para o google photos e selecione o vídeo para o qual você quer um link direto. Clique com o botão direito do mouse na miniatura e copie o link. Deve algo como https://lh3.googleusercontent.com/[long string]=w1278-h719-k-no . A última parte, =w1278-h719-k-no , dá uma pequena alteração em =m22 . Ele irá gerar automaticamente um link para você. Espero que tudo corra bem por você.

Edit: Desculpe, não é exatamente um redirecionador de googlevideo, mas funciona!

Editar: depois de um pouco mais de experimentação, descobri que defini-lo como =m15 fornece um link mais longo. Funciona igualmente como o primeiro. Alterar o número após o m fornecerá diferentes resoluções. Então, você pode experimentar isso.

EditL Tudo bem. Depois de mais experimentos, fiz upload de dois vídeos diferentes, um para dirigir e outro para fotos. Eu tenho o link lh3.googleusercontent.com para ambos e tenho seus links de vídeo diretos. O da unidade estava hospedado em r3---something.googleusercontent.com e o das fotos estava hospedado em r5--something.googlevideo.com . E eu pensei, e se eu substituir a parte r5--something dele por redirector ? Eu fui e fiz isso, e bem, o que você sabe! Funcionou! E é assim que você consegue um link redirector.googlevideo.com . MAS , ainda não tenho certeza de como api.getlinkdrive.com é capaz de obter um link redirector.googlevideo.com . Como os links gerados pelo google são específicos de IP, o que significa que funcionaria para api.getlinkdrive.com , já que ele solicitou com seu próprio IP, mas não para outro usuário, com um IP diferente.

Editar: Esqueci de mencionar isso, mas tenho certeza de que algumas pessoas notaram que alguns links de redirecionamento não são lh3.googleusercontent.com , mas 3.bp.blogspot.com . Bem, os seguintes domínios podem tomar o lugar de lh3.googleusercontent.com ;

  • lh3.googleusercontent.com
  • lh4.googleusercontent.com
  • lh5.googleusercontent.com
  • lh6.googleusercontent.com
  • 1.bp.blogspot.com
  • 2.bp.blogspot.com
  • 3.bp.blogspot.com
por CB49 23.11.2017 / 09:56
fonte