2013-10-01 16 views
6

मैं google-api-client (0.6.4) रूबी मणि के माध्यम से OAuth2 for authentication साथ YouTube API v3 का उपयोग कर update और delete वीडियो के लिए कोशिश कर रहा हूँ के साथ विफल। ,update और delete के साथ के रूप में ठीक उसी प्रमाणीकरण प्रक्रिया का उपयोग कर सकते हैं मैं insert (:यूट्यूब API v3: अद्यतन और हटाना "अपर्याप्त अनुमति" त्रुटि

Google::APIClient::ClientError: Insufficient Permission 

यहाँ अजीब बात है: हालांकि, जब मैं इन दो कार्यों के लिए या तो अमल करने के लिए प्रयास करते हैं, मैं निम्नलिखित त्रुटि संदेश दिखाई अपलोड करें) सफलतापूर्वक, कोई समस्या नहीं! इसलिए, मुझे विश्वास नहीं है कि यह मेरे प्रमाणीकरण सेटअप के साथ एक समस्या है, लेकिन मेरे कोड में कहीं और है।

मेरे पढ़ने-लिखने scope हमेशा इन कार्यों के किसी भी में एक जैसा है:

https://www.googleapis.com/auth/youtube https://www.googleapis.com/auth/youtube.upload 

और API दस्तावेज़ के अनुसार, कि अंतरिक्ष-सीमांकित स्कोप के सेट insert, update और delete कार्यों को शामिल करना चाहिए।

मेरा client_id, client_secret, refresh_token इन सभी कार्यों के लिए भी हमेशा समान होता है - इसलिए, यह समस्या भी नहीं हो सकती है, है ना? ध्यान दें कि जब मेरा समय समाप्त हो जाता है तो मेरा प्रोग्राम स्वचालित रूप से एक नया access_token प्राप्त करता है, इसलिए, मुझे विश्वास नहीं है कि समस्या कहां है।

तुलना करने के लिए, यहाँ मेरी insert (अपलोड) कोड कैसा दिखता है (इस काम करता है):

# Auth stuff, then... 
@client.execute!(
    :api_method => @youtube.videos.insert, 
    :body_object => body, 
    :media => Google::APIClient::UploadIO.new(file_path, 'video/*'), 
    :parameters => { 
    'uploadType' => 'multipart', 
    :part => body.keys.join(','), 
    } 
) 

और यहाँ मेरी delete कोड कैसा दिखता है (यह विफल):

# Auth stuff, then... 
@client.execute!(
    :api_method => @youtube.videos.delete, 
    :parameters => { 
    'id' => youtube_id, 
    } 
) 

मुझे क्या याद आ रही है? दुर्भाग्यवश, YouTube API documentation for delete कोई उदाहरण नहीं प्रदान करता है, इसलिए मेरे पास तुलना करने के लिए कुछ भी नहीं है। अगर मुझे और जानकारी मिलती है तो कृपया मुझे बताएं कि मैं अपना प्रश्न स्पष्ट करने के लिए प्रदान कर सकता हूं।

उत्तर

13

मैं काफी यकीन है कि इस सवाल का के सभी 11 दृश्य (इस लेखन के रूप में) मेरे हैं, लेकिन मैं सिर्फ मामले में एक जवाब पोस्ट करने के लिए यह भविष्य में किसी को मदद करता है जा रहा हूँ:

था कोई मेरे कोड के साथ समस्या। समस्या तब थी जब मैंने शुरुआत में इस खाते के लिए अपना refresh_token बनाया था।

अनियमित के लिए, यूट्यूब डेटा एपीआई (v3) "एपीआई अकाउंट्स" का समर्थन नहीं करता है, जो कि Google एपीआई पारिस्थितिकी तंत्र में कहीं और है, वैसे ही आप आमतौर पर ओएथ 2 लेखक क्लाइंट को स्थापित करने के तरीके को पूरा करते हैं ग्राहक स्वयं है। कामकाज कुछ ऐसा है जो आपको हाथ से पर करना है। नीचे दिए गए चरणों को लें:


सबसे पहले, Google "API कंसोल" पर जाएं। वहां, "एपीआई एक्सेस" के तहत, आपको "इंस्टॉल किए गए एप्लिकेशन" के लिए "क्लाइंट आईडी बनाएं" की आवश्यकता है। यह आपको Client ID, Client secret और Redirect URI (आपको गैर- localhost एक) देगा। इन्हें नीचे लिखें।

इसके बाद, आप करने की जरूरत है मैन्युअल रूप से अपने पसंदीदा वेब ब्राउज़र में निम्नलिखित की तरह एक URL पर जाकर एक प्राधिकरण कोड प्राप्त, , जबकि एक ही खाते में प्रवेश किया तुम सिर्फ की क्लाइंट आईडी बनाया:

https://accounts.google.com/o/oauth2/auth 
    ?client_id={client_id} 
    &redirect_uri={redirect_uri} 
    &scope={space separated scopes} 
    &response_type=code 
    &access_type=offline 

बेशक, आपको client_id, redirect_uri और scope क्वेरी पैरामीटर दर्ज करने की आवश्यकता है। मेरे मामले में, यह वह जगह है जहां मैं गलत चला गया। जब मैं इस मैनुअल कदम था, मैं के रूप में scope परम करने चाहिए थे:

https://www.googleapis.com/auth/youtube https://www.googleapis.com/auth/youtube.upload 

लेकिन बजाय मैं सिर्फ https://www.googleapis.com/auth/youtube.upload, जो अद्यतन करने के लिए वीडियो/हटाने के लिए अपर्याप्त है था!

https://accounts.google.com/o/oauth2/token 
    ?code={authorization_code} 
    &client_id={client_id} 
    &client_secret={client_secret} 
    &redirect_uri={redirect_uri} 
    &grant_type=authorization_code 

और जैसी कमांड के साथ यह curl'ing:

अंतिम, आप एक refresh_token प्राप्त करने के लिए, इस तरह का URL लेने के द्वारा की जरूरत है

$ curl https://accounts.google.com/o/oauth2/token -d "code=..." 

यह एक JSON प्रतिक्रिया वापस आ जाएगी जिसमें आपका refresh_token है, जिसका उपयोग आप Google API के माध्यम से प्रोग्रामेटिक रूप से अपने अनुरोध को अधिकृत करते समय करते हैं।

+1

यहां अपने कोड में प्लग करने के लिए ताज़ा टोकन जेनरेट करने का एक और तरीका है: http://www.youtube.com/watch?v=hfWe1gPCnzc –

+0

क्या आप इसी तरह की समस्या को खुश कर सकते हैं [YouTube पर वीडियो अपलोड करना और YouTube का उपयोग करके प्लेलिस्ट में जोड़ना पाइथन में डेटा एपीआई v3] (http://stackoverflow.com/questions/22174090/uploading-video-to-youtube-and-adding-it-to-playlist-using-youtube-data-api-v3-i)? –

+0

मुझे एक ही त्रुटि हो रही थी, लेकिन अपडेट के लिए आपको पढ़ने के लिए एसएसएल स्कोप लिखना होगा। इस लिंक से संदर्भित: https://developers.google.com/youtube/v3/docs/videos/update –

संबंधित मुद्दे