2009/03/03

Blogger API から Postしてみる

[2011-06-28]
# 最新
https://github.com/midore/mblogger
https://github.com/midore/xblogger
# 関連する記事
# "Blogger"ラベルがついた全ての記事
# 下記は動かないかもしれません。

gData , Blogger API などで検索
http://blogger.ukai.org/2009/02/ruby2009.html
ここでGoogle が提供する gdata-ruby-util の存在を知った。
gdata_on_rails.html
Rails を使用するようだ?けどRails を使っていなくても参考になった。
gdata-ruby-util
から gdata-1.0.0.gem を手動ダウンロード。
% mv gdata-1.0.0.gem.tar gdata-1.0.0.gem
% gem19 unpack gdata-1.0.0.gem
Google Search keyword: gem 展開
参考になったページ
http://d.hatena.ne.jp/walf443/20080920/1221916162
http://blog.s21g.com/articles/1301
ダウンロードした gdata-1.0.0 をRuby 1.9.1 でうごくように少しかきかえた
% vi gdata-1.0.0/lib/gdata.rb 
# 20 行目あたりを編集。
# This is for Unicode "support"
#require 'jcode'
#$KCODE = 'UTF8'
---

# coding: utf-8
# post-gdata.rb
$LOAD_PATH.delete(".")
$LOAD_PATH.push('/path/to/BloggerAPI/gdata/gdata-1.0.0/lib')
require "rexml/document"
require 'time'
require 'gdata'
class MyBlogger
  def initialize(ary)
    @ary = ary
    @client = GData::Client::Blogger.new
  end
  def base(account, pass, url)
    doc = txt_to_xml
    # get token
    @client.clientlogin(account, pass)
    @client.prepare_headers
    # {"GData-Version"=>"2", "User-Agent"=>"GoogleDataRubyUtil-AnonymousApp", "Content-Type"=>"application/atom+xml"}
    @client.post(url, doc)
    #=> GData::HTTP::Response: @body=" ?xml version='1.0' .........@status_code=201
  end
  def txt_to_xml
    title = @ary[0].chomp
    content = @ary[2..@ary.size].join("").strip.gsub("\n","
")
    return make_doc(title, content)
  end
  def make_doc(title, content)
    n = Time.now.iso8601
    doc = REXML::Document.new()
    doc << REXML::XMLDecl.new(version="1.0", encoding="utf-8" )
    entry = doc.add_element("entry", {"xmlns" => "http://www.w3.org/2005/Atom"})
    entry.add_element("published").add_text(n.to_s)
    entry.add_element("title", {'type'=>'text'}).add_text(title)
    con = entry.add_element("content", {'type'=>'html'})
    con.add_text(content)
    return doc
  end
end

# File をあたえる
txt_ary = ARGF.readlines
# この url は 自分の Blogger URL トップページソース内
# link rel='self' type='application/atom+xml' で始まる行のリンク先
url = 'http://midorex.blogspot.com/feeds/posts/default'
# Blogger のアカウントとパスワード
account = 'xxx'
pass = 'xxx'
m = MyBlogger.new(txt_ary)
p m.base(account, pass, url)
30 行目あたりの真意は
content = @ary[2..@ary.size].join("").strip.gsub(改行、<br/>)
このBlogger に投稿すると本当の br と解釈されてしまうためコードが消えてるだけ。
pre とか、code といったタグが出現したらその中の文字列を解釈しないようになっていたら便利なんだけど...
それともなんか方法があるのかな。
Ruby 1.9.1 で実行
% ruby19 post-gdata.rb textdata.txt
textdata.txt の1行目がタイトルに、2行目以下がコンテンツに。
投稿に成功すると@status_code=201 が返る。
+++
追記 
2009-04-02 Blogger API 再考
2009-05-19 category 変更
2009-05-19 作り直しBloggerAPI POST XML
2010-01-06 最新 mblogger

0 件のコメント: