🤑

connpass apiを使ってreadme.mdに予定イベントを書いてみた

2022/07/15に公開

コンパスとは「エンジニアをつなぐIT勉強会支援プラットフォーム」
https://connpass.com/dashboard/
僕もちょくちょく利用させてもらってるんですが、頻繁にダッシュボードを見ることはなく、新規イベントをメールやダッシュボードから追うのは結構大変だな〜と思うことが多いんですよね。
新着イベントをgithubで見れたら楽だなと思ったので、コード書きました。
概要としてはgithub actionを使って1日1回実行。
所属してるグループが開催しているイベントを取得して、
それをREADME.mdに書き込む。そんなプログラムです
goを最近勉強し始めて何か作ってみたいと思っていたのでいい機会でした

https://github.com/lll-lll-lll-lll/connpass_readme

テストコード

package main

import (
	"log"
	"os"

	"github.com/conread/markdown"
)

func WriteHorizon(m *markdown.MarkDown, content interface{}, repeat int) {
	markh := "-"
	m.AddToPage(markh, content, repeat)
}

func WriteTitle(m *markdown.MarkDown, content interface{}, repeat int) {
	markt := "#"
	m.AddToPage(markt, content, repeat)
}

func main() {
	file, err := os.Create("README.md")
	if err != nil {
		log.Fatal(err)
	}
	defer file.Close()
	m := markdown.NewMarkDown()
	m.MDHandleFunc("Test Write Title", 2, WriteTitle)
	m.MDHandleFunc("Test Write Horizon", 3, WriteHorizon)
	s := m.CompleteMDFile(2)
	file.Write([]byte(s))
}

結果

## Test Write Title

--- Test Write Horizon

コード解説

file, err := os.Create("README.md")
	if err != nil {
		log.Fatal(err)
	}
	defer file.Close()
	m := markdown.NewMarkDown()
func NewMarkDown() *MarkDown {
	m := new(MarkDown)
	return m
}

ここは説明は要らなそうですね

  • README.mdファイル作成
  • MarkDown構造を初期化してます

次はMDHandleFuncにREADMEに書き込みたい内容とm.AddToPageに渡すmarkをどれだけ繰り返すかを表すrepeatをわたし、
第三引数に引数がm *markdown.MarkDown, content interface{}, repeat intを満たす関数を渡します。
AddToPage()メソッドでマークと書き込みたい内容を結合した文字列をとMarkDown構造のpageプロパティに追加してます

func WriteHorizon(m *markdown.MarkDown, content interface{}, repeat int) {
	markh := "-"
	m.AddToPage(markh, content, repeat)
}

func WriteTitle(m *markdown.MarkDown, content interface{}, repeat int) {
	markt := "#"
	m.AddToPage(markt, content, repeat)
}


m.MDHandleFunc("Test Write Title", 2, WriteTitle)
m.MDHandleFunc("Test Write Horizon", 3, WriteHorizon)

次に、pageに追加した文字列たちを結合します

s := m.CompleteMDFile(2)

最後にREADME.mdファイルに書き込み

file.Write([]byte(s))

例としてコンパスのapiをたたいてREADME.mdに書き込むプログラムを貼っときます
https://github.com/lll-lll-lll-lll/connpass_readme/blob/2f79091d82f0e368e1ddea490ed0c1a4efb1a580/example/main.go#L27

まとめ

正直まだまだ使い勝手悪いのでちょこちょこ編集していきたいと思います。
net/httpのhandlerを参考に書いたのでnet/httpについて勉強するいい機会になりました

Discussion