2009/04/02

Blogger API 再考

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


再考
Blogger API から Postしてみる
# Blogger API 紹介ペーージ
http://code.google.com/intl/ja/apis/blogger
# じっくり読んでみたガイド
Developer's Guide: Protocol
# Google 翻訳 以前にくらべてわかりやすくなったような気がする。
翻訳ページ

It can authenticate using either of two approaches: AuthSub proxy authentication or ClientLogin username/password authentication.

認証には2通りありひとつが AuthSubプロキシ認証、もうひとつが、ClientLogin。認証方法はどちらでもかまわないらしい。(authentication documentation.をみにいくとさらに他の種類の認証方法もあった。)
# 認証の詳細
http://code.google.com/intl/ja/apis/gdata/auth.html
# gdata-1.0.0
gdata-ruby-util
私がダウンロードした Ruby 用ライブラリ gdata-1.0.0 は clientLogin 方式なのだと思う。(lib/Blogger.rb をみると class Base を継承していて class Base は account, password を必要としている。)なので、このライブラリを使用して Blogger.new するってことは自動的に clientLogin 方式を採用したことになる。たぶん。

# gem を通して使わないので gem を解凍
% gem19 unpack gdata-1.0.0.gem
% vi  gdata-1.0.0/lib/gdata.rb
# ここをはずすことで Ruby 1.9.1 でも動くようになる。
# require 'jcode'
# $KCODE = 'UTF8'
# 新しく作る起動用ファイルの冒頭。
# パスに gdata のパスを加える(Ruby 1.9.1 のgem をつかってないので)
% more myapp.rb
# coding: utf-8
$LOAD_PATH.push('/path/to/gdata-1.0.0/lib')
# gdata-1.0.0/lib/gdata.rb
require 'gdata'
require "rexml/document"
require 'time'
############# New 
# インスタンス生成 ダウンロードした gdata-1.0.0 ライブラリの
# Blogger クラスを呼び出す。
bl = GData::Client::Blogger.new
# bl.source には自分のプログラムの名前とバージョン名をいれる。
# いれなくても動くと思う。
bl.source = 'myapp_v1'
# 認証されたかの確認 。
# 認証に失敗した場合は エラーメッセージが表示される。
p token = bl.clientlogin(account, pass)
print "---------- Start\n"
############# Get 1
# 宛先URL : http://www.blogger.com/feeds/profileID/blogs
# profileID と blogID は異なるので注意。私も間違えた。
# profileID の部分は自分のブログの meta タグ内の
# link rel='me' href="http: で始まる url に含まれるID
# 以下を実行すると自分のブログに関連する URL  など
# xmlデータが返ってくる。最初の確認に必要な情報をうるための操作。
# url = 'http://www.blogger.com/feeds/xxxxx/blogs'
# p feed = bl.get(url).to_xml
# puts feed
############# Get 2
# 宛先URL : 
# http://www.blogger.com/feeds/blogID/posts/default?\
# published-min=2008-03-16T00:00:00&published-max=2008-03-24T23:59:59
# blogID は、Get 1で得られた xml に記載されている URL を使う。
# 日付を範囲指定するとその日付範囲内に投稿されたエントリー
#(下書きを含む)の xml がかえってくる。
# min と max で指定
# url = 'http://www.blogger.com/feeds/xxxxx/posts/default?\
published-min=2009-04-01T00:00:00&published-max=2008-04-03T00:00:00'
# res = bl.get(url).to_xml
# puts res
############# Get 3
# 宛先URL : http://www.blogger.com/feeds/blogID/posts/default
# 最新のエントリが[0] その一つ前が[1] (下書き含む)
# feed = bl.get(url).to_xml
# puts feed.get_elements('entry')[0]
############# Post
# 宛先URL : http://www.blogger.com/feeds/blogID/posts/default
#  <app:control xmlns:app='http://www.w3.org/2007/app'>
#    <app:draft>yes</app:draft>
#  </app:control>
# を含めると下書きとして保存される。
# 投稿と同時に公開したい場合はこの要素を削除。
# category ... term="Blogger"/> の 
# attribute term=''  の部分がラベルとなる。複数可。
# str = 上記ガイドの POST 参照 
url = 'http://www.blogger.com/feeds/xxxxx/posts/default'
p res = bl.post(url, str)
p res.status_code
# =>
#<GData::HTTP::Response:...........@status_code=201>
# 201
############# PUTS
# 宛先URL : http://www.blogger.com/feeds/blogID/posts/default/postID
# edit_uri は 宛先URL。Get で獲得したエントリー XMLの 
# entry エレメントにふくまれる link href ... rel='edit' /> の href=''の部分。 
# entry要素は、
# entry xmlns='http://www.w3.org/2005/Atom' gd='http://schemas.google.com/g/2005'
# POST で使用した entry のネームスペースのままだとうまくいかない。
# attribute gd='' が必要のようだ。よくわからないけど。
# edit_uri = 'http://www.blogger.com/feeds/xxxxx/posts/default/xxxxxxx'
# response = bl.put(edit_uri, entry)
# puts response.status_code

# 2009-05-16 category 変更. 改行修正

0 件のコメント: