Go言語

【Go言語】crypto/md5でGravatar アイコン画像を取得する

Gravatarのアイコン画像をGo言語で取得することがあったので、備忘録としてメモ。

Gravatar アイコン画像の取得方法

Gravatar API を使って画像取得するのですが、Gravatar の API には認証は必要なく、シンプルな HTTP GET リクエストで完結します。

なので、Gravatar API のURLさえわかれば GET リクエストを投げるだけ!

Gravatar API の URL は登録しているメールアドレスをもとにmd5で算出したハッシュ値を使います。

流れはシンプル

Gravatar API 利用の流れ

  1. メールアドレスをすべて小文字にする
  2. md5でハッシュ値を算出
  3.  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 のおさらい

おさらい

  1. メールアドレスをすべて小文字にする
  2. md5でハッシュ値を算出
  3.  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を終えた人にオススメです!!

-Go言語

© 2021 フリエン生活 Powered by AFFINGER5