最近ひっそりと公開した golang のパッケージ 2 つ

最近ひっそりと公開した golang のパッケージ 2 つ

疲れ果てて早い時間に寝落ちし変な時間に起きて暇なので, 最近ひっそりと公開した Go 言語のパッケージを 2 つ紹介だけしておこう思います。

go-webpage

https://github.com/yterajima/go-webpage

goquery の Web サイトのページ用エイリアスパッケージ。goquery は Ruby でいえば nokogiri のような動作をするパッケージで HTML から要素を取得できます。

“goquery そのまんま使えよ” という話ではあるんですが, meta タグのデータとったりするとコードが長くなりがちだったので別パッケージにしました。

雑な使い方

package main

import (
  "fmt"

  "github.com/PuerkitoBio/goquery",
  "github.com/yterajima/go-webpage"
)

func main() {
  // []byte を返す html ページを取得する処理
  page := getHtmlPage("http://example.com/hoge.html")

  // 初期化
  // この時点で wp.Title とか取得できる
  wp := webpage.New(page)

  // wp.Title から余計なスペースを除去したデータを返す
  fmt.Println(wp.GetTitle())
}

go-dtf

https://github.com/yterajima/go-dtf

go-dtf は W3C Date and Time Formats (通称: W3C-DTF) に該当する時刻文字列を time.Time に変換するだけのパッケージです。この W3C-DTF が少々曲者で某プロダクトの中でコードを一緒にしておきたくなかったので分離してパッケージにしました。

W3C-DTF は 6 パターンの文字列を日時定義としています。

  • YYYY ex: 2015
  • YYYY-MM ex: 2015-12
  • YYYY-MM-DD ex: 2015-12-10
  • YYYY-MM-DDThh:iiTZD ex: 2015-12-10T13:00+09:00
  • YYYY-MM-DDThh:ii:mmTZD ex: 2015-12-10T13:00:00+09:00
  • YYYY-MM-DDThh:ii:mm.sTZD ex: 2015-12-10T13:00:00.123456789+09:00

詳しくは 日付の表記に関するノート にとてもよくまとめられています。末尾の +09:00 はタイムゾーン指定で日本を表します。UTC の場合は +00:00 と書くか 2015-12-10T13:00Z のように末尾に “Z” 1文字で UTC を表します。

パッケージとしては文字列が W3C-DTF にマッチするか判定することと, それぞれの形式に応じて time.Time に変換しているだけですが golang のタイムゾーンのテストあたりは勉強になりました。

雑な使い方

package main

import (
  "fmt"

  "github.com/yterajima/go-dtf"
)

func main() {
  // エクスポートしている関数は沢山あるけれど
  // 単にパースするだけなら dtf.Parse だけ使えばできる
  parsedTime, _ := dtf.Parse("2015-12-10T02:50+09:00")
  fmt.Println(parsedTime)
}

最後に

golang 製のプロダクトを github の private リポジトリで勢いよく作ると分離したい汎用パッケージが増えて思わず github の契約プランを上げてしまう現象, もう少しどうにかならないだろうか。