💺

【Golang】HTMLの文字列からOGPを取得するライブラリ

2021/06/10に公開

概要

GolangでWebサイトのOGPを取得するライブラリを探したところ、otiai10/opengraphというライブラリが、検索の一番上にきました。このライブラリはURLを指定するだけで、OGPの情報を取得する便利なものなのですが、サイトの情報を取得するときの細かい設定などが出来ないようです。例えば、リクエストヘッダーに何か設定したり、POSTで投げたり、【Go】Webスクレイピングのやり方の記事にあるように文字コード変換したりなどなど・・。
というわけで、HTMLの取得部分までは自前の実装にして、純粋にHTMLからOGP情報を抜き出すようなライブラリがないかなと思って探してみました。

探してみた結果

dyatlov/go-opengraphというライブラリが良さげでした。HTMLの文字列を突っ込むとよしなに結果を返してくれます。OGPで取れる項目はこちらのソースコードを参照ください。TitleやDescription、Imageなどなど必要と思われる情報は網羅しているかと。

実装サンプル

HTMLを取得してOGPのインスタンスを取得するだけですが、実装サンプルをのせておきます。

sample.go
func OgpSample(url string) {
	client := &http.Client{}
	// ここは普通にhttpのGETリクエスト。エラー処理は割愛
	req, _ := http.NewRequest("GET", url, nil)
	resp, _ := client.Do(req)
	defer resp.Body.Close()
	body, _ := ioutil.ReadAll(resp.Body)
	
	// ライブラリのOGPインスタンス
	og := opengraph.NewOpenGraph()
	// HTMLの解析
	err := og.ProcessHTML(strings.NewReader(string(body)))
	// ogから各種情報取得して後はよしなに処理・・
	fmt.Printf(og.Title)
	・
	・
	・
}

Discussion