Gravatarのアイコン画像をGo言語で取得することがあったので、備忘録としてメモ。
Gravatar アイコン画像の取得方法
Gravatar API を使って画像取得するのですが、Gravatar の API には認証は必要なく、シンプルな HTTP GET リクエストで完結します。
なので、Gravatar API のURLさえわかれば GET リクエストを投げるだけ!
Gravatar API の URL は登録しているメールアドレスをもとにmd5で算出したハッシュ値を使います。
流れはシンプル
Gravatar API 利用の流れ
- メールアドレスをすべて小文字にする
- md5でハッシュ値を算出
-
https://www.gravatar.com/avatar/HASH値
がアイコン画像のURLになるので GET リクエスト
Go言語でmd5ハッシュ値を算出する
標準パッケージの crypto を使います。md5の場合は crypto/md5
をインポート。
crypto/md5
を使ってハッシュ値を算出する方法は2通りあります。
md5 ハッシュ値算出方法1
package main
import (
"crypto/md5"
"fmt"
"io"
)
func main() {
str := "hogehoge"
// md5.New() は hash.Hash型を返す
m := md5.New()
// hash.Hash は io.Writerインターフェースを満たすので
// io.WriteString で文字列を書き込める
io.WriteString(m, str)
hash := m.Sum(nil)
// チェックサム(hash)は[]byte型なので16進数表記にする
fmt.Printf("hash: %x\n", hash)
}
実行結果は
$ go run main.go
hash: 329435e5e66be809a656af105f42401e
md5 ハッシュ値算出方法2
package main
import (
"crypto/md5"
"fmt"
)
func main() {
str := []byte("hogehoge")
// md5.New() は hash.Hash型を返す
hash := md5.Sum(str)
// チェックサム(hash)は[]byte型なので16進数表記にする
fmt.Printf("hash: %x\n", hash)
}
実行結果は
$ go run main.go
hash: 329435e5e66be809a656af105f42401e
Go言語でGravatar のアイコン画像を取得する
Gravatar API のおさらい
おさらい
- メールアドレスをすべて小文字にする
- md5でハッシュ値を算出
-
https://www.gravatar.com/avatar/HASH値
がアイコン画像のURLになるので GET リクエスト
先程のmd5ハッシュ値算出方法を使って、↑↑↑の流れで実装すればOK。
package main
import (
"crypto/md5"
"fmt"
"io"
"strings"
)
func main() {
email := "free.engineer.life@gmail.com"
lowerEmail := strings.ToLower(email)
// md5.New() は hash.Hash型を返す
m := md5.New()
// hash.Hash は io.Writerインターフェースを満たすので
// io.WriteString で文字列を書き込める
io.WriteString(m, lowerEmail)
hash := m.Sum(nil)
gravatarURL := fmt.Sprintf("https://www.gravatar.com/avatar/%x", hash)
fmt.Println(gravatarURL)
}
実行結果は
$ go run main.go
https://www.gravatar.com/avatar/e9a4efb140a9d341dcb87af1583498f1
実行結果のURLをブラウザで開けば、私の赤ちゃんのアイコンが表示されます。
参考図書
Tour of Goを終えた人にオススメです!!