2015-02-02 6 views
2

먼저 비슷한 질문에 대한 이전의 "대답"은 더 이상 사용되지 않는 Youtube Api V2를 사용했습니다. 또한 파이썬으로 어떻게 대답 할 수 있는지에 대한 대답은 없다.비디오, youtubeAPI, Python의 채널 이름을 얻는 방법

내 코드는 다음과 같습니다

def youtube_search(item): 


    youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, 
    developerKey=DEVELOPER_KEY) 

    # Call the search.list method to retrieve results matching the specified 
    # query term. 
    search_response = youtube.search().list(
    q=item, 
    part="id,snippet", 
    maxResults=6 
).execute() 


    videoCount = 0; 
    title = "" 
    channelId = "" 
    channelName = "" 
    # Add each result to the appropriate list, and then display the lists of 
    # matching videos, channels, and playlists. 
    for search_result in search_response.get("items", []): 
    if search_result["id"]["kind"] == "youtube#video": 
     videoCount += 1 
     if videoCount == 1: 
     snippet = search_result["snippet"] 
     title = snippet["title"] 
     channelId = snippet["channelId"] 
     channelName = snippet["channelTitle"] 

# print "Videos:\n", "\n".join(videos), "\n" 
    print(item, videoCount, title, channelId, channelName) 

그래서 기본적으로 나는 비디오의 제목과 채널의 이름을 알아야 할 첫 번째 반환 비디오에서. 그것은 내가 바라는 이름입니다. 이 검색 문자열의 경우 :

r'''"Joe Keegan" "Pick Myself Up"''' 

내 결과는 : 여기를 찾고 있어요

('"Joe Keegan" "Pick Myself Up"', 1, u'Pick Myself Up', u'UCThUpINg-JADDOHdkz_4-jw', u'') 

채널 이름은 "다양한 아티스트 - 주제"입니다. 특히 나는 거대한 목록을 가지고 있으며, 그 채널 이름으로 많은 것을 제거하려고 시도하고있다. 그러나 그 이름을 사용하는 많은 채널 ID가 있습니다. channelTitle은 내가 원하는 것을 제공하지 않습니다.

답변

1

이 모든 일이 진행되는 동안 나는 그것을 직접 해결하려고 노력했으며 그 해결책을 제시하는 몇 가지 다른 답변을 병합했습니다. 더 나은 사람이 있으면 알려주세요. 그러나 여기에 유용 할 수 있습니다.

본질적으로 나는 비디오 ID에 URL "Get"요청을하고 JSON 응답을 구문 분석했습니다. 아, 파이썬은 가끔 사용하는 등 쉬운 언어입니다 ...

for search_result in search_response.get("items", []): 
    if search_result["id"]["kind"] == "youtube#video": 
     videoCount += 1 
     if videoCount == 1: 
     snippet = search_result["snippet"] 
     title = snippet["title"] 
     videoId = search_result["id"]["videoId"] 
     channelId = snippet["channelId"] 

    urlBase = "https://gdata.youtube.com/feeds/api/videos/" 
    if videoCount > 0: 
    url = urlBase + videoId + "?v=2&alt=json" 
    r = requests.get(url) 
    metadata = r.json() 
    channelName = metadata["entry"]["author"][0]["name"]["$t"] 

print(item, videoCount, title, channelId, channelName) 

그리고 정말 채널 ID가 필요하지 않습니다 물론

...

+0

유튜브 API의 버전 3.0이 작동합니까? –

+1

그것은 현재 나를 위해 작동합니다. 나는 v3에 대한 문서가 매우 열악하다고 본다. 정확히 원하는 경우 몇 가지 코드 샘플을 사용할 수 있지만 약간 다른 방법을 사용하려면 데이터를 가져올 위치가 표시되지 않습니다. http 요청/JSON 응답에 대한 좋은 점은 찾고있는 JSON이 있으면 포함 된 JSON을 인쇄하는 것이 쉽다는 것입니다. 따라서 어떤 요청을해야하는지 알게되면 원하는 것을 찾을 수 있습니다. youtube는 적절한 메타 데이터 태그가 없다는 점에서 역사적이며 문제가 해결되지 않은 문제를 겪고 있습니다. – CashCow

+0

YouTube에 비디오를 업로드 할 때 뮤직 비디오 카테고리를 선택했을 때 아티스트 이름, 제목에 해당하는 필드를 입력하면 모션 비디오인지 오디오인지를 나타내야합니다. 자동으로 감지 될 수 있습니다. – CashCow