QiitaAPI에서 2020년 투고의 스톡수가 많은 기사의 태그 정보를 조사해 보았다

소개



거의 프로그래밍 경험이 없는 초보자(VB.Net를 조금 푼 ​​정도)입니다만, 최근 「물건을 만드는」학습의 장소를 주어 받을 수 있었으므로, 나름대로 여러 가지 조사해, JavaScript에 도전해 보았습니다 . 기사의 투고도 처음으로, 처음으로 다행으로 당황하고 있습니다. . 소스 코드가 깨끗하지 않은 것도 애경.

목적



Node.js와 QiitaAPI (+axios)를 사용하여 지금 자신에게 무엇을 할 수 있는지 생각해 보았습니다.
그리고, 이번은, 「올해(2020년)에 투고된 기사로, 스톡수가 많은 기사의 태그는 무엇인가?」를 조사해 보았습니다.
(스톡 수가 많은 기사로서 이번에는 스톡 수가 300 이상의 기사를 대상으로 했다.)

코드



QiitaAPI.js
// axiosモジュールの読み込み
const axios = require('axios');
axios.defaults.baseURL = 'https://qiita.com/api/v2';

let array1 = [];  // タグ名用
let array2 = [];  // カウント用

// main関数
async function main(page) {

  // QiitaAPIからレスポンス受け取り(ストック>=300 + 作成日>=2020-01 の記事一覧)
  let response = await axios.get(
      '/items?page=' + page + '&per_page=100&query=stocks:' +
      encodeURIComponent('>=300') + '+created:'+ encodeURIComponent('>=2020-01')
  );

  // 取得した記事から[tags]要素を取得
  for (let i=0; i<response.data.length; i++) {
    for (let j=0; j<response.data[i].tags.length; j++) {

        var tagname = response.data[i].tags[j].name;    // タグ名取得

        // 配列に登録があれば、カウントを+。登録が無いなら配列に追加。
        var result = array1.indexOf( tagname );         // 検索(既に配列にあるか)
        if (result < 0) {
            array1.push(tagname);
            array2.push(1);
        } else { array2[result] += 1; }
    }
  }

  // 結果出力
  if (page==5) {
      for (let i=0; i<array1.length; i++) {
        console.log(array1[i]+', '+array2[i]);
      }
  }
}

// main関数 実行
let promise = Promise.resolve();
for (let k=1; k<6; k++) {
    promise = promise.then(() => main(k));
}

여러가지 빠진 점



1. QiitaAPI는 무엇을 취할 수 있습니까?



QiitaAPI 사양 을 읽어 보았습니다. (여러 가지 잡힐 것 같지만, 기술력이 따라잡지 않기 때문에 단념.)
먼저 어이? 라고 생각한 것은, 1회의 응답으로 최대 100건, 페이지 지정도 최대 100페이지. 즉, 1만건까지.
100건 이상을 취하려고 생각하면 페이지를 몇번이나 호출할 수밖에 없는 것일까. 그래서 main 함수를 반복하기로 결정했습니다.
  let response = await axios.get(
      '/items?page=' + page + '&per_page=100&query=stocks:' +
      encodeURIComponent('>=300') + '+created:'+ encodeURIComponent('>=2020-01')
  );

2. 비동기 처리는 어때?



루프하려고 했는데 좋지만, 잘 안 된다.
아무래도 비동기 처리로 달리니까 이유다. 솔직히 잘 모르겠지만, 이하 사이트를 참고로 개선해 보았다.
Promise로 JavaScript 비동기 처리 레시피 모음
let promise = Promise.resolve();
for (let k=1; k<6; k++) {
    promise = promise.then(() => main(k));
}

결과



결과는 EXCEL로 집계.
(너무 세세하게 되어도 그러므로, 표는 상위 10건, 그래프는 기사수 7건 이상을 표시.)
※2020년에 투고된 기사로, 스톡수가 300이상의 기사에 대해서 태그를 집계


태그
기사 수


자바스크립트
67

파이썬
58

초보자
49

기계 학습
24

신인 프로그래머 응원
24

HTML
16

DeepLearning
16

GitHub
16

Vue.js
16

React
16




고찰



Qiita 톱의 태그 랭킹과는 또 다른 결과가 되었다.
상위의 「JavaScript」 「Python」은 올해도 뜨겁다. 주식수도 많다는 것은 흥미 관심이 높고 도움이 되는 정보가 아직 있다는 것일까.

흥미로운 것은, 태그 랭킹에서는 상위의 「Ruby」가 랭크외.
최근 게시물이 적거나 주식 수가 늘지 않는지,,,? ?

마지막으로



자바스크립트의 학습도 겸해 이번은 챌린지해 보았습니다만, 보다 보다 좋은 어프로치가 있다고 생각했습니다.
원래, 내 기술력의 없음을 통감. (쓰지 않았지만 여러가지 포기하고 있습니다...)
우선은 쓴다! 조사! 해보자!
트라이 앤 에러로 앞으로도 아마추어이면서 도전해 나갈 것입니다.

좋은 웹페이지 즐겨찾기