YouTube API एक चैनल पर सभी वीडियो लाने के लिए


198

हमें YouTube के चैनल नाम (एपीआई का उपयोग करके) एक वीडियो सूची की आवश्यकता है।

हम नीचे एपीआई का उपयोग करके एक चैनल सूची (केवल चैनल नाम) प्राप्त कर सकते हैं:

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.boutube.com/feeds/api/videos?v=2&uploader=part=&7=rxr2rr2

लेकिन, यह मदद नहीं करता है।

हमें चैनल पर पोस्ट किए गए सभी वीडियो चाहिए। एक चैनल पर अपलोड किए गए वीडियो कई उपयोगकर्ताओं से हो सकते हैं, इसलिए मुझे नहीं लगता कि उपयोगकर्ता पैरामीटर प्रदान करने में मदद मिलेगी ...


क्या मुझे अपनी वीडियो फ़ाइलों तक पहुँच मिल सकती है जब एपीआई के माध्यम से लॉग इन करने के लिए अनिवार्य रूप से मेरी खुद की सामग्री डाउनलोड करने के लिए !!!
गंदी_विशाल

जवाबों:


215

आपको 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 तक) वीडियो लौटाएगा , लेकिन पूरे चैनल कैटलॉग में नहीं। यदि आप अधिक परिणाम चाहते हैं, तो यहां दिए गए पृष्ठटन का उपयोग करें
फैबियो पेरेज़

2
Romulus Urakagi Ts'ai: वीडियो का अनुरोध करते समय आप चैनल दे रहे हैं, वह है चैनल के लिए फ़िल्टर।
अक्षय

11
वर्थ नोटिंग आप केवल अगले पृष्ठ टोकन का उपयोग करके एक चैनल से 500 वीडियो तक प्राप्त कर सकते हैं।
टोनी पैटर्नाइट

3
@TonyPaternite मुझे 500 से अधिक वीडियो कैसे प्राप्त होंगे मैं वर्तमान में इस मुद्दे का सामना कर रहा हूं।
राजा

3
मुद्दे को यहाँ अच्छी तरह से समझाया गया है। code.google.com/p/gdata-issues/issues/detail?id=4282 तारीखों की एक अलग श्रेणी के साथ कोशिश करना एक ऐसा तरीका है जिससे अधिक वीडियो प्राप्त होते हैं।
राजा

119

सबसे पहले, आपको उस प्लेलिस्ट की आईडी प्राप्त करनी होगी जो उपयोगकर्ता / चैनल से अपलोड का प्रतिनिधित्व करती है:

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"भविष्य के संदर्भ के लिए अपने चैनल को ।

इसके बाद, उस प्लेलिस्ट में वीडियो की एक सूची प्राप्त करें:

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

बस प्लेलिस्ट में ड्रॉप!

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 है। यदि आप Google प्लस के माध्यम से YouTube पृष्ठ पर जाते हैं, तो यह चैनल के लिंक के रूप में Google प्लस उपयोगकर्ता आईडी का उपयोग करता है। यदि आप YouTube वीडियो से चैनल पर गए हैं, तो यह YouTube के चैनल आईडी प्रॉपर्टी का उपयोग करता है।
इग्नाट

19
यह पूर्ण है। विशेष रूप से क्योंकि यह 100 के बजाय केवल 2 कोटा अंक खर्च करता है (जो खोज कॉल खर्च करेगा)।
जेपी डी ला टोरे

1
कई बार यह ( Developers.google.com/youtube/v3/docs/playlistItems/list#try-it ) काम करता है, कभी-कभी यह एक ही अपलोडआईड के लिए 404 फेंकता है, पता नहीं क्या चल रहा है।
ishandutta2007

1
प्लेलिस्ट में @jambrose। यह इंगित करता है कि कैसे कुछ तिथि सीमा पैरामीटर का उपयोग करना है जैसे publishAfter / publishBefore। मैंने यह कोशिश की, काम नहीं कर रहा हूं तो मैं एक चैनल के सभी वीडियो कैसे लाऊंगा।
हर्ष साचदेव

79

यहां Google डेवलपर्स का एक वीडियो है जिसमें दिखाया गया है कि किसी चैनल के सभी वीडियो को कैसे सूचीबद्ध किया जाएv3 , जो YouTube API के है।

दो चरण हैं:

  1. "अपलोड" आईडी प्राप्त करने के लिए क्वेरी चैनल। जैसेhttps://www.googleapis.com/youtube/v3/channels?id={channel Id}&key={API key}&part=contentDetails

  2. वीडियो की सूची प्राप्त करने के लिए PlaylistItems को क्वेरी करने के लिए इस "अपलोड" आईडी का उपयोग करें। जैसेhttps://www.googleapis.com/youtube/v3/playlistItems?playlistId={"uploads" Id}&key={API key}&part=snippet&maxResults=50


1
क्या किसी दिए गए चैनल के लिए "अपलोड" आईडी बदल सकता है?
ishandutta2007

लगता है कि uploads चैनलआईड के समान ही हैं, लेकिन बहुत ही असंगत APIs, कुछ इस जवाब दे सकते हैं stackoverflow.com/questions/43568521/…
ishandutta2007

1
@ ishandutta2007 कोई अपलोड आईडी चैनल आईडी से अलग नहीं है।
vicke4

@ virtualmic @ पीटर परफेक्ट सॉल्यूशन दोस्तों, धन्यवाद
आसका पटेल

यह ठीक काम कर रहा है। लेकिन मेरे पास कई चैनल आईडी हैं, इसलिए मैं उन्हें एपीआई कैसे भेज सकता हूं, क्या मैं कॉमा सेपरेटेड चैनल आईडी का उपयोग कर सकता हूं
ओंकार मुसले

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=

पेजलोक के साथ चैनल आईडी द्वारा प्लेलिस्ट प्राप्त करें :

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

प्लेलिस्ट पाने के लिए:

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

चैनल आईडी द्वारा टिप्पणी सूची प्राप्त करें :

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 k

सभी एपीआई यहां प्राप्त करें एप्रोच हैं।

चैनल आईडी के आधार पर हमें सीधे सभी वीडियो नहीं मिलेंगे, यह महत्वपूर्ण बिंदु है।

एकीकरण के लिए https://developers.google.com/youtube/v3/quickstart/ios?ver=swift


मैं कई चैनल आईडी को एपीआई कैसे भेज सकता हूं, क्या मैं कॉमा से अलग किए गए चैनल आईडी का उपयोग कर सकता हूं
ओंकार मुसले

मैं एपीआई का उपयोग करके शीर्ष 10/50/100 यूट्यूब चैनल कैसे प्राप्त कर सकता हूं?
राजेश्वर

10

नीचे एक पायथन विकल्प है जिसे किसी विशेष पैकेज की आवश्यकता नहीं है। चैनल आईडी प्रदान करके यह उस चैनल के लिए वीडियो लिंक की एक सूची देता है। कृपया ध्यान दें कि काम करने के लिए आपको एक एपीआई कुंजी की आवश्यकता है ।

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

यह कैसे काम करता है? मैंने एपीआई_की चर में एकल उद्धरणों का उपयोग करके एपीआई कुंजी को चिपकाया, फिर मैंने फ़ंक्शन को चैनल आईडी में पास किया, फिर अजगर कार्यक्रम चलाया।
जोफ्रे बाराथियॉन

@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
यह निश्चित रूप से एक साफ समाधान है जो काम करता है। वर्तमान में उत्पादन में उपयोग कर रहा है।
कोडेक्स 73

7

निम्नलिखित की तरह के साथ प्रयास करें। यह आपकी मदद कर सकता है।

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

यहां लेखक के रूप में आप अपने चैनल का नाम और "क्ष" निर्दिष्ट कर सकते हैं क्योंकि आप अपना खोज कुंजी शब्द दे सकते हैं।


उस एपीआई के लिए दस्तावेज कहां है?
मकाबस

1
यह API अब उपलब्ध नहीं है: "YouTube डेटा API (v2) को आधिकारिक रूप से 4 मार्च, 2014 तक हटा दिया गया है"
ब्रूस वैन डेर कूइज

7

बस तीन चरणों में:

  1. सदस्यता: सूची -> https://www.googleapis.com/youtube/v3/subslass?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. प्लेलिस्ट सूची: सूची -> 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.
            }
});

देखें पूर्ण कोड यहां , और यहां लाइव संस्करण । (संपादित करें: फिक्स्ड जीथब लिंक)
संपादित करें: निर्भरताएँ: JQuery, Papa.parse


1
क्या आप सुनिश्चित हैं कि यह काम करता है? GitHub पृष्ठ चला गया है और फिर जब मैं API कुंजी और फ़ील्ड में चैनल आईडी इनपुट करता हूं, तो मुझे त्रुटियां मिलती हैं।
जोफ्री बाराथियॉन

@JoffreyBaratheon ने टूटे हुए गीथब लिंक को इंगित करने के लिए धन्यवाद दिया। मैंने बस इसे चलाया .. यह काम करता है। उस प्लेलिस्ट आईडी को प्राप्त करना मुश्किल है .. pls इसे देखें: github.com/answerquest/answerquest.github.io/issues/2
Nikhil VJ

अच्छी नौकरी। अपडेट किए गए गिटब लिंक के साथ बहुत अच्छी तरह से काम करता है। आपको jquery और papaparse.min.js की आवश्यकता होगी
Bludau Media

@thE_iNviNciblE कि ऊपर लाने के लिए धन्यवाद। इसका जिक्र किया।
निखिल वीजे

@ nikhil-vj यह एक वास्तविक दुनिया szenario के लिए उपयोग करने योग्य नहीं है, आपको क्लाइंट ब्राउज़र को यूट्यूब एपीआई-टोकन नहीं देना चाहिए। लेकिन प्रोग्रामिंग शिक्षा के लिए काफी अच्छा काम :-)
बुदलाऊ मीडिया

4

चूँकि इस प्रश्न का उत्तर देने वाले सभी को 500 वीडियो सीमा के कारण समस्याएँ हैं , इसलिए Python 3 में youtube_dl का उपयोग करते हुए एक वैकल्पिक समाधान है । इसके अलावा, कोई एपीआई कुंजी की जरूरत नहीं है

  1. Youtube_dl स्थापित करें: sudo pip3 install youtube-dl
  2. अपने लक्ष्य चैनल के चैनल आईडी का पता लगाएं । आईडी की शुरुआत यूसी से होने जा रही है। चैनल के लिए 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
मुझे लगता है कि यह सबसे अच्छा जवाब है क्योंकि इसके लिए एपीआई कुंजी की आवश्यकता नहीं है। इसे और भी अधिक स्वचालित बनाने के लिए आप इसका उपयोग कर सकते हैं @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एक प्लेलिस्ट या चैनल आईडी हो सकती है।
cdlvcdlv

आप इसका अनुमान लगा सकते हैं लेकिन मैं यह कहना भूल गया कि मैंने कोड को सहेज लिया है dl-list.py
cdlvcdlv

2

एपीआई संस्करण 2 का उपयोग करना, जो कि पदावनत है, अपलोड का URL (चैनल UCqAEtEr0A0Eo2IVcuWBfB9g का है):

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

एक एपीआई संस्करण 3 है।


UCqAEtEr0A0Eo2IVcuWBfB9g के लिए यह काम करता है, मुझे लगता है कि इसका कारण एक एकल उपयोगकर्ता द्वारा अपलोड किया गया है। कैसे के बारे में HC-8jgBP-4rlI
राजेंद्र दीवानी

आज तक मेरे संदेशों की जाँच नहीं की। आप सही हे। केवल एक उपयोगकर्ता चैनल के लिए।
एल्स

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, वीडियो की पहचान करने वाली छवि, पसंद / टिप्पणियों की संख्या प्राप्त करता है? यह प्रकाशन कैसे उपयोगी होगा, इसके बारे में कुछ जानकारी। धन्यवाद।
खोम नाज़िद

1

पायथन में नमूना समाधान । इस वीडियो से ली गई सहायता: वीडियो कई अन्य उत्तरों की तरह, अपलोड आईडी को पहले चैनल आईडी से प्राप्त किया जाना है।

आयात urllib.request
आयात json

कुंजी = "your_YOUTUBE_API_v3_BROWSER_KEY"

# चैनलों की सूची: उल्लेख करें कि क्या आप चैनल आईडी या उपयोगकर्ता नाम चिपका रहे हैं - "आईडी" या "forUsername"
ytids = [["bbcnews", "forUsername"], ["UCjq4pjKj9X4W9i7UnYShpVg", "id"]]

newstmarks = []
ytid के लिए, ytparam में ytids:
    urld = "https://www.googleapis.com/youtube/v3/channels?part=contentDetails&"+ytparam+"="+ytid+"&key="+key
    urlib.request.urlopen (urld) के साथ url:
        दातद = json.loads (url.read ())
    अपलोडसडेट = डेटाड ['आइटम]
    ● चैनल आईडी से आईडी भूल जाइए
    अपलोडीड = अपलोडडसेट [0] ['सामग्रीडाइट्स]] [' संबंधितप्लेलिस्ट्स]] ['सामग्री']]

    # सूची प्राप्त करें
    urld = "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet%2CcontentDetails&maxResults=50&playlistId="+uploadid+"&="="+key
    urlib.request.urlopen (urld) के साथ url:
        दातद = json.loads (url.read ())

    डेटाड में डेटा के लिए ['आइटम']:
        ntitle = डेटा ['स्निपेट'] ['शीर्षक']
        nlink = डेटा ['contentDetails'] ['videoId']
        newstitles.append ([nlink, ntitle])

लिंक के लिए, newstield में शीर्षक:
    प्रिंट (लिंक, शीर्षक)

-2

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

`


-6

प्रलेखन राज्यों ( लिंक ) के रूप में, आप चैनल में सभी वीडियो प्राप्त करने के लिए चैनल संसाधन प्रकार और ऑपरेशन सूची का उपयोग कर सकते हैं। इस ऑपरेशन को 'चैनल आईडी' तर्क का उपयोग करके किया जाना चाहिए।


22
यह कहना आसान है, लेकिन आपने अपना जवाब अच्छे और काम के उदाहरण के साथ क्यों नहीं दिया ???
अक्षय
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.