2017-02-05 2 views
0

Ich versuche ein Greasemonkey-Skript zu schreiben, um die Beschreibung eines Youtube-Videos zu extrahieren und es in eine andere Website einzufügen, die eingebettete Videos verwendet.Ist es möglich, die Beschreibung eines Youtube-Videos ohne Authentifizierung durch die API abzurufen?

Die einzige Möglichkeit, die ich gefunden habe, ist die Verwendung der API, um alle Daten für das Video aufzurufen. Ich denke, dies ist eine zu komplizierte Art und Weise, dies zu tun, deshalb möchte ich ein Skript erstellen, das keine Authentifizierung erfordert und die Beschreibung abkratzen kann.

Gibt es eine Möglichkeit, dies zu tun?

Antwort

0

Verwenden https://www.youtube.com/get_video_info Dienst, der eine URLSearchParams -kompatiblen & -separated Kette von verschiedenen Videoparameter zurückgibt, einschließlich title.

function getYoutubeVideoTitle(id, callback) { 
    GM_xmlhttpRequest({ 
     method: 'GET', 
     url: 'https://www.youtube.com/get_video_info?video_id=' + id, 
     onload: function(r) { 
      var encoded = (r.responseText.match(/(^|&)title=(.*?)(&|$)/) || [])[2] || ''; 
      callback(decodeURIComponent(encoded.replace(/\+/g, ' '))); 
     } 
    }); 
} 

getYoutubeVideoTitle('jE51HWPz1l8', function(title) { 
    console.log(title); 
}); 

Specsavers Kessel Anzeige - 2017

Um alle Parameter in einem Objekt zu erhalten spaltete die Antwort von & und spaltete jedes Element durch = als Schlüssel/Wert:

function getYoutubeVideoData(id, callback) { 
    GM_xmlhttpRequest({ 
     method: 'GET', 
     url: 'https://www.youtube.com/get_video_info?video_id=' + id, 
     onload: function(response) { 
      var data = {}; 
      response.responseText.split('&').forEach(function(param) { 
       param = param.split('='); 
       data[param[0]] = decodeURIComponent(param[1].replace(/\+/g, ' ')); 
      }); 
      callback(data); 
     } 
    } 
} 

Hinweise.

In modernen Browsern URLSearchParams bietet einen viel bequemeren Zugang:

 onload: (r) => callback(new URLSearchParams(r.responseText).get('title')); 

 onload: (r) => { 
      var data = {}; 
      for (var entry of new URLSearchParams(r.responseText).entries()) 
       data[entry[0]] = entry[1]; 
      callback(data); 
     } 

Der Code übernimmt keine doppelten Schlüssel in der Antwort, die für get_video_info Service wahr ist.

GM_xmlhttpRequest({ 
     method: 'GET', 
     url: 'https://www.youtube.com/get_video_info?video_id=' + id + 
      '&hl=en_US&html5=1&el=embedded&eurl=' + encodeURIComponent(location.href), 
+0

Mit URLSearchParams, kann ich dann Greasemonkey verwenden, um die Position der Antwort, wo ich will es auf der Webseite wie gewohnt:

Zum Video-Download-Links und weitere Informationen in der Antwort ändern Sie die URL zu bekommen? –

+0

URLSearchParams ist nur eine Annehmlichkeit, die das manuelle String-Splitting verbessert, es ist nicht mit irgendetwas anderem verbunden. – wOxxOm

Verwandte Themen