2016-07-17 7 views
0

私の目標はYoutube APIに接続して特定の音楽プロデューサのURLをダウンロードすることです。次のリンクから使用した次のスクリプトが見つかりました:https://www.youtube.com/watch?v=_M_wle0Iq9Mビデオではコードが美しく機能します。しかし、私はPython 2.7でそれを試してみると、私はKeyError: 'items'を返します。YouTube APIに接続してURLをダウンロードする - KeyErrorを取得する

私が知っているKeyErrorsは、誤った辞書の使用やキーが存在しない場合に発生する可能性があります。

私はyoutubeのgoogle開発者サイトに「アイテム」が存在していることを確認することを試みました。

get()を使用すると、私の問題に役立つかもしれませんが、わかりません。次のコードを使用してKeyErrorを修正するための提案や、URLをダウンロードするという私の主な目標(私はYoutube APIを持っている)に到達するためにコードを改善する方法に関する提案はありますか?

#these modules help with HTTP request from Youtube 
import urllib 
import urllib2 
import json 


API_KEY = open("/Users/ereyes/Desktop/APIKey.rtf","r") 
API_KEY = API_KEY.read() 

searchTerm = raw_input('Search for a video:') 

searchTerm = urllib.quote_plus(searchTerm) 

url = 'https://www.googleapis.com/youtube/v3/search?part=snippet&q='+searchTerm+'&key='+API_KEY 

response = urllib.urlopen(url) 

videos = json.load(response) 

videoMetadata = [] #declaring our list 

for video in videos['items']: #"for loop" cycle through json response and searches in items 

    if video['id']['kind'] == 'youtube#video': #makes sure that item we are looking at is only videos 
     videoMetadata.append(video['snippet']['title']+ # getting title of video and putting into list 
     "\nhttp://youtube.com/watch?v="+video['id']['videoId'])      

videoMetadata.sort(); # sorts our list alphaetically 

print ("\nSearch Results:\n") #print out search results 

for metadata in videoMetadata: 
    print (metadata)+"\n" 

raw_input('Press Enter to Exit') 
+2

応答変数を印刷していることを確認することができますそこにあるものを見るために 'videos'を印刷しようとしましたか?例えば'print json.dumps(ビデオ、インデント= 2)'。おそらくAPIがあなたに何らかのエラー応答を与えているかもしれません。(無許可または何か) – mgilson

+2

副疑問:なぜAPIキーをRTFファイルに保存していますか? –

+0

@ cricket_007それは実際には副次的な問題ではないかもしれません。 RTF形式には、ファイルの先頭に書式を設定するためのジャンクが含まれる傾向があります。おそらくそのジャンクがAPIキーの一部としてYouTubeに送信されている可能性があります(401(またはそのilkのその他のエラー)が発生する可能性があります)。 – pzp

答えて

1

問題が最も可能性が高い代わりに、APIキーのプレーンテキストファイルのRTFファイルを使用しての組み合わせであり、あなたがurllibはやurllib2のどちらを使用するか混乱しているようだ。ここでは

コードです両方をインポートしたので

個人的に、私はrequestsをお勧めしますが、私はあなたが(読む必要があると思います)、文字列

response = urllib.urlopen(url).read() 

を取得するための要求の内容は、あなたは

+0

それは働いた! RTFファイルが問題でしたが、TXTファイルに切り替えるとうまくいきました。 (とてもシンプルだけど、コーディングの世界に新しい人がいるときはとても難しい)。どうもありがとう! –

+0

お役立ち情報 - 完了 –

関連する問題