YouTube API เพื่อดึงวิดีโอทั้งหมดในช่อง


201

เราต้องการรายชื่อวิดีโอตามชื่อช่องของ 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=UC7Xayrf2k0NZiz3S04WuDNQ https://gdata.youtube.com/feeds/api/videos?v=2&uploader=part&&q=UCXayrf2kNZZZZNNZZ

แต่มันก็ไม่ได้ช่วยอะไร

เราต้องการวิดีโอทั้งหมดที่โพสต์บนช่อง วิดีโอที่อัปโหลดไปยังช่องสามารถมาจากผู้ใช้หลายคนดังนั้นฉันไม่คิดว่าการระบุพารามิเตอร์ผู้ใช้จะช่วย ...


ฉันสามารถเข้าถึงไฟล์วิดีโอของตัวเองได้ไหม เพื่อดาวน์โหลดเนื้อหาของตัวเองเมื่อลงชื่อเข้าใช้ผ่านทาง API !!!
filthy_wizard

คำตอบ:


218

คุณจำเป็นต้องมองไปที่API ข้อมูลของ YouTube คุณจะพบว่ามีเอกสารเกี่ยวกับวิธีการเข้าถึง API นอกจากนี้คุณยังสามารถหาห้องสมุดลูกค้า

คุณสามารถส่งคำขอด้วยตัวเอง นี่คือตัวอย่าง URL ที่ดึงวิดีโอล่าสุดจากช่อง:

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

หลังจากนั้นคุณจะได้รับJSONรหัสวิดีโอพร้อมรายละเอียดและคุณสามารถสร้าง URL วิดีโอของคุณดังนี้:

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

29
การดำเนินการนี้จะส่งคืนวิดีโอแรกเท่านั้นmaxResults=20(ไม่เกิน 50 รายการ) แต่ไม่ใช่เฉพาะแคตตาล็อกช่องทั้งหมด หากคุณต้องการผลการค้นหาเพิ่มเติมใช้ pageToken ตามที่อธิบายไว้ที่นี่
Fábio Perez

2
Romulus Urakagi Ts'ai: ในขณะที่ร้องขอวิดีโอที่คุณกำลังให้ channelId นั่นคือตัวกรองสำหรับช่อง
akshay

11
น่าสังเกตว่าคุณสามารถรับได้สูงสุด 500 วิดีโอจากช่องโดยใช้โทเค็นหน้าถัดไป
Tony Paternite

3
@TonyPaternite ฉันจะรับวิดีโอมากกว่า 500 รายการได้อย่างไร ฉันกำลังประสบปัญหานี้
ราชา

3
อธิบายปัญหาได้ดีที่นี่ code.google.com/p/gdata-issues/issues/detail?id=4282 การลองด้วยช่วงวันที่ที่แตกต่างกันเป็นวิธีหนึ่งในการรับวิดีโอเพิ่มเติมที่ดูเหมือนว่า
ราชา

120

ก่อนอื่นคุณต้องได้รับ 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

เพียงวางในเพลย์ลิสต์ ID!

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


1
ไม่ใช่ทุกคนที่มีชื่อผู้ใช้ youtube ในโลกใหม่นี้ บางคนมีหมายเลขรหัสผู้ใช้ google + เท่านั้นซึ่งไม่สามารถใช้แทนชื่อผู้ใช้ youtube ได้
kristopolous

1
@kristopolous ทุกช่อง YouTube มี ID ช่อง หากคุณไปที่หน้า YouTube ผ่านทาง Google Plus ก็จะใช้รหัส Google plus กับผู้ใช้เป็นลิงก์ไปยังช่อง หากคุณไปที่ช่องจากวิดีโอ YouTube ก็จะใช้คุณสมบัติ ID ช่องของ YouTube แทน
Ignat

19
มันสมบูรณ์แบบ โดยเฉพาะอย่างยิ่งเพราะใช้เวลาเพียง 2 โควต้าแทน 100 (การโทรที่ใช้ค้นหา )
JP de la Torre

1
บางครั้งก็ใช้งานได้ ( developers.google.com/youtube/v3/docs/playlistItems/list#try-it ) บางครั้งมันจะส่ง 404 สำหรับการอัพโหลดเดียวกันไม่ทราบว่าเกิดอะไรขึ้น
ishandutta2007

1
@jambrose ใน playlistItems endpoint วิธีการใช้พารามิเตอร์ช่วงวันที่บางอย่างเช่น publishAfter / PublishedBefore ฉันลองแล้วไม่ทำงานดังนั้นฉันจะดึงวิดีโอทั้งหมดของช่องได้อย่างไร
Sachdev รุนแรง

80

นี่คือวิดีโอจากนักพัฒนาของ Google ที่แสดงวิธีการแสดงรายการวิดีโอทั้งหมดในช่องในv3YouTube API

มีสองขั้นตอน:

  1. ค้นหาช่องเพื่อรับรหัส "อัปโหลด" เช่นhttps://www.googleapis.com/youtube/v3/channels?id={channel Id}&key={API key}&part=contentDetails

  2. ใช้รหัส "อัปโหลด" นี้เพื่อค้นหารายการเพลย์ลิสต์เพื่อรับรายการวิดีโอ เช่นhttps://www.googleapis.com/youtube/v3/playlistItems?playlistId={"uploads" Id}&key={API key}&part=snippet&maxResults=50


1
รหัส "อัปโหลด" สามารถเปลี่ยนสำหรับช่องที่กำหนดได้หรือไม่
ishandutta2007

ดูเหมือนว่าการอัปโหลดจะเหมือนกับ channelId แต่ API ที่ไม่สอดคล้องกันมากสามารถตอบstackoverflow.com/questions/43568521//
ishandutta2007

1
@ ishandutta2007 ไม่มีรหัสการอัปโหลดแตกต่างจากรหัสช่อง
vicke4

@ virtualmic @ Peter Perfect Solution คนขอบคุณ
Aaska Patel

มันทำงานได้ดี แต่ฉันมีรหัสช่องสัญญาณหลายช่องดังนั้นฉันจะส่งพวกเขาไปยัง api ได้อย่างไรฉันสามารถใช้รหัสช่องสัญญาณคั่นด้วยจุลภาคได้อย่างไร
Onkar Musale

32

ในการรับรายการช่อง:

ได้รับรายชื่อช่องโดยforUserName :

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

รับรายการช่องตามรหัสช่อง :

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=

รับเพลย์ลิสต์ด้วยID ช่องทางพร้อมหน้าโทเค็น :

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

ในการรับ PlaylistItems:

รับรายการเล่นรายการจากPlayListId :

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

ในการรับวิดีโอ:

รับรายการวิดีโอตามรหัสวิดีโอ :

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

รับรายการวิดีโอด้วยรหัสวิดีโอหลายรายการ :

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

รับรายการความคิดเห็น

รับรายการความคิดเห็นด้วยรหัสวิดีโอ :

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=U ***** Q & key = AI ******** k

รับรายการความคิดเห็นโดยallThreadsRelatedToChannelId :

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

นี่ API ทั้งหมดเป็นรับวิธีการ

ตามรหัสช่องเราไม่ได้รับวิดีโอทั้งหมดโดยตรงนั่นคือจุดสำคัญที่นี่

สำหรับการรวมhttps://developers.google.com/youtube/v3/quickstart/ios?ver=swift


ฉันจะส่งรหัสหลายช่องทางไปยัง API ได้อย่างไรฉันสามารถใช้รหัสช่องที่คั่นด้วยจุลภาคได้หรือไม่
Onkar Musale

ฉันจะรับช่อง YouTube ยอดนิยม 10/50/100 โดยใช้ API ได้อย่างไร
Rajeshwar

10

ด้านล่างเป็นทางเลือก Python ที่ไม่ต้องการแพ็คเกจพิเศษใด ๆ ด้วยการระบุรหัสช่องจะส่งคืนรายการลิงก์วิดีโอสำหรับช่องนั้น โปรดทราบว่าคุณต้องการคีย์ APIเพื่อให้ทำงานได้

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

มันทำงานอย่างไร ฉันแปะรหัส API โดยใช้เครื่องหมายอัญประกาศเดี่ยว '' ลงในตัวแปร api_key จากนั้นฉันเรียกว่าฟังก์ชั่นที่ส่งผ่านช่องสัญญาณ id จากนั้นรันโปรแกรมไพ ธ อน แต่ไม่มีอะไรเกิดขึ้น
Joffrey Baratheon

@JoffreyBaratheon ฟังก์ชั่นส่งกลับอาร์เรย์คุณต้องมีที่ตัวแปร ตัวอย่างเช่นvideo_list = get_all_video_in_channel("ABC123EFG456")จากนั้นคุณสามารถพิมพ์เพื่อดูอาร์เรย์โดยใช้print(video_list)
phapha pha

7

นี่คือรหัสที่จะคืนรหัสวิดีโอทั้งหมดภายใต้ช่องของคุณ

<?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หลังจากลงชื่อเข้าใช้


1
อันนี้เป็นทางออกที่สะอาดแน่นอนที่ทำงาน ปัจจุบันใช้ในการผลิต
Codex73

7

ลองด้วยวิธีดังต่อไปนี้ มันอาจช่วยคุณได้

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

นี่คือผู้แต่งที่คุณสามารถระบุชื่อช่องและ "q" ในขณะที่คุณสามารถระบุคำสำคัญในการค้นหาของคุณ


เอกสารสำหรับ API นั้นอยู่ที่ไหน
Macabeus

1
API นี้ไม่สามารถใช้งานได้อีกต่อไป: "YouTube Data API (v2) ได้เลิกใช้งานอย่างเป็นทางการตั้งแต่วันที่ 4 มีนาคม 2014"
Bruce van der Kooij

7

เพียงสามขั้นตอน:

  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 = {YOUR_API_KEY}

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


6

ขอบคุณการอ้างอิงที่แชร์ที่นี่และที่อื่น ๆ ฉันได้สร้างสคริปต์ / เครื่องมือออนไลน์ที่สามารถใช้เพื่อรับวิดีโอทั้งหมดของช่อง

มันรวมสาย API เพื่อyoutube.channels.list, playlistItems,videos ,มันใช้ฟังก์ชั่นวนซ้ำเพื่อให้การเรียกกลับแบบอะซิงโครนัสรันการวนซ้ำครั้งต่อไปเมื่อได้รับการตอบสนองที่ถูกต้อง

นอกจากนี้ยังให้บริการเพื่อ จำกัด จำนวนคำขอที่เกิดขึ้นจริงในแต่ละครั้งดังนั้นคุณจึงปลอดภัยจากการละเมิดกฎ YouTube API การแชร์ตัวอย่างสั้น ๆ แล้วเชื่อมโยงไปยังรหัสเต็ม ฉันได้ผลลัพธ์มากถึง 50 ข้อ จำกัด ต่อการโทรโดยใช้ค่า nextPageToken ที่มาในการตอบสนองเพื่อดึงผลลัพธ์ 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.
             }
    });
}

นี่เป็นรายการวิดีโอขั้นพื้นฐานรวมถึงรหัสชื่อวันที่เผยแพร่และที่คล้ายกัน แต่เพื่อให้ได้รายละเอียดเพิ่มเติมของวิดีโอเช่นจำนวนการดูและชอบแต่ละคนมีการโทร 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.
            }
});

ดูรหัสเต็มได้ที่นี่และรุ่นที่อยู่ที่นี่ (แก้ไข: ลิงก์
gitub แบบคงที่) แก้ไข: การอ้างอิง: JQuery, Papa.parse


1
คุณแน่ใจหรือว่าใช้งานได้ หน้า GitHub หายไปแล้วเมื่อฉันป้อนรหัส API และรหัสช่องลงในช่องฉันได้รับข้อผิดพลาด
Joffrey Baratheon

@JoffreyBaratheon ขอบคุณที่ชี้ให้เห็นลิงค์ git ที่ขาด ฉันแค่วิ่งมัน .. มันใช้งานได้ การรับ ID เพลย์ลิสต์นั้นเป็นเรื่องยาก .. โปรดดูที่: github.com/answerquest/answerquest.github.io/issues/2
Nikhil VJ

งานที่ดี. ทำงานได้เป็นอย่างดีกับลิงค์ GitHub ที่ปรับปรุงแล้ว คุณจะต้อง jquery และ papaparse.min.js
Bludau Media

@thE_iNviNciblE ขอบคุณที่นำมาใช้ ทำเอ่ยถึงมัน
Nikhil VJ

@ nikhil-vj ไม่สามารถใช้ได้กับ szenario ในโลกแห่งความจริงคุณไม่ควรให้เบราว์เซอร์ไคลเอ็นต์ youtube API-Token แต่สำหรับการเขียนโปรแกรมการศึกษาค่อนข้างดี :-)
Bludau Media

4

เนื่องจากทุกคนตอบคำถามนี้มีปัญหาเนื่องจากการขีด จำกัด 500 วิดีโอนี่เป็นวิธีการแก้ปัญหาโดยใช้สลับyoutube_dlในหลาม 3 ยังไม่มีคีย์ API เป็นสิ่งจำเป็น

  1. ติดตั้ง youtube_dl: sudo pip3 install youtube-dl
  2. ค้นหารหัสช่องของช่องเป้าหมายของคุณ 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))

1
ฉันคิดว่านี่เป็นคำตอบที่ดีที่สุดเพราะไม่จำเป็นต้องใช้คีย์ API @for /f "usebackq tokens=2 delims=: " %a in (`dl-list.py^|findstr information`) do @echo https://www.youtube.com/watch?v=%aที่จะทำให้มันมากยิ่งขึ้นโดยอัตโนมัติคุณสามารถใช้ มันจะพิมพ์ URL ทั้งหมดของวิดีโอ PLAYLIST_IDสามารถเป็นเพลย์ลิสต์หรือ ID ช่อง
cdlvcdlv

คุณสามารถอนุมานได้ dl-list.pyแต่ฉันลืมที่จะบอกว่าฉันบันทึกรหัสเป็น
cdlvcdlv

2

การใช้ API เวอร์ชัน 2 ซึ่งเลิกใช้แล้ว URL สำหรับการอัปโหลด (ของช่อง UCqAEtEr0A0Eo2IVcuWBfB9g) คือ:

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

มี API เวอร์ชัน 3 อยู่


สำหรับ UCqAEtEr0A0Eo2IVcuWBfB9g มันใช้งานได้ฉันคิดว่านี่เป็นเพราะมันอัพโหลดโดยผู้ใช้คนเดียว วิธีการเกี่ยวกับ HC-8jgBP-4rlI
Rajendra Dewani

ไม่ได้ตรวจสอบข้อความของฉันจนถึงวันนี้ คุณถูก. สำหรับช่องผู้ใช้เท่านั้น
Als

9
ลิงก์ตาย
user3078414

2

เมื่อเร็ว ๆ นี้ฉันต้องดึงวิดีโอทั้งหมดจากช่องและตามเอกสารของนักพัฒนา 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>';

สิ่งนี้ได้วิดีโอทั้งหมดที่มีชื่อ, URL ของวิดีโอ, รูปภาพที่ระบุวิดีโอ, จำนวนไลค์ / ความคิดเห็นหรือไม่? ข้อมูลบางอย่างเกี่ยวกับวิธีการเผยแพร่นี้จะเป็นประโยชน์ ขอบคุณ
Khom Nazid

1

ตัวอย่างโซลูชันใน Python ความช่วยเหลือจากวิดีโอนี้: วิดีโอ เช่นเดียวกับคำตอบอื่น ๆ คุณจะต้องดึงรหัสการอัปโหลดจากรหัสช่องก่อน

นำเข้า urllib.request
นำเข้า json

key = "YOUR_YOUTUBE_API_v3_BROWSER_KEY"

# รายการช่อง: พูดถึงว่าคุณกำลังวางรหัสช่องหรือชื่อผู้ใช้ - "id" หรือ "forUsername"
ytids = [["bbcnews", "forUsername"], ["UCjq4pjKj9X4W9i7UnYShpVg", "id"]]

newstitles = []
สำหรับ ytid, ytparam ใน ytids:
    urld = "https://www.googleapis.com/youtube/v3/channels?part=contentDetails&"+ytparam+"="+ytid+"&key="+key
    กับ urllib.request.urlopen (urld) เป็น url:
        datad = json.loads (url.read ())
    uploadsdet = datad ['items']
    #get อัปโหลด 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&hl=th
    กับ urllib.request.urlopen (urld) เป็น url:
        datad = json.loads (url.read ())

    สำหรับข้อมูลใน datad ['items']:
        ntitle = data ['snippet'] ['title']
        nlink = data ['contentDetails'] ['videoId']
        newstitles.append ([nlink, ntitle])

สำหรับลิงค์ชื่อในสารบัญ:
    พิมพ์ (ลิงค์ชื่อเรื่อง)

-6

ในฐานะที่เป็นเอกสารประกอบของรัฐ ( ลิงก์ ) คุณสามารถใช้ประเภททรัพยากรช่องสัญญาณและรายการการดำเนินการเพื่อรับวิดีโอทั้งหมดในช่อง การดำเนินการนี้จะต้องดำเนินการโดยใช้อาร์กิวเมนต์ 'รหัสช่อง'


22
พูดง่าย แต่ทำไมคุณถึงไม่ตอบคำถามด้วยตัวอย่างที่ดีและใช้งานได้
akshay
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.