LoginSignup
0
0

More than 1 year has passed since last update.

githubのスター数の一覧を取得するスクリプト

Posted at

背景

githubのリポジトリのスター数を色々比較して見たかったので出力できるスクリプトを作ってみた。

実行方法

事前準備

  • inファイルを用意しておく
    • 対象リポジトリ名一覧を記述
  • .envファイルを用意しておく
    • GITHUB_TOKENを定義

実行

$ yarn add ygor @octokit/core fs readline dotenv
$ node task.js output_star

コード

task.js
/**
 * `https://github.com/{owner}/{repo}` のownerとrepoの情報をまとめたファイルを読み込み、
 * スター数一覧を追記したファイルを出力する。
 *
 * # 実行例
 * node task.js output_star
 *
 * # inファイル例
 * ```
 * facebook/react
 * vuejs/vue
 * jquery/jquery
 * ```
 *
 * # outファイル例
 * ```
 * facebook/react	190187
 * vuejs/vue	197000
 * jquery/jquery	56371
 * ```
 * */
const ygor = require("ygor");
const { Octokit } = require("@octokit/core");
const fs = require('fs');
const readline = require("readline");
require('dotenv').config();

const IN_FILE_NAME = 'in';
const OUT_FILE_NAME = 'out';

// arg._[0]: 読み込みファイルパス
// 未設定の場合はIN_FILE_NAMEがデフォルト
async function output_star(arg) {
  const octokit = new Octokit({
    // .envファイルのGITHUB_TOKENにトークン設定
    auth: process.env.GITHUB_TOKEN
  })

  const reader = _getReader(arg);

  await reader.on('line', async (record) => {
    let [owner, repo] = record.split('/');
    res = await octokit.request('GET /repos/{owner}/{repo}', {
      owner: owner,
      repo: repo
    });
    let tmp = [];
    // リポジトリ名
    tmp.push(record);
    // スター数
    tmp.push(res['data']['stargazers_count']);
    // 詳細
    // tmp.push(res['data']['description']);
    const str = tmp.join('\t');
    console.log(str);
    // ファイル出力
    fs.appendFile(OUT_FILE_NAME, str+'\n', (err) => {
      if (err) throw err;
    });
  });
}

function _setFile(arg) {
  if (arg._[0]){
    return arg._[0];
  } else {
    return IN_FILE_NAME;
  }
}

function _getReader(arg) {
  const stream = fs.createReadStream(_setFile(arg));
  return readline.createInterface({ input: stream });
}

// コマンドの登録 ygor.task(コマンド名, 実行する関数)
// owner, repoの一覧を受け取り、starの一覧を返す
ygor.tasks.add("output_star", output_star);

Editor's Note

スクリプトを書きたい時はたいていpythonかrubyで書いてたけど、最近のnodeはCUIで実行時に結果やオブジェクトのメソッド一覧とかを表示してくれるのね!
めっちゃ便利になっててびっくり!!

js系は流れ早すぎてあまりキャッチアップしてなかったけど、そろそろ触っていこうかなー。

というか、事業コンテンツ考えたり営業活動しようとしていたはずなのにふと横道それてスクリプト組んだりしてたらあっという間に時間が過ぎてたという罠()

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0