web-dev-qa-db-ja.com

チャンネル上のすべての動画を取得するYouTube API

YouTubeのチャンネル名別のビデオリストが必要です(APIを使用)。

下記のAPIを使用してチャンネルリスト(チャンネル名のみ)を取得できます。

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

下記はチャンネルの直接リンクです

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

または

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

今、私たちはチャンネル>> UCqAEtEr0A0Eo2IVcuWBfB9gまたはHC-8jgBP-4rlIのビデオが必要です。

試してみました

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

しかし、それは役に立ちません。

チャンネルに投稿されたすべての動画が必要です。チャンネルにアップロードされた動画は複数のユーザーからのものである可能性があるため、ユーザーパラメータを指定しても意味がないと思います...

146
Rajendra Dewani

あなたは YouTube Data API を見る必要があります。 APIへのアクセス方法に関する文書があります。 クライアントライブラリ も見つけることができます。

あなたも自分で要求をすることができます。チャンネルから最新の動画を取得するURLの例を次に示します。

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

その後、動画のIDと詳細を含むJSONを受け取り、動画のURLを次のように作成できます。

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

まず、アップロードを表すプレイリストのIDをユーザー/チャンネルから取得する必要があります。

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

あなたはforUsername={username}パラメータでユーザ名を指定するか、あなた自身のものを取得するためにmine=trueを指定することができます(あなたは最初に認証する必要があります)。プレイリストを見るにはpart=contentDetailsを含めてください。

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

その結果、"relatedPlaylists"には"likes""uploads"のプレイリストが含まれます。その"upload"プレイリストIDをつかみます。また、"id"は将来の参照用のあなたのchannelIDです。

次に、そのプレイリスト内のビデオのリストを取得します。

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

PlaylistIdにドロップするだけ!

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

84
jambrose

これは YouTubeデベロッパのv3にあるチャンネル内のすべてのビデオを一覧表示する方法を示すGoogle Developersのビデオ.

2つのステップがあります。

  1. チャンネルを照会して「アップロード」IDを取得します。例:https://www.googleapis.com/youtube/v3/channels?id={channel Id}&key={API key}&part=contentDetails
  2. この「uploads」IDを使用してPlaylistItemsをクエリし、動画のリストを取得します。例:https://www.googleapis.com/youtube/v3/playlistItems?playlistId={"uploads" Id}&key={API key}&part=snippet&maxResults=50
52
virtualmic

チャンネルリストを取得するには:

forUserName :でチャンネルリストを取得します。

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

チャンネルIDでチャンネルリストを取得します

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

チャンネルセクションを取得:

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

プレイリストを取得するには:

でチャンネルリストを取得

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

取得 プレイリスト / pageTokenのチャンネルID

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

PlaylistItemを取得するには:

PlayListId :によってPlaylistItemsリストを取得します。

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

動画を取得するには:

video id :で動画リストを取得する

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

複数の動画IDで動画リストを取得する

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

コメント一覧を取得

動画ID :でコメント一覧を取得

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

チャンネルID :によるコメントリストの取得

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

allThreadsRelatedToChannelId :によるコメントリストの取得

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

ここにすべてのapiがあります 取得 アプローチ。

チャンネルIDに基づいて、すべての動画を直接取得するわけではないので、それがここで重要なポイントです。

統合のために https://developers.google.com/youtube/v3/quickstart/ios?ver=Swift

8
iOS

次のように試してみてください。それはあなたを助けるかもしれません。

https://gdata.youtube.com/feeds/api/videos?author=cnn&v=2&orderby=updated&alt=jsonc&q=news

あなたがあなたの検索キーワードを与えることができるようにあなたがあなたのチャンネル名と "q"を指定することができるように、ここで作者はWord。

7
Nagaraja

以下は特別なパッケージを必要としないPythonの代替手段です。チャンネルIDを指定すると、そのチャンネルのビデオリンクのリストが返されます。機能するためには API Key が必要です。

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
7
Stian

ちょうど3つのステップで:

  1. 登録:一覧 - > https://www.googleapis.com/youtube/v3/subscriptions?part=snippet&maxResults=50&mine=true&access_token= {oauth_token}

  2. チャンネル:リスト - > https://www.googleapis.com/youtube/v3/channels?part = contentDetails&id = {channel_id}&key = {あなたのAPI_KEY}

  3. PlaylistItems:list - > https://www.googleapis.com/youtube/v3/playlistItems?part= snippet&playlistId = {playlist_id}&key = {YOUR_API_KEY}

6
sacred

ここと他の場所で共有されている参照のおかげで、私は1つがチャンネルのすべてのビデオを入手するのに使用できるオンラインスクリプト/ツールを作りました。

それはyoutube.channels.listplaylistItemsvideosへのAPI呼び出しを結合します。これは再帰関数を使用して、有効な応答が得られたときに非同期コールバックが次の反復を実行するようにします。

これは同時に行われる実際のリクエスト数を制限するのにも役立つので、YouTubeのAPIルールに違反しないようにします。短縮されたスニペットを共有してから、完全なコードへのリンクを共有する。次の50件の結果を取得するなどの応答に含まれるnextPageToken値を使用することで、1回の呼び出しあたり50件の最大制限を回避できました。

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.
             }
    });
}

これにより、ID、タイトル、公開日などの基本的な動画のリストが得られました。しかし、ビュー数などの各ビデオの詳細を取得するには、videosへのAPI呼び出しを行う必要があります。

// 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.
            }
});

完全なコードはこちら 、および ライブバージョンはこちら を参照してください。 (編集:修正githubリンク)
編集:依存関係:JQuery、Papa.parse

5
Nikhil VJ

この質問に答える全員が500ビデオ制限のために問題を抱えているので、youtube_dlPython 3。また、APIキーは不要です

  1. Youtube_dlをインストールします:Sudo pip3 install youtube-dl
  2. ターゲットチャンネルのチャンネルIDを確認してください 。 IDはUCから始まります。チャンネルのCをアップロードのU(つまりUU ...)に置き換えます。これはアップロード再生リストです
  3. Youtube-dlのプレイリストダウンローダー機能を使用してください。理想的なのは、デフォルトであるプレイリスト内のすべてのビデオをダウンロードするのではなく、メタデータだけをダウンロードすることです。

例(警告 - 数十分かかります):

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))
3
xjcl

廃止予定のAPIバージョン2を使用すると、アップロード用のURL(チャネルUCqAEtEr0A0Eo2IVcuWBfB9g)は次のようになります。

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

APIバージョン3があります。

2
Als

これはあなたのチャンネルの下にあるすべての動画IDを返すコードです。

<?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);

:ログイン後、 https://www.youtube.com/account_advanced でチャンネルIDを取得できます。

2
Mihir Bhatt

最近、私はチャンネルからすべてのビデオを検索しなければなりませんでした、そして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'));

$serviceはあなたのGoogle_Service_YouTubeオブジェクトです。

そのため、チャンネルからすべての動画が実際にアップロードされた「アップロード」プレイリストを取得するには、チャンネルから情報を取得する必要があります。 https://developers.google.com/youtube/v3/docs/channels/list

このAPIが初めての場合は、コードサンプルをデフォルトのスニペットからフルサンプルに変更することを強くお勧めします。

そのため、チャンネルからすべての動画を取得するための基本コードは次のようになります。

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>';
1
Glastis

Pythonのサンプルソリューション。この動画から得たヘルプ: video 他の多くの回答と同様に、アップロードIDは最初にチャンネルIDから取得されます。

 import urllib.request 
 import json 
 
 key = "YOUR_YOUTUBE_API_v3_BROWSER_KEY" 
 
#あなたがそうであれば言及してください貼り付けチャネルIDまたはユーザー名 -  "id"または "forUsername" 
 ytids = [["bbcnews"、 "forUsername"]、["UCjq4pjKj9X4W9i7UnYShpVg"、 "id"]] 
 ] newstitles = [] [y]、ytiのytparamの場合:
 urld = "https://www.googleapis.com/youtube/v3/channels?part=contentDetails&"+ytparam+"=" urlib.request.urlopen(urld)をurlとした+ ytid + "&key =" + key 
 datad = json.loads(url.read())
 uploadsdet = datad ['items'] 
#チャンネルIDからアップロードIDを取得する
 uploadid = uploadsdet [0] ['contentDetails'] ['relatedPlaylists'] ['uploads'] 
 [。 #retrieve list 
 urld = "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet%2CcontentDetails&maxResults=50&playlistId="+uploadid+"&key="+key[.____ urlとしてurllib.request.urlopen(urld)を使用:
 datad = json datad ['items']内のデータの.loads(url.read())
:
 ntitle = data ['snippet'] ['title'] 
 nlink = data ['contentDetails'] ['videoId'] 
 newstitles.append([nlink、ntitle])
 
リンクの場合、
 newstitlesのタイトル:
印刷(リンク、タイトル)
1
Ananth

YouTubeチャンネルからダウンロードしたリンクは、ディレクトリ構造を保持しません。それで、それを実現するためのコードを書きました。上記の方法で動画をダウンロードしたら、これを使用してください。 `

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])

`

0
shivam13juna