it-swarm.com.de

Wie bekomme ich den redirector.googlevideo.com-Link von einem Video zu Google-Laufwerken?

Ich habe eine Videodatei für ein Google-Laufwerk (z. B. https://drive.google.com/file/d/FILE_ID/view ) und möchte den Link zu redirector.googlevideo.com erhalten.

Wie können Sites wie http://api.getlinkdrive.com/ das tun? Ich habe versucht, die Google Drive REST - API (sowohl v2 als auch v3) zu verwenden, finde aber immer noch keine Möglichkeit, dies zu tun. Viele TV-Show- und Film-Websites Hosten Sie ihre Inhalte auf Google Drive und verwenden Sie diese "getarnte" URL, die abläuft, damit Sie sie beispielsweise nicht an anderer Stelle einbetten können.

Am nächsten habe ich zu docs.google.com/get_video_info?docid=FILE_ID gewechselt und die fmt_stream_map-Links abgerufen. Dies gibt jedoch nicht den Redirector-Link zurück, den ich brauche.

9
chenophucu

Er spricht davon, die URL von Google Drive alle Qualitäten in 360p, 480p, 720p, 1080p zu erhalten und vor dem/videoplayback nach redirector.googlevideo.com zu konvertieren und es als video/mp4 für die Wiedergabe in JW Player zu machen Volles Skript, aber es hat ein kleines Problem, sagt es verboten 403, und es liegt an den Änderungen, die Google in der API vorgenommen hat. Schauen Sie sich die Codes in PHP an und lassen Sie mich wissen, ob jemand das Problem beheben kann Skript später. 

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]).'"},');
}

Ich habe einen besseren Algorithmus aus der vorherigen Antwort implementiert.

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";
}
1
bckps7336

Ich bin mir ziemlich sicher, dass dies vor langer Zeit gefragt wurde, aber ich denke, ich kann Sie auf Ihrem Weg dahin bringen, was Sie wollen. Sie möchten also zu Google Photos Settings gehen und die Option aktivieren, mit der Ihre Videos auf dem Laufwerk in Fotos angezeigt werden können. Kehren Sie zu Google Fotos zurück und wählen Sie das Video aus, zu dem Sie einen direkten Link haben möchten. Klicken Sie mit der rechten Maustaste auf die Miniaturansicht und kopieren Sie den Link. Es sollte so etwas wie https://lh3.googleusercontent.com/[long string]=w1278-h719-k-no sein. Der letzte Teil =w1278-h719-k-no gibt eine kleine Änderung an =m22. Es wird automatisch ein Link für Sie erstellt. Ich hoffe es geht dir gut.

Edit: Sorry, nicht gerade ein Googlevideo-Weiterleitungslink, aber es funktioniert!

Edit: Nach ein wenig mehr Experiment habe ich herausgefunden, dass die Einstellung auf =m15 Ihnen einen längeren Link gibt. Es funktioniert genauso wie das erste. Wenn Sie die Zahl nach m ändern, erhalten Sie unterschiedliche Auflösungen. Sie können also damit experimentieren.

EditL Alles klar. Nach noch mehr Experimenten habe ich zwei verschiedene Videos hochgeladen, eines für die Fahrt und das andere für Fotos. Ich bekam den lh3.googleusercontent.com-Link für beide und bekam ihre direkten Videolinks. Der von Laufwerk wurde auf r3---something.googleusercontent.com gehostet und der von Fotos wurde auf r5--something.googlevideo.com gehostet. Und ich dachte, was wäre, wenn ich den r5--something-Teil durch redirector ersetze? Ich bin hingegangen und habe es getan, und was weißt du? Es funktionierte! Und so bekommen Sie einen redirector.googlevideo.com-Link. ABER, ich bin mir noch nicht sicher, wie api.getlinkdrive.com einen redirector.googlevideo.com-Link erhalten kann. Da die von Google generierten Links IP-spezifisch sind, bedeutet dies, dass es für api.getlinkdrive.com funktioniert, da es diese mit einer eigenen IP anfordert, jedoch nicht für einen anderen Benutzer mit einer anderen IP.

Bearbeiten: Ich habe vergessen, dies zu erwähnen, aber ich bin sicher, dass einige Leute bemerkt haben, dass einige Weiterleitungslinks nicht lh3.googleusercontent.com sind, sondern 3.bp.blogspot.com. Nun, die folgenden Domains können den Platz von lh3.googleusercontent.com einnehmen.

  • lh3.googleusercontent.com
  • lh4.googleusercontent.com
  • lh5.googleusercontent.com
  • lh6.googleusercontent.com
  • 1.bp.blogspot.com
  • 2.bp.blogspot.com
  • 3.bp.blogspot.com
0
CB49

PHP-Code funktioniert hier nicht und ist sogar bedeutungslos, da er das Ergebnis für die Serverseite zurückgibt.

Dies ist mein Javascript/Ajax-Code . Leider sollten Sie Access-Control-Allow-Origin-Erweiterung im Chrome-Browser ..__ verwenden. Zuerst sehen Sie diesen Screenshot des Konsolenfensters.

<!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>
      <p id="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>

Dieser Code funktioniert grundsätzlich, kann aber nicht in der Jwplayer-Komponente abgespielt werden.

Wenn Sie diese URL eingeben, geben Sie " https://docs.google.com/get_video_info?docid=0B4Mn0g4wWmQ1ZThycVhOcDJQc2c " direkt im Chrome-Browser ein Code als jwplayer-Datei-URL, funktioniert es einwandfrei, obwohl es den Tag "app = Explorer" enthält.

Ich bin mir nicht sicher, warum dies passiert ... Also habe ich versucht, zwei Links zu vergleichen, und einige Parameter unterscheiden sich. Die erste ist vom obigen Code und funktioniert nicht, die 2. JSON-Datei direkt und funktioniert.)

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

Warum funktioniert der erste nicht, während der Zweite arbeitet?

0
Lin