カテゴリー

    Tips

axiosでYoutubeAPIを呼び出してjsonファイルに書き出す

16:55・2021/12/20 公開

00:29・2022/01/18 更新

axios↓
https://github.com/axios/axios

youtubeDataAPIのサンプル↓
https://developers.google.com/youtube/v3/sample_requests

const fs = require('fs');
const axios = require('axios');

let data = [];

axios.get('https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId=PLTOj1BFS6AhMl8BG1IeIfv6wo6VmPP0sp&maxResults=50&pageToken=&key=YOUR_API_KEY', {
}).then(function(response) {
  console.log(response);//pageトークンを手動で確かめる用
  let items = response.data.items;
  for(let i = 0; i < items.length; i++) {
    let item = {
      chId: items[i].snippet.videoOwnerChannelId,
      chName: items[i].snippet.videoOwnerChannelTitle,
      chThumbnail: '',
      chView: '',
      chSubs: '',
      chViCo: '',
      viTitle: items[i].snippet.title,
      viThumbnail: items[i].snippet.thumbnails.high.url,
      viId: items[i].snippet.resourceId.videoId,
    }
    data.push(item);
  }
}).catch(function (error) {
  console.log(error);
})
.then(function () {
  let myPromise1 = Promise.resolve();
  for(let i = 0; i < data.length; i++) {
    myPromise1 = myPromise1.then(()=> {
      return new Promise(function (resolve, reject) {
        axios.get(`https://www.googleapis.com/youtube/v3/channels?part=snippet,statistics&id=${data[i].chId}&key=AIzaSyC0pVPoevfP1dS8n4GQdkK3s0PFJ5QiJA8`, {
        }).then(function(response) {
          let resp = response.data.items[0];
          data[i].chThumbnail = resp.snippet.thumbnails.high.url;
          data[i].chView = resp.statistics.viewCount;
          data[i].chSubs = resp.statistics.subscriberCount;
          data[i].chViCo = resp.statistics.videoCount;
      
        }).catch(function (error) {
          console.log(error);
        })
        .then(function () {
          resolve();
        });
      });
      
    });
  }
  myPromise1.then(()=> {
    console.log(data);
    fs.appendFileSync('data.json', JSON.stringify(data, null, '    '));
    //外部のjsonファイルに追記する
  });
});

自動化するのが面倒だったので手動でpageTokenの中にnextPageTokenとかを入れると次のページのデータが取れます。

PageTokenについてはここにある↓
https://developers.google.com/youtube/v3/docs/channels/list