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
しかし、それは役に立ちません。
チャンネルに投稿されたすべての動画が必要です。チャンネルにアップロードされた動画は複数のユーザーからのものである可能性があるため、ユーザーパラメータを指定しても意味がないと思います...
あなたは 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}
まず、アップロードを表すプレイリストの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}
これは YouTubeデベロッパのv3
にあるチャンネル内のすべてのビデオを一覧表示する方法を示すGoogle Developersのビデオ.
2つのステップがあります。
https://www.googleapis.com/youtube/v3/channels?id={channel Id}&key={API key}&part=contentDetails
https://www.googleapis.com/youtube/v3/playlistItems?playlistId={"uploads" Id}&key={API key}&part=snippet&maxResults=50
チャンネルリストを取得するには:
forUserName :でチャンネルリストを取得します。
チャンネルIDでチャンネルリストを取得します :
チャンネルセクションを取得:
プレイリストを取得するには:
でチャンネルリストを取得 :
取得 プレイリスト / 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リストを取得します。
動画を取得するには:
video id :で動画リストを取得する
複数の動画IDで動画リストを取得する :
コメント一覧を取得
動画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
次のように試してみてください。それはあなたを助けるかもしれません。
https://gdata.youtube.com/feeds/api/videos?author=cnn&v=2&orderby=updated&alt=jsonc&q=news
あなたがあなたの検索キーワードを与えることができるようにあなたがあなたのチャンネル名と "q"を指定することができるように、ここで作者はWord。
以下は特別なパッケージを必要としない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
ちょうど3つのステップで:
登録:一覧 - > https://www.googleapis.com/youtube/v3/subscriptions?part=snippet&maxResults=50&mine=true&access_token= {oauth_token}
チャンネル:リスト - > https://www.googleapis.com/youtube/v3/channels?part = contentDetails&id = {channel_id}&key = {あなたのAPI_KEY}
PlaylistItems:list - > https://www.googleapis.com/youtube/v3/playlistItems?part= snippet&playlistId = {playlist_id}&key = {YOUR_API_KEY}
ここと他の場所で共有されている参照のおかげで、私は1つがチャンネルのすべてのビデオを入手するのに使用できるオンラインスクリプト/ツールを作りました。
それはyoutube.channels.list
、playlistItems
、videos
への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
この質問に答える全員が500ビデオ制限のために問題を抱えているので、youtube_dlPython 3。また、APIキーは不要です。
Sudo pip3 install 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))
廃止予定のAPIバージョン2を使用すると、アップロード用のURL(チャネルUCqAEtEr0A0Eo2IVcuWBfB9g)は次のようになります。
https://gdata.youtube.com/feeds/users/UCqAEtEr0A0Eo2IVcuWBfB9g/uploads
APIバージョン3があります。
これはあなたのチャンネルの下にあるすべての動画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を取得できます。
最近、私はチャンネルからすべてのビデオを検索しなければなりませんでした、そして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>';
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のタイトル: 印刷(リンク、タイトル)
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])
`