API YouTube để tìm nạp tất cả video trên một kênh


197

Chúng tôi cần một danh sách video theo tên kênh của YouTube (sử dụng API).

Chúng tôi có thể nhận danh sách kênh (chỉ tên kênh) bằng cách sử dụng API bên dưới:

https://gdata.youtube.com/feeds/api/channels?v=2&q=tendulkar

Dưới đây là một liên kết trực tiếp của các kênh

https://www.youtube.com/channel/UCqAEtEr0A0Eo2IVcuWBfB9g

Hoặc là

WWW.YouTube.com/channel/HC-8jgBP-4rlI

Bây giờ, chúng tôi cần video của kênh >> UCqAEtEr0A0Eo2IVcuWBfB9g hoặc HC-8jgBP-4rlI.

Chúng tôi đã cố gắng

https://gdata.youtube.com/feeds/api/videos?v=2&uploader=partner&User=UC7Xayrf2k0NZiz3S04WuDNQ https://gdata.youtube.com/feeds/api/videos?v=2&uploader=partner&q=UC7Xayrf2k0NZiz3S04WuDNQ

Nhưng, nó không giúp được gì.

Chúng tôi cần tất cả các video được đăng trên kênh. Video được tải lên một kênh có thể từ nhiều người dùng, do đó tôi không nghĩ việc cung cấp tham số người dùng sẽ giúp ...


Tôi có thể truy cập vào các tập tin video của riêng tôi. về cơ bản tải xuống nội dung của riêng tôi khi đăng nhập qua API !!!
filthy_wizard

Câu trả lời:


216

Bạn cần xem API dữ liệu YouTube . Bạn sẽ tìm thấy tài liệu về cách API có thể được truy cập. Bạn cũng có thể tìm thấy các thư viện khách hàng .

Bạn cũng có thể tự thực hiện các yêu cầu. Dưới đây là một URL ví dụ lấy các video mới nhất từ ​​một kênh:

https://www.googleapis.com/youtube/v3/search?key={your_key_here}&channelId={channel_id_here}&part=snippet,id&order=date&maxResults=20

Sau đó, bạn sẽ nhận được một JSONid video và chi tiết và bạn có thể tạo URL video của mình như thế này:

http://www.youtube.com/watch?v={video_id_here}

29
Điều này sẽ chỉ trả lại video đầu tiên maxResults=20(tối đa 50) chứ không phải toàn bộ danh mục kênh. Nếu bạn muốn có nhiều kết quả hơn, hãy sử dụng pageToken như được mô tả ở đây .
Fábio Perez

2
Romulus Urakagi Ts'ai: trong khi yêu cầu các video bạn đang cung cấp channelId, đó là bộ lọc cho kênh.
akshay

11
Đáng chú ý, bạn chỉ có thể nhận được tối đa 500 video từ một kênh bằng cách sử dụng mã thông báo trang tiếp theo.
Tony

3
@TonyP Parentite Làm cách nào để tôi có được hơn 500 video. Tôi hiện đang phải đối mặt với vấn đề này.
Raja

3
Vấn đề được giải thích tốt ở đây. code.google.com/p/gdata-issues/issues/detail?id=4282 Thử với một phạm vi ngày khác nhau là một cách để có được nhiều video hơn.
Raja

119

Trước tiên, bạn cần lấy ID của danh sách phát đại diện cho các video tải lên từ người dùng / kênh:

https://developers.google.com/youtube/v3/docs/channels/list#try-it

Bạn có thể chỉ định tên người dùng với thông số forUsername={username}hoặc chỉ định mine=trueđể có tên riêng (trước tiên bạn cần xác thực). Bao gồm part=contentDetailsđể xem danh sách phát.

GET https://www.googleapis.com/youtube/v3/channels?part=contentDetails&forUsername=jambrose42&key={YOUR_API_KEY}

Trong kết quả "relatedPlaylists"sẽ bao gồm "likes""uploads"danh sách phát. Lấy "upload"ID danh sách phát đó . Cũng lưu ý rằng "id"channelID của bạn để tham khảo trong tương lai.

Tiếp theo, lấy danh sách các video trong danh sách phát đó:

https://developers.google.com/youtube/v3/docs/playlistItems/list#try-it

Chỉ cần thả vào danh sách nhạc!

GET https://www.googleapis.com/youtube/v3/playlistItems?part=snippet%2CcontentDetails&maxResults=50&playlistId=UUpRmvjdu3ixew5ahydZ67uA&key={YOUR_API_KEY}


1
Không phải ai cũng có tên người dùng youtube trong thế giới hoàn toàn mới này. Một số trong số họ chỉ có số id người dùng google +, không hoạt động thay cho tên người dùng youtube
kristopolous 22/03/2016

1
@kristopolous Mỗi kênh YouTube có ID kênh. Nếu bạn truy cập trang YouTube thông qua Google plus, nó sẽ sử dụng id người dùng Google plus làm liên kết đến kênh. Nếu bạn đã truy cập kênh từ một video YouTube, nó sẽ sử dụng thuộc tính ID kênh của YouTube.
Bỏ qua

19
Đây là hoàn hảo. Đặc biệt bởi vì nó chỉ dành 2 điểm hạn ngạch thay vì 100 (mà cuộc gọi tìm kiếm sẽ chi tiêu).
JP de la Torre

1
đôi khi nó ( developers.google.com/youtube/v3/docs/playlistItems/list#try-it ) hoạt động, đôi khi nó ném 404 cho cùng một uploadId, không biết chuyện gì đang xảy ra.
ishandutta2007

1
@jambrose trong danh sách phát Điểm cuối làm thế nào để sử dụng một số tham số phạm vi ngày như PublishAfter / PublishB Before. Tôi đã thử Nó, không hoạt động Vì vậy, làm thế nào tôi tìm nạp tất cả các video của một kênh.
Harsh sachdev

79

Dưới đây là video từ Google Developers chỉ ra cách liệt kê tất cả các video trong một kênh trong v3API YouTube.

Có hai bước:

  1. Kênh truy vấn để lấy Id "tải lên". ví dụhttps://www.googleapis.com/youtube/v3/channels?id={channel Id}&key={API key}&part=contentDetails

  2. Sử dụng Id "tải lên" này để truy vấn PlaylistItems để lấy danh sách video. ví dụhttps://www.googleapis.com/youtube/v3/playlistItems?playlistId={"uploads" Id}&key={API key}&part=snippet&maxResults=50


1
Id "tải lên" có thể thay đổi cho một kênh nhất định không?
ishandutta2007

có vẻ như các video tải lên giống như channelId, nhưng các API không nhất quán khủng khiếp, một số có thể trả lời stackoverflow.com/questions/43568521/
ishandutta2007

1
@ ishandutta2007 không có id tải lên nào khác với id kênh.
Abbeyke4

@ virtualmic @ Peter
Chàng

nó đang hoạt động tốt nhưng tôi có nhiều id kênh, vì vậy làm cách nào tôi có thể gửi chúng đến api, tôi có thể sử dụng id kênh được phân tách bằng dấu phẩy
Onkar Musale

31

Để có được danh sách kênh:

Nhận danh sách Kênh theo forUserName :

https://www.googleapis.com/youtube/v3/channels?part=snippet,contentDetails,statistic&forUsername=Apple&key=

Nhận danh sách kênh theo id kênh :

https://www.googleapis.com/youtube/v3/channels/?part=snippet,contentDetails,statistic&id=UCE_M8A5yxnLfW0KghEeajjw&key=

Nhận phần Kênh:

https://www.googleapis.com/youtube/v3/channelSections?part=snippet,contentDetails&channelId=UCE_M8A5yxnLfW0KghEeajjw&key=

Để nhận Danh sách phát:

Nhận danh sách phát theo ID kênh :

https://www.googleapis.com/youtube/v3/playlists?part=snippet,contentDetails&channelId=UCq-Fj5jknLsUf-MWSy4_brA&maxResults=50&key=

Nhận danh sách phát theo ID kênh với pageToken :

https://www.googleapis.com/youtube/v3/playlists?part=snippet,contentDetails&channelId=UCq-Fj5jknLsUf-MWSy4_brA&maxResults=50&key= & pageToken = CDIAA

Để có được PlaylistItems:

Nhận danh sách PlaylistItems của PlayListId :

https://www.googleapis.com/youtube/v3/playlistItems?part=snippet,contentDetails&maxResults=25&playlistId=PLHFlHpPjgk70Yv3kxQvkDEO5n5tMQia5I

Để nhận video:

Nhận danh sách video theo id video :

https://www.googleapis.com/youtube/v3/ideo?part=snippet,contentDetails,statistic&id=YxLCwfA1cLw&key=

Nhận danh sách video theo nhiều video id :

https://www.googleapis.com/youtube/v3/ideo?part=snippet,contentDetails,statistic&id=YxLCwfA1cLw,Qgy6LaO3SB0,7yPJXGO2Dcw&key=

Nhận danh sách ý kiến

Nhận danh sách bình luận bằng cách ID video :

https://www.googleapis.com/youtube/v3/commentThreads?part=snippet,replies&videoId=el **** kQak & key = A ********** k

Nhận danh sách bình luận bằng cách ID kênh :

https://www.googleapis.com/youtube/v3/commentThreads?part=snippet,replies&channelId=U ***** Q & key = AI ******** k

Nhận danh sách bình luận bằng cách allThreadsRelatedToChannelId :

https://www.googleapis.com/youtube/v3/commentThreads?part=snippet,replies&allThreadsRelatedToChannelId=UC ***** ntcQ & key = AI ***** k

Đây là tất cả các api được tiếp cận.

Dựa trên id kênh, chúng tôi không nhận được tất cả video trực tiếp, đó là điểm quan trọng ở đây.

Để tích hợp https://developers.google.com/youtube/v3/quickstart/ios?ver=swift


Làm cách nào tôi có thể gửi nhiều id kênh tới api, tôi có thể sử dụng id kênh được phân tách bằng dấu phẩy
Onkar Musale

Làm cách nào tôi có thể có được các kênh youtube hàng đầu 10/50/100 bằng api?
Rajeshwar

10

Dưới đây là một thay thế Python không yêu cầu bất kỳ gói đặc biệt. Bằng cách cung cấp id kênh, nó trả về một danh sách các liên kết video cho kênh đó. Xin lưu ý rằng bạn cần Khóa API để nó hoạt động.

import urllib
import json

def get_all_video_in_channel(channel_id):
    api_key = YOUR API KEY

    base_video_url = 'https://www.youtube.com/watch?v='
    base_search_url = 'https://www.googleapis.com/youtube/v3/search?'

    first_url = base_search_url+'key={}&channelId={}&part=snippet,id&order=date&maxResults=25'.format(api_key, channel_id)

    video_links = []
    url = first_url
    while True:
        inp = urllib.urlopen(url)
        resp = json.load(inp)

        for i in resp['items']:
            if i['id']['kind'] == "youtube#video":
                video_links.append(base_video_url + i['id']['videoId'])

        try:
            next_page_token = resp['nextPageToken']
            url = first_url + '&pageToken={}'.format(next_page_token)
        except:
            break
    return video_links

Cái này hoạt động ra sao? Tôi đã dán API KEY bằng cách sử dụng dấu ngoặc đơn '' vào biến api_key, sau đó tôi gọi hàm truyền trong id kênh, sau đó chạy chương trình python, nhưng không có gì xảy ra.
Joffrey Baratheon

@JoffreyBaratheon hàm trả về một mảng, bạn cần chứa nó cho một biến. Ví dụ: video_list = get_all_video_in_channel("ABC123EFG456")sau đó bạn có thể in nó để xem mảng bằng cách sử dụngprint(video_list)
phapha pha

7

Đây là mã sẽ trả về tất cả các id video dưới kênh của bạn

<?php 
    $baseUrl = 'https://www.googleapis.com/youtube/v3/';
    // https://developers.google.com/youtube/v3/getting-started
    $apiKey = 'API_KEY';
    // If you don't know the channel ID see below
    $channelId = 'CHANNEL_ID';

    $params = [
        'id'=> $channelId,
        'part'=> 'contentDetails',
        'key'=> $apiKey
    ];
    $url = $baseUrl . 'channels?' . http_build_query($params);
    $json = json_decode(file_get_contents($url), true);

    $playlist = $json['items'][0]['contentDetails']['relatedPlaylists']['uploads'];

    $params = [
        'part'=> 'snippet',
        'playlistId' => $playlist,
        'maxResults'=> '50',
        'key'=> $apiKey
    ];
    $url = $baseUrl . 'playlistItems?' . http_build_query($params);
    $json = json_decode(file_get_contents($url), true);

    $videos = [];
    foreach($json['items'] as $video)
        $videos[] = $video['snippet']['resourceId']['videoId'];

    while(isset($json['nextPageToken'])){
        $nextUrl = $url . '&pageToken=' . $json['nextPageToken'];
        $json = json_decode(file_get_contents($nextUrl), true);
        foreach($json['items'] as $video)
            $videos[] = $video['snippet']['resourceId']['videoId'];
    }
    print_r($videos);

Lưu ý : Bạn có thể nhận id kênh tại https://www.youtube.com/account_adv cân bằng sau khi đăng nhập.


1
Đây chắc chắn là một giải pháp sạch sẽ hoạt động. Hiện đang sử dụng trong sản xuất.
Codex73

7

Hãy thử với như sau. Nó có thể giúp bạn.

https://gdata.youtube.com/feed/api/ideo?master=cnn&v=2&orderby=updated&alt=jsonc&q=news

Ở đây tác giả vì bạn có thể chỉ định tên kênh và "q" vì bạn có thể cung cấp từ khóa tìm kiếm của mình.


Tài liệu cho API đó ở đâu?
Macabeus

1
API này không còn khả dụng: "API dữ liệu YouTube (v2) đã chính thức bị từ chối kể từ ngày 4 tháng 3 năm 2014"
Bruce van der Kooij


6

Nhờ các tài liệu tham khảo được chia sẻ ở đây và các nơi khác, tôi đã tạo một tập lệnh / công cụ trực tuyến mà người ta có thể sử dụng để có được tất cả các video của một kênh.

Nó kết hợp các cuộc gọi API để youtube.channels.list, playlistItems, videos. Nó sử dụng các hàm đệ quy để làm cho các cuộc gọi lại không đồng bộ chạy lần lặp tiếp theo khi nhận được phản hồi hợp lệ.

Điều này cũng phục vụ để hạn chế số lượng yêu cầu thực tế được thực hiện tại một thời điểm, do đó giữ cho bạn an toàn khỏi vi phạm các quy tắc API của YouTube. Chia sẻ đoạn trích ngắn và sau đó một liên kết đến mã đầy đủ. Tôi đã nhận được khoảng 50 kết quả tối đa cho mỗi giới hạn cuộc gọi bằng cách sử dụng giá trị nextPageToken đi kèm trong phản hồi để lấy 50 kết quả tiếp theo, v.v.

function getVideos(nextPageToken, vidsDone, params) {
    $.getJSON("https://www.googleapis.com/youtube/v3/playlistItems", {
        key: params.accessKey,
        part: "snippet",
        maxResults: 50,
        playlistId: params.playlistId,
        fields: "items(snippet(publishedAt, resourceId/videoId, title)), nextPageToken",
        pageToken: ( nextPageToken || '')
        },
        function(data) {
            // commands to process JSON variable, extract the 50 videos info

            if ( vidsDone < params.vidslimit) {

                // Recursive: the function is calling itself if
                // all videos haven't been loaded yet
                getVideos( data.nextPageToken, vidsDone, params);

            }
             else {
                 // Closing actions to do once we have listed the videos needed.
             }
    });
}

Điều này có một danh sách cơ bản của các video, bao gồm id, tiêu đề, ngày xuất bản và tương tự. Nhưng để có thêm thông tin chi tiết về từng video như số lượt xem và lượt thích, người ta phải thực hiện các lệnh gọi API videos.

// Looping through an array of video id's
function fetchViddetails(i) {
    $.getJSON("https://www.googleapis.com/youtube/v3/videos", {
        key: document.getElementById("accesskey").value,
        part: "snippet,statistics",
        id: vidsList[i]
        }, function(data) {

            // Commands to process JSON variable, extract the video
            // information and push it to a global array
            if (i < vidsList.length - 1) {
                fetchViddetails(i+1) // Recursive: calls itself if the
                                     //            list isn't over.
            }
});

Xem mã đầy đủ ở đây , và phiên bản trực tiếp ở đây . (Chỉnh sửa: liên kết github cố định)
Chỉnh sửa: Phụ thuộc: JQuery, Papa.parse


1
Bạn có chắc chắn rằng điều này làm việc? Trang GitHub không còn nữa và khi tôi nhập API API và id kênh vào các trường, tôi gặp lỗi.
Joffrey Baratheon

@JoffreyBaratheon cảm ơn vì đã chỉ ra liên kết github bị hỏng. Tôi chỉ chạy nó .. nó hoạt động. Lấy id danh sách phát đó thật khó khăn .. vui lòng xem điều này: github.com/answerquestalsquest.github.io/issues/2
Nikhil VJ

công việc tốt. hoạt động rất tốt với liên kết github cập nhật. bạn sẽ cần jquery và papapude.min.js
Bludau Media

@thE_iNviNciblE cảm ơn vì đã đưa nó lên. đã đề cập đến nó.
Nikhil VJ

@ nikhil-vj Không thể sử dụng cho szenario trong thế giới thực, bạn không nên cung cấp cho Trình duyệt khách hàng Mã thông báo API youtube. Nhưng đối với giáo dục lập trình công việc khá tốt :-)
Bludau Media

4

Vì mọi người trả lời câu hỏi này đều gặp vấn đề do giới hạn video 500 nên đây là một giải pháp thay thế sử dụng youtube_dl trong Python 3 . Ngoài ra, không cần khóa API .

  1. Cài đặt youtube_dl: sudo pip3 install youtube-dl
  2. Tìm ra id kênh của kênh mục tiêu của bạn . ID sẽ bắt đầu với UC. Thay thế C cho Kênh bằng U để tải lên (tức là UU ...), đây là danh sách phát tải lên .
  3. Sử dụng tính năng tải xuống danh sách phát từ youtube-dl. Lý tưởng nhất là bạn KHÔNG muốn tải xuống mọi video trong danh sách phát mặc định mà chỉ là siêu dữ liệu.

Ví dụ (cảnh báo - mất hàng chục phút):

import youtube_dl, pickle

             # UCVTyTA7-g9nopHeHbeuvpRA is the channel id (1517+ videos)
PLAYLIST_ID = 'UUVTyTA7-g9nopHeHbeuvpRA'  # Late Night with Seth Meyers

with youtube_dl.YoutubeDL({'ignoreerrors': True}) as ydl:

    playd = ydl.extract_info(PLAYLIST_ID, download=False)

    with open('playlist.pickle', 'wb') as f:
        pickle.dump(playd, f, pickle.HIGHEST_PROTOCOL)

    vids = [vid for vid in playd['entries'] if 'A Closer Look' in vid['title']]
    print(sum('Trump' in vid['title'] for vid in vids), '/', len(vids))

1
Tôi nghĩ rằng đây là câu trả lời tốt nhất vì nó không cần khóa API. Để làm cho nó tự động hơn nữa, bạn có thể sử dụng @for /f "usebackq tokens=2 delims=: " %a in (`dl-list.py^|findstr information`) do @echo https://www.youtube.com/watch?v=%a. Nó sẽ in tất cả các URL của video. PLAYLIST_IDcó thể là danh sách phát hoặc ID kênh.
cdlvcdlv

Bạn có thể suy ra nhưng tôi quên nói rằng tôi đã lưu mã dưới dạng dl-list.py.
cdlvcdlv

2

Sử dụng API phiên bản 2, không dùng nữa, URL để tải lên (của kênh UCqAEtEr0A0Eo2IVcuWBfB9g) là:

https://gdata.youtube.com/feed/users/UCqAEtEr0A0Eo2IVcuWBfB9g/uploads

Có phiên bản API 3.


Đối với UCqAEtEr0A0Eo2IVcuWBfB9g nó hoạt động, tôi nghĩ rằng điều này là do nó được tải lên bởi một người dùng. Làm thế nào về HC-8jgBP-4rlI
Rajendra Dewani

Không kiểm tra tin nhắn của tôi cho đến hôm nay. Bạn đúng. Chỉ dành cho một kênh người dùng.
Als

9
Liên kết đã chết.
dùng3078414

2

Gần đây tôi đã phải truy xuất tất cả các video từ một kênh và theo tài liệu dành cho nhà phát triển YouTube: https://developers.google.com/youtube/v3/docs/playlistItems/list

function playlistItemsListByPlaylistId($service, $part, $params) {
    $params = array_filter($params);
    $response = $service->playlistItems->listPlaylistItems(
        $part,
        $params
    );

    print_r($response);
}

playlistItemsListByPlaylistId($service,
    'snippet,contentDetails',
    array('maxResults' => 25, 'playlistId' => 'id of "uploads" playlist'));

Trong trường hợp $servicelà bạnGoogle_Service_YouTube đối tượng.

Vì vậy, bạn phải tìm nạp thông tin từ kênh để truy xuất danh sách phát "tải lên" thực sự có tất cả các video được kênh tải lên: https://developers.google.com/youtube/v3/docs/channels/list

Nếu mới với API này, tôi khuyên bạn nên chuyển mẫu mã từ đoạn mã mặc định sang mẫu đầy đủ.

Vì vậy, mã cơ bản để truy xuất tất cả các video từ một kênh có thể là:

class YouTube
{
    const       DEV_KEY = 'YOUR_DEVELOPPER_KEY';
    private     $client;
    private     $youtube;
    private     $lastChannel;

    public function __construct()
    {
        $this->client = new Google_Client();
        $this->client->setDeveloperKey(self::DEV_KEY);
        $this->youtube = new Google_Service_YouTube($this->client);
        $this->lastChannel = false;
    }

    public function getChannelInfoFromName($channel_name)
    {
        if ($this->lastChannel && $this->lastChannel['modelData']['items'][0]['snippet']['title'] == $channel_name)
        {
            return $this->lastChannel;
        }
        $this->lastChannel = $this->youtube->channels->listChannels('snippet, contentDetails, statistics', array(
            'forUsername' => $channel_name,
        ));
        return ($this->lastChannel);
    }

    public function getVideosFromChannelName($channel_name, $max_result = 5)
    {
        $this->getChannelInfoFromName($channel_name);
        $params = [
            'playlistId' => $this->lastChannel['modelData']['items'][0]['contentDetails']['relatedPlaylists']['uploads'],
            'maxResults'=> $max_result,
        ];
        return ($this->youtube->playlistItems->listPlaylistItems('snippet,contentDetails', $params));
    }
}

$yt = new YouTube();
echo '<pre>' . print_r($yt->getVideosFromChannelName('CHANNEL_NAME'), true) . '</pre>';

Điều này có nhận được tất cả các video có tiêu đề, URL của video, một hình ảnh xác định video, số lượt thích / bình luận không? Một số thông tin về cách xuất bản này sẽ hữu ích. Cảm ơn.
Khom Nazid

1

Giải pháp mẫu trong Python. Trợ giúp lấy từ video này: video Giống như nhiều câu trả lời khác, tải lên id trước tiên phải được lấy từ id kênh.

nhập khẩu urllib.request
nhập khẩu json

key = "Your_YOUTUBE_API_v3_BROWSER_KEY"

# Danh sách các kênh: đề cập nếu bạn đang dán id kênh hoặc tên người dùng - "id" hoặc "forUsername"
ytids = [["bbcnews", "forUsername"], ["UCjq4pjKj9X4W9i7UnYShpVg", "id"]]

tin mới = []
cho ytid, ytparam trong ytids:
    urld = "https://www.googleapis.com/youtube/v3/channels?part=contentDetails&"+ytparam+"="+ytid+"&key="+key
    với urllib.request.urlopen (urld) dưới dạng url:
        datad = json.loads (url.read ())
    uploadsdet = datad ['items']
    #get id tải lên từ id kênh
    uploadid = uploadsdet [0] ['contentDetails'] ['RelPlaylists'] ['uploads']

    danh sách #retrease
    urld = "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet%2CcontentDetails&maxResults=50&playlistId="+uploadid+"&key="+key
    với urllib.request.urlopen (urld) dưới dạng url:
        datad = json.loads (url.read ())

    cho dữ liệu trong datad ['items']:
        ntitle = dữ liệu ['đoạn trích'] ['title']
        nlink = data ['contentDetails'] ['videoId']
        newstitle.append ([nlink, ntitle])

cho liên kết, tiêu đề trong tin mới:
    in (liên kết, tiêu đề)

-2

Liên kết được tải xuống từ kênh youtube, không cấu trúc thư mục máy chủ. Vì vậy, tôi đã viết một mã để thực hiện điều đó. Sử dụng điều này một khi bạn tải xuống các video từ cách được chấp nhận ở trên. `

def play_vid(channel):
    yset = dict()
    temp = []
    link = channel + '/playlists'
    first = urlopen(link)
    bs = BeautifulSoup(first.read(), 'html.parser')
    for i in bs.find_all('a', {'class':'yt-uix-sessionlink yt-uix-tile-link spf-link yt-ui-ellipsis yt-ui-ellipsis-2'}):
        print('Creating list for the playlist: ', i.get_text())
        link = 'https://www.youtube.com'+i.get('href')
#         print(link)
        first = urlopen(link)
        bsp = BeautifulSoup(first.read(), 'html.parser')
        res=bsp.find_all('a',{'class':'pl-video-title-link'})
        for l in res:
            temp.append(l.get_text().replace(" ", "").strip())
        yset[i.get_text()]=temp
        temp=[]
    print("Done!!")
    return yset



checking = play_vid('https://www.youtube.com/user/NinjaTraderLLC')


'''for me /media/shivam/BIG/ninja is the folder where i've previously downloaded all the videos from channel'''    
downloaded = [file for file in os.listdir('/media/shivam/BIG/ninja/') if os.path.isfile('/media/shivam/BIG/ninja/'+file)]

hash_table = dict()
for i in downloaded:
    hash_table[i.replace(" ", "")] = i

for i in scraped.keys():

    if os.path.isdir('/media/shivam/BIG/ninja/'+ i):
        pass
    else:
        os.mkdir('/media/shivam/BIG/ninja/'+ i)
    minn = 1000
    mov = ""

    for j in scraped[i]:
        for k in hash_table.keys():
            if nltk.edit_distance(j, k) < minn:
                minn = nltk.edit_distance(j, k)
                mov = k
        minn = 1000
        print("Moving ",mov, "for  channel: ",j)
        shutil.copy('/media/shivam/BIG/ninja/'+ hash_table[mov], '/media/shivam/BIG/ninja/'+ i +'/'+hash_table[mov])

`


-6

Như tài liệu trạng thái ( liên kết ), bạn có thể sử dụng loại tài nguyên kênh và Danh sách hoạt động để nhận tất cả các video trong một kênh. Thao tác này phải được thực hiện bằng cách sử dụng đối số 'id kênh'.


22
Nói thì dễ, nhưng tại sao bạn không đặt câu trả lời của bạn với một ví dụ hay và hiệu quả ???
akshay
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.