"Hatenablog" とは
"Hatenablog" とは、はてなブログ API 用の gem です。
使い方
使い方は、作者の方の記事を読めばほぼ分かるかと思います。
併せて README を読むとよいでしょう。
使い方詳細
実際に使ってみました。
1. gem をインストールする
まず gem をインストールします。$ gem install
する方法と Gemfile
を書いて $ bundle install
する方法があるかと思いますが、後者を選択しました。
適当なディレクトリを作って移動
適当なディレクトリを作って移動します。
$ mkdir my_hatenablog $ cd my_hatenablog
Gemfile を作る
その後、以下のような Gemfile
を作ります。いきなりベタ書きでもいいですし、$ bundler init
でひな形を作ってからそれを編集でもよいです。
source "https://rubygems.org" git_source(:github) {|repo_name| "https://github.com/#{repo_name}" } gem 'hatenablog'
bundle install を行う
Gemfile
が書けたら、$ bundle install
をして、gem をインストールします。
$ bundle install
2. Access token と Access token secret を取得する
利用するためには Access token
と Access token secret
を取得する必要があります。ドキュメントに書いてあるとおりですが、まず はてなのアプリケーション登録ページ をよく読んで OAuth Consumer Key
と OAuth Consumer Secret
を取得(作成)します*1。
実際の取得ページ(確認ページ)は こちら です。
それらが取得できたら、本 gem のインストールにより併せてインストールされた get_hatena_oauth_access_token
というコマンドを用いて Access token
と Access token secret
が取得できます。この部分は完全手動でやると面倒なのでありがたいです。
get_hatena_oauth_access_token コマンドを実行する
以下のようにコマンドを実行します。Gemfile
経由でインストールしたので、bundle exec
を付与して実行しています。第一引数が OAuth Consumer Key
で、第2引数が OAuth Consumer Secret
です。
$ bundle exec get_hatena_oauth_access_token HogeHoge== FooBarFoobar=
「コード(PIN)」を取得する
正しい引数でコマンドが実行されると、以下のような URL が次の行に表示されます。この URL をコピペするなりして Webブラウザ で開きます。
Visit this website and get the PIN: https://www.hatena.com/oauth/authorize?oauth_token=XXXXXXXXXXXXXXXXXXXX
すると、以下のように承認画面が出てきます。
問題なければ承認して「コード(PIN)」を取得します。コピペ用に、コードはコピーしておきます。
コード(PIN)を貼り付けて、Access token と Access token secret を取得する
そしてターミナルに戻り、Enter the PIN:
と表示されている後ろに、コードを貼り付けて Enter を押します。入力されたコードが正しければ、Access token
と Access token secret
が得られると思います。以下の画像のようになります*2。
3. コードを書く
あとは Ruby のコードを書くだけです。ドキュメント を読むのがいいかと思いますが、簡単なサンプルを書いてみます。
require 'hatenablog' する
hatenablog
の gem を利用するために、まずは require
します。全てのコードにおいて必要な記述です。
require 'hatenablog'
client を定義する
はてなブログ へのアクセスの主体となる client を定義します。全てのコードにおいて必要な記述です。
client の設定情報は YAML に書いて分割する方が好ましいと思いますが、簡単なスクリプトを想定して、コードに直接埋め込む形を取ってみます。
client は次のコードで定義できます。これまでに取得した各種の値を設定します。user_id
は「はてなのユーザ名」です(はてなにログインする際に入力するユーザ名)。
blog_id
は「サブドメインを含めた、ブログのドメイン全体」です。id
という接尾語があったため、最初はサブドメインだけを指すのかな、と思っててハマりました*3。この blog_id
を変更することで、一人で複数のブログを作成している場合の使い分けができます。
client = Hatenablog::Client.new do |config| config.consumer_key = 'YOUR_CONSUMER_KEY' config.consumer_secret = 'YOUR_CONSUMER_SECRET' config.access_token = 'YOUR_ACCESS_TOKEN' config.access_token_secret = 'YOUR_ACCESS_TOKEN_SECRET' config.user_id = 'YOUR_USER_ID' config.blog_id = 'hogehoge.hatenablog.com' end
ブログのタイトル と ブログの作成者名 を取得する
client
が定義できたので、試しに「ブログのタイトル名」と「ブログの作成者名」を取得して動作確認をしてみます。以下のコードを書きます。
puts client.title puts client.author_name
上記のコードにより「ブログのタイトル名」と「ブログの作成者名」が表示されれば client の設定はうまくいっています。
記事のタイトル一覧を取得する
client
を定義して、記事のタイトル一覧を取得してみます。以下のコードを書きます。
client.entries.each do |entry| puts "#{entry.id}: #{entry.title}" end
上記のコードにより、以下のような表示が得られます。
26006613500000010: こんにちは 26006613500000009: おはようございます 26006613500000008: こんばんは 26006613500000007: いただきます 26006613500000006: ごちそうさまでした 26006613500000005: おやすみなさい 26006613500000004: お元気ですか 26006613500000003: 体調はいかがですか? 26006613500000002: 今日は暑いですね 26006613500000001: おつかれさまでした
今回のコードでは、「対象としているのは公開記事であること」、「ブログの1ページ目に表示される量の記事数を取得していること」という点には注意が必要です。
記事を投稿してみる
client
を定義して、記事を投稿してみます。以下のコードを書きます(ドキュメントのままです)。
entry = client.post_entry( 'Example Title', # title 'This is the **example** entry.', # content ['Ruby', 'Rails'], # categories 'yes' # draft )
post_entry
メソッドの第四引数が yes
となっていますので、このコードを実行すると記事は「下書き」として保存されます*4。
私がプチハマりしたところはカテゴリの指定の箇所です。「カテゴリを設定しない」場合には、空の配列([]
)を引数として与える必要があります。
nil
を与えてみたり、''
を与えてみたりしても一向にうまくいかなくハマりました。「each
メソッドがない」とのエラーメッセージが出ますので、空の配列を与えればよいということが分かります。エラーメッセージ大事*5。
記事を更新する
client
を定義して、記事を更新してみます。以下のコードを書きます(ほぼドキュメントのままです)。
client.update_entry( '26006613500000003', 'Updated Title!!!!!', 'This is the **example** entry.', [], # categories 'no' # draft? )
記事を更新をするためには記事の id
が必要です。前述の entries
メソッドを用いるなど、取得方法はいくつかあると思います。なお、id
の指定は 文字列 でも 数値 でもどちらでも問題ないです。
他にもいろいろできる
その他、はてな側で用意してくれている操作がこの gem を通じて行えます。公式ドキュメント に詳しく書いてありますので、探してみましょう。
(補足)画像や動画を記事に貼り付けるには
画像や動画を記事に貼り付けるためにはいくつかの方法があると思います。私は Gyazo の gem を使って、Gyazo にファイルをアップロードし、その際に戻り値で得られる URL を本文に埋め込んで画像を貼り付けるという方法を用いています。