2

자바 스크립트에 youtube api를 사용하려고하는데 'gapi.client.youtube가 정의되지 않았습니다'라는 메시지가 나타납니다.gapi.client.youtube가 정의되지 않았습니까?

링크를 통해 이동했습니다 : Why is 'gapi.client.youtube' from Youtube Data Api V3 undefined?,하지만 많은 도움을 얻을 수 없습니다.

<script> 
     function load(){ 
      gapi.client.setApiKey('AIzaSyARvwirFktEIi_BTaKcCi9Ja-m3IEJYIRk'); 
      gapi.client.load('youtube', 'v3'); 
      searchA(); 
     //alert(gapi.client.youtube.channels); 
    } 

     function searchA() { 
     var q = 'pink floyd'; 
     var request = gapi.client.youtube.channels.list({ 
      part: 'statistics', 
      forUsername : 'GameSprout' 
     }); 

     request.execute(function(response) { 
     var str = JSON.stringify(response.result); 
     alert(str); 
    }); 

}

<script src="https://apis.google.com/js/client.js?onload=load">  

그러나 그 못하고 gapi.client.youtube :

내 코드는 아래에 배치됩니다.

누구든지 나를 도와 줄 수 있습니까?

+1

API 키를 공개적으로 공유하지 않기를 권유하십시오. 이로 인해 API가 도용 될 수 있습니다. API 키가 도용 된 경우 Google 클라우드 콘솔에서 API 키를 사용 중지 할 수 있습니다. –

답변

11

문제는 gapi.client.load 방법은 완료하는 데 시간이 조금 걸립니다, 그것은 (당신이 동기로 설정 한) 페이지가 이동하고 유튜브 라이브러리 전에 searchA() 방법을 실행하므로, 비동기 때문이다 완전히로드되었습니다. 이 문제를 해결하는 데는 두 가지 방법이 있습니다.

<html> 
<body> 
    <script> 
     googleApiClientReady=function() { 
      loadApi() = function() { 
       return new Promise(function(resolve,reject){ 
         gapi.client.setApiKey('AIzaSyARvwirFktEIi_BTaKcCi9Ja-m3IEJYIRk'); 
         gapi.client.load('youtube', 'v3', resolve); 
       }); 
      }; 
      loadApi().then(function() { 
       var q = 'pink floyd'; 
       var request = gapi.client.youtube.channels.list({ 
         part: 'statistics', 
         forUsername : 'GameSprout' 
       }); 
       request.execute(function(response) { 
         var str = JSON.stringify(response.result); 
         alert(str); 
       }); 
      }); 
     }; 
</script> 
<script src="https://apis.google.com/js/client.js?onload=googleApiClientReady"></script> 
</body> 
</html> 
: 당신이 원하는 경우, 당신은 또한 로딩 콜백 주위에 약속을 포장 할 수

<html> 
<body> 
<script> 
     function googleApiClientReady(){ 
       gapi.client.setApiKey('AIzaSyARvwirFktEIi_BTaKcCi9Ja-m3IEJYIRk'); 
       gapi.client.load('youtube', 'v3', function() { 
         searchA(); 
       }); 
     } 
     function searchA() { 
       var q = 'pink floyd'; 
       var request = gapi.client.youtube.channels.list({ 
         part: 'statistics', 
         forUsername : 'GameSprout' 
       }); 
       request.execute(function(response) { 
         var str = JSON.stringify(response.result); 
         alert(str); 
       }); 
     } 
</script> 

: 하나는이 같은 부하 방법의 콜백 인수를 사용하는 것입니다

+0

감사합니다! 또한 실행하기 전에 몇 시간 동안 기다려 보았습니다. –

+0

약속을 보여주는 위대한 대답! – journeyer