見出し画像

TWSNMP FC:マニュアルばかり書いているとプログラムを無性に作りたくなってダウンロード数を集計するプログラムを作った

今朝は4時から開始です。4時ぐらいが一番スッキリしています。3時半と30分しか違わないのに不思議です。
マニュアル月間で今日もマニュアルを3つ公開しました。

マニュアルばかり書いていると無性にプログラムを作りたくなってきます。
そこで今朝は、Docker HUBとGithubからイメージやリリースしたプログラムがダウンロードされた回数を取得するプログラムを作ってみました。
Docker HUBやGithubではAPIが公開されていてHTTPのGETリクエストだけで取得できることがわかりました。
Dockerは

type dockerImageEnt struct {
	Name  string `json:"name"`
	Count int    `json:"pull_count"`
}

func getDockerCount() {
	url := "https://hub.docker.com/v2/repositories/twsnmp/twsnmpfc/"

	r, err := http.Get(url)
	if err != nil {
		log.Fatalln(err)
	}
	defer r.Body.Close()

	ba, err := ioutil.ReadAll(r.Body)
	if err != nil {
		log.Fatalln(err)
	}
	var d dockerImageEnt
	err = json.Unmarshal(ba, &d)
	if err != nil {
		log.Fatalln(err)
	}
	fmt.Println(d)
}

です。Githubは、

type githubAssetEnt struct {
	Name  string `json:"name"`
	Count int    `json:"download_count"`
}

type githubReleaseEnt struct {
	Url    string           `json:"html_url"`
	Assets []githubAssetEnt `json:"assets"`
}

func getGithubCount() {
	url := "https://api.github.com/repos/twsnmp/twsnmpfc/releases"

	r, err := http.Get(url)
	if err != nil {
		log.Fatalln(err)
	}
	defer r.Body.Close()

	ba, err := ioutil.ReadAll(r.Body)
	if err != nil {
		log.Fatalln(err)
	}
	var g []githubReleaseEnt
	err = json.Unmarshal(ba, &g)
	if err != nil {
		log.Fatalln(err)
	}
	fmt.Println(g)
}

のような感じです。GithubはGraphqlで取得できるようですが、朝飯前に作れるようなものではないのでやめておきました。urlのところのtwsnmp/twsnmpfcの部分を変えれば他のものにも使えると思います。
このテストプログラムをベースに

のサイトにダウンロード数のグラフを追加する夢がでてきました。でも今朝はここまで

明日に続く

開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。