gapi.client.youtube не определен?

Я пытаюсь использовать youtube api для javascript и получаю «gapi.client.youtube не определен».

Я прошел по ссылке: Почему ' gapi.client.youtube' из 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.

Может ли кто-нибудь помочь мне в его проблеме?


person Abhiroop Nandi Ray    schedule 05.07.2014    source источник
comment
Позвольте мне предложить не публиковать ключи API публично, так как это может открыть ваш API для взлома. Если ваш ключ API взломан, вы можете отключить его в облачной консоли Google.   -  person David Salamon    schedule 03.01.2017


Ответы (1)


Проблема в том, что метод gapi.client.load требует немного времени для завершения и является асинхронным, поэтому ваша страница (которую вы настроили как синхронную) продолжает работать и запускает метод searchA() до того, как библиотека YouTube будет полностью загружена. Есть два способа обойти это. Один из них — использовать аргумент обратного вызова метода load, например:

<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>

Если вы предпочитаете, вы также можете обернуть обещание вокруг обратного вызова загрузки:

<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>
person jlmcdonald    schedule 06.07.2014
comment
Благодарю вас! Также я попытался заставить его подождать некоторое время перед выполнением, и это сработало. - person Abhiroop Nandi Ray; 08.07.2015