gapi.client.youtube is undefined?

javascript, youtube, youtube-api, youtube-data-api

Solution

The problem is that the `gapi.client.load` method takes a bit of time to complete, and it is asynchronous, so your page (which you've set up to be synchronous) is going on and running the `searchA()` method before the youtube library is fully loaded. There are two ways around this. One is to use the callback argument of the load method, like this:

<html>
<body>
 <script>
        function googleApiClientReady(){
                gapi.client.setApiKey('API_KEY');
                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>
</body>
</html>

If you'd prefer, you could also wrap a promise around the loading callback:

<html>
<body>
    <script>
        googleApiClientReady=function() {
          loadApi() = function() {
                return new Promise(function(resolve,reject){
                        gapi.client.setApiKey('API_KEY');
                        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>

Problem

I am trying to use youtube api for javascript and am getting 'gapi.client.youtube is undefined'. I have gone through the link: Why is 'gapi.client.youtube' from Youtube Data Api V3 undefined? , but couldn't get much help. My code is placed below: ``` <script> function load(){ gapi.client.setApiKey('API_KEY'); 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"> ``` But its not getting gapi.client.youtube. Can anyone please help me in his issue?

Original source