首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在youtube-api中下载自己的视频

在youtube-api中下载自己的视频
EN

Stack Overflow用户
提问于 2013-11-26 16:37:19
回答 3查看 7.4K关注 0票数 5

在yt中有下载自上传视频的方法吗?我想为视频制作像像素一样的东西。

Thomas131

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-26 16:57:46

这方面没有API。您只能通过UI来完成它。

票数 2
EN

Stack Overflow用户

发布于 2019-03-21 00:50:08

虽然我还没有找到相应的API,但是它们的下载系统似乎可以很容易地用脚本来使用。如果你进入录影带演播室,然后进入你的录影带,然后你在.然后悬停在下载上,您将看到这样的链接:

https://www.youtube.com/download_my_video?v=[video_id]&t=[key]

如果你检查一堆不同的视频,你会发现钥匙总是一样的。所以,您所需要做的就是使用API查找所有视频is,然后将列表和上述密钥提供给它,您将能够编程下载所有视频。我应该添加您需要从当前浏览会话中添加一些cookie,并将其与请求的标题一起发送。这里有很多贫民区,但对我来说很管用:

代码语言:javascript
复制
import requests
import csv

headers = {
    "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36",
    "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
    "accept-encoding": "gzip, deflate, br",
    "accept-language": "en-US,en;q=0.9",
    "cookie": "[your cookie here]"
}

key = "[your key here]"

with open("hashes.csv", "r") as hashes:
    hashes_reader = csv.reader(hashes)
    for row in hashes_reader:
        print(row)
        video_id = row[1]
        url = "https://www.youtube.com/download_my_video?v=%s&t=%s" % (video_id, key)
        with requests.get(url, headers=headers, stream=True) as r:          
            r.raise_for_status()
            with open(row[0]+".mp4", "wb") as f:
                for chunk in r.iter_content(chunk_size=8192):
                    if chunk:
                        f.write(chunk)
票数 2
EN

Stack Overflow用户

发布于 2013-11-26 16:46:25

因为您用youtube- Javascript -api标记了这个文件,所以我猜您希望使用Javascript构建下载应用程序。

以下是Javascript客户端:https://code.google.com/p/google-api-javascript-client/

这是Javascript,HTML和CSS代码允许你访问“我上传的视频”,也就是你上传的视频。

Javascript代码:

代码语言:javascript
复制
// Some variables to remember state.
var playlistId, nextPageToken, prevPageToken;

// Once the api loads call a function to get the uploads playlist id.
function handleAPILoaded() {
  requestUserUploadsPlaylistId();
}

//Retrieve the uploads playlist id.
function requestUserUploadsPlaylistId() {
  // https://developers.google.com/youtube/v3/docs/channels/list
  var request = gapi.client.youtube.channels.list({
    mine: true,
    part: 'contentDetails'
  });
  request.execute(function(response) {
    playlistId = response.result.items[0].contentDetails.relatedPlaylists.uploads;
    requestVideoPlaylist(playlistId);
  });
}

// Retrieve a playist of videos.
function requestVideoPlaylist(playlistId, pageToken) {
  $('#video-container').html('');
  var requestOptions = {
    playlistId: playlistId,
    part: 'snippet',
    maxResults: 10
  };
  if (pageToken) {
    requestOptions.pageToken = pageToken;
  }
  var request = gapi.client.youtube.playlistItems.list(requestOptions);
  request.execute(function(response) {
    // Only show the page buttons if there's a next or previous page.
    nextPageToken = response.result.nextPageToken;
    var nextVis = nextPageToken ? 'visible' : 'hidden';
    $('#next-button').css('visibility', nextVis);
    prevPageToken = response.result.prevPageToken
    var prevVis = prevPageToken ? 'visible' : 'hidden';
    $('#prev-button').css('visibility', prevVis);

    var playlistItems = response.result.items;
    if (playlistItems) {
      $.each(playlistItems, function(index, item) {
        displayResult(item.snippet);
      });
    } else {
      $('#video-container').html('Sorry you have no uploaded videos');
    }
  });
}

// Create a thumbnail for a video snippet.
function displayResult(videoSnippet) {
  var title = videoSnippet.title;
  var videoId = videoSnippet.resourceId.videoId;
  $('#video-container').append('<p>' + title + ' - ' + videoId + '</p>');
}

// Retrieve the next page of videos.
function nextPage() {
  requestVideoPlaylist(playlistId, nextPageToken);
}

// Retrieve the previous page of videos.
function previousPage() {
  requestVideoPlaylist(playlistId, prevPageToken);
}

页面的HTML标记:

代码语言:javascript
复制
<!doctype html>
<html>
  <head>
    <title>My Uploads</title>
    <link rel="stylesheet" type="text/css" href="my_uploads.css">
  </head>
  <body>
    <div id="login-container" class="pre-auth">
      This application requires access to your YouTube account.
      Please <a href="#" id="login-link">authorize</a> to continue.
    </div>
    <div id="video-container"></div>
    <div class="button-container">
      <button id="prev-button" class="paging-button" onclick="previousPage();">Previous Page</button>
      <button id="next-button" class="paging-button" onclick="nextPage();">Next Page</button>
    </div>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
    <script type="text/javascript" src="auth.js"></script>
    <script type="text/javascript" src="my_uploads.js"></script>
    <script src="https://apis.google.com/js/client.js?onload=googleApiClientReady"></script>
  </body>
</html>

CSS:

代码语言:javascript
复制
.paging-button {
  visibility: hidden;
}

.button-container {
  clear: both;
}

来源:视频

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20222769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档