Goal
PhoenixからGravatar画像を利用する。
(I use the Gravatar image in Phoenix.)
(I use the Gravatar image in Phoenix.)
Dev-Environment
OS: Windows8.1
Erlang: Eshell V6.4, OTP-Version 17.5
Elixir: v1.0.4
Phoenix Framework: v0.13.1
PostgreSQL: postgres (PostgreSQL) 9.4.4
Erlang: Eshell V6.4, OTP-Version 17.5
Elixir: v1.0.4
Phoenix Framework: v0.13.1
PostgreSQL: postgres (PostgreSQL) 9.4.4
Wait a minute
Gravatar画像を表示できるようにします。
Index
- What is Gravatar?
- hexdigest(md5) and downcase(Email)
- Display gravatar image
- HelperMethod
- Extra
1. What is Gravatar?
Gravatarは、EmailとProfileImageを結びつけるサービス。
Example:
Gravatarで登録と設定を行えば、
Google+、Twitter、Blogger…etcで共通のProfileImageが利用できるようになる。
(但し、対象のサービスサイトがGravatarを採用していること)
Gravatarで登録と設定を行えば、
Google+、Twitter、Blogger…etcで共通のProfileImageが利用できるようになる。
(但し、対象のサービスサイトがGravatarを採用していること)
2. hexdigest(md5) and downcase(Email)
Gravatarを利用するためにはmd5でemailを暗号化する必要がある。
また、Emailは大文字小文字で区別されないが、
md5では区別されるのでdowncaseを暗号化前に実施する。
また、Emailは大文字小文字で区別されないが、
md5では区別されるのでdowncaseを暗号化前に実施する。
利用するのは、以下の二つ。
- String.downcase/1
- :erlang.md5/2
まず、iexから利用する関数を試す。
iexを起動する。
iexを起動する。
>iex -S mix
downcaseを検証。
iex(1)> email = String.downcase("Test@test.com")
"test@test.com"
:erlang.md5を検証。
iex(2)> :erlang.md5("test@test.com")
<<182, 66, 180, 33, 123, 52, 177, 232, 211, 189, 145, 95, 198, 92, 68, 82>>
例は、こちらに書いてある。
Gravatar - Creating the Hash
Gravatar - Creating the Hash
名称: web/views/user_view.ex
以下、二つの関数を作成する。
以下、二つの関数を作成する。
def email_crypt_md5(email) do
:erlang.md5(email)
|> :erlang.bitstring_to_list
|> Enum.map(&(:io_lib.format("~2.16.0b", [&1])))
|> List.flatten
|> :erlang.list_to_bitstring
end
def email_downcase(email) do
String.downcase(email)
end
名前を含め、特定用途の関数となっています。
しかし、別の用途に使うことがなければ抽象化か汎用化は行わない。
しかし、別の用途に使うことがなければ抽象化か汎用化は行わない。
必要になったら必要なことをすればよい。
オブジェクト指向での考えですが・・・
YAGNI(=You Ain’t Gonna Need It): それは多分、必要ない
オブジェクト指向での考えですが・・・
YAGNI(=You Ain’t Gonna Need It): それは多分、必要ない
3. Display gravatar image
そろそろ画面に変化が欲しいので、
Default Imageを表示する。
Default Imageを表示する。
取得方法の詳細は以下に書いてある。
Gravatar - Image Requests
Gravatar - Image Requests
名称: web/templates/user/show.html.eex
以下のように編集して下さい。
以下のように編集して下さい。
<div class="jumbotron">
<div class="gravatar">
<img src="https://secure.gravatar.com/avatar/?s=50" class="gravatar">
</div>
<p><strong>Name:</strong><%= @user.name %></p>
<p><strong>Email:</strong><%= @user.email %></p>
<p>web/templates/user/show.html.eex</p>
</div>
GravatarURL: https://secure.gravatar.com/avatar/
size指定: ?s=50
size指定: ?s=50
各ユーザIDはどこに入れるのかと言うと・・・以下のようになる。
https://secure.gravatar.com/avatar/#{gravatar_id}?s=50
各ユーザIDに対応して表示したい。
なので、汎用に利用できる関数にする。
なので、汎用に利用できる関数にする。
4. HelperMethod
UserView(web/views/user_view.ex)に定義し、helper関数とする。
名称: web/views/user_view.ex
aliasの追加と関数の作成を行う。
aliasの追加と関数の作成を行う。
alias SampleApp.User
def get_gravatar_url(%User{email: email}) do
gravatar_id = email |> email_downcase |> email_crypt_md5
"https://secure.gravatar.com/avatar/#{gravatar_id}?s=50"
end
名称: web/templates/user/show.html.eex
showテンプレートのimgタグを以下のように書き換える。
showテンプレートのimgタグを以下のように書き換える。
<img src="<%= get_gravatar_url(@user) %>" class="gravatar">
実行して確認すると、以前作成したユーザのGravatarが表示されている。
(おそらくDefault imageだと思うが・・・)
今回はここまでとする。
(おそらくDefault imageだと思うが・・・)
今回はここまでとする。
5. Extra
少しCSSを付け足してみる。
styleで直接記述している。
いやな方は、CSSファイルをご自分で用意して下さい。
styleで直接記述している。
いやな方は、CSSファイルをご自分で用意して下さい。
名称: web/templates/user/show.html.eex
以下のように変更する。
以下のように変更する。
<h2>
<div class="gravatar" style="float: left; margin-right: 10px;">
<img src="<%= get_gravatar_url(@user) %>" class="gravatar">
</div>
<p><%= @user.name %></p>
</h2>
少しデザインが寂しくなった。
だが後に画像と名前の右側には、
記事の一覧が入るので問題はないだろう。
だが後に画像と名前の右側には、
記事の一覧が入るので問題はないだろう。
Speaking to oneself
今回は見出しと文中の幾つかを英語にしてみました。
管理人は、英語が未熟です。
語彙が貧弱で文法が分かりません。
なので簡単な英語しか使えませんがw
語彙が貧弱で文法が分かりません。
なので簡単な英語しか使えませんがw
ちなみにProfileを取得することもできるようだ。
Gravatar - Profile Requests
Gravatar - Profile Requests