Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

Ruby | はてなダイアリーAtomPubをRubyから利用してブログ記事を投稿する

概要

はてなダイアリーAtomPubRubyから利用してブログ記事を投稿する

詳細

まずはatomutilをインストールします。

$gem install atomutil
Successfully installed atomutil-0.1.3
1 gem installed
Installing ri documentation for atomutil-0.1.3...
Building YARD (yri) index for atomutil-0.1.3...
Installing RDoc documentation for atomutil-0.1.3...

atomutilを利用してはてなダイアリーAPIを呼び出すコードをRubyで実装します。

投稿内容はymlとして編集します。
基本的なレイアウトは以下のみ

title: タイトル
contents: |
  記事内容1行目
  記事内容2行目

この投稿内容のymlを下記で作成するサンプルコードの引数として
コマンドを呼び出せば完成です。

サンプルコード

  # encoding: UTF-8
  require 'atomutil'
  require 'yaml'
  require 'pp'

  # ユーザー情報をyamlから取得して定数化
  hatena_settings = YAML.load_file ('..\yaml\user_info.yml')
  USERNAME = hatena_settings["user"]
  PASSWORD = hatena_settings["password"]
  COLLECTION_URI = "http://d.hatena.ne.jp/#{USERNAME}/atom/blog"

  exit unless USERNAME || PASSWORD

  # コマンドからのパラメータは1つのみとする
  def validate_args
    unless ARGV.size == 1
      puts "no args!"
      return false
    end
    true
  end

  class HatenaEntry
    attr_accessor :title, :content

    def load_from_yaml(yaml_path)
      entry_yaml = YAML.load_file yaml_path

      @title = entry_yaml["title"]
      @content = entry_yaml["contents"]
      return self
    end
  end

  # はてなの新規投稿
  def entryHatena(hatena_entry)
    auth = Atompub::Auth::Wsse.new :username => USERNAME, :password => PASSWORD
    client = Atompub::Client.new :auth => auth

    title = hatena_entry.title
    content = hatena_entry.content

    new_entry = Atom::Entry.new(
      :title => title.encode("BINARY", "BINARY"), 
      :content => content.encode("BINARY", "BINARY")
    )

    client.create_entry( COLLECTION_URI, new_entry )
  end

  exit unless validate_args
  entryHatena(HatenaEntry.new.load_from_yaml(ARGV[0]))

出力

投稿結果は当ベージ自体です