2016-07-17 2 views
0

내 목표는 YouTube API에 연결하고 특정 음악 제작자의 URL을 다운로드하는 것입니다. 다음 링크에서 사용한 스크립트는 다음과 같습니다. https://www.youtube.com/watch?v=_M_wle0Iq9M. 비디오에서 코드는 아름답게 작동합니다. 하지만 파이썬 2.7에서이 키를 사용하면 KeyError : 'items'를 얻을 수 있습니다.YouTube API에 연결하고 URL 다운로드 - KeyError 받기

사전을 잘못 사용하거나 키가없는 경우 KeyErrors가 발생할 수 있음을 알고 있습니다.

나는 'items'가 존재하는지 확인하기 위해 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

거기에 무엇이 있는지보기 위해'비디오 '를 인쇄 해 보셨습니까? 예 : 'print json.dumps (비디오, 들여 쓰기 = 2)'. 아마도 API가 일종의 오류 응답 (무단 또는 무언가)을 제공하고 있습니다. – mgilson

+2

사이드 질문 : API 키를 RTF 파일에 저장하는 이유는 무엇입니까? –

+0

@ cricket_007 실제로는 부수적 인 질문이 아닐 수도 있습니다. RTF 형식은 파일의 머리 부분에 서식을 지정하기위한 일부 정크를 포함하는 경향이 있습니다. 아마도 그 정크가 API 키의 일부로 YouTube에 보내져 401 (또는 그 ilk의 다른 오류)가 발생했을 것입니다. – pzp

답변

1

문제가 가장 가능성이 대신 API 키에 대한 일반 텍스트 파일의 RTF 파일을 사용의 조합이고 당신은 URLLIB 사용 여부를 혼란 또는 urllib2가 될 것 같다 둘 다 가져 왔 으니까.

개인적으로, 당신은 변수 응답을 인쇄하여 있음을 확인할 수있는 문자열을

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

를 얻기 위해) 요청의 내용을 나는 requests를 추천 할 것입니다,하지만 난 당신이 읽기 (필요가 있다고 생각

+0

그것이 끝나면 바로 URL 다운로드의 응답을 인쇄 할 것입니다! RTF 파일이 문제 였지만 일단 TXT 파일로 전환하면 제대로 작동합니다. (코딩 세계에 새로운 사람이있을 때 그렇게 간단하지만 어렵다). 많은 감사합니다! –

+0

잘 알고 있습니다 - 완료했습니다. –

관련 문제