ゴミ箱の中のメモ帳

まだ見ぬ息子たちへ綴る手記

はてなブログ AtomPub APIのPython WSSEサンプルコード

はてなブログにはAtom Publishing Protocol(AtomPub)が実装されており、そのAPIを利用することではてなブログの記事一覧を取得することや記事を投稿、編集、削除することが出来る。

はてなブログAtomPubAPI仕様の簡単な説明といくつかの言語のサンプルコードが掲載されている。が、PerlRubyはサンプルコードとして理解できるものの、3つめのサンプル言語がScalaというのが納得行かない。はてなPython嫌われてるよ。嫌われてるよ。

ということで、簡単なWSSE認証のPythonのサンプルを書いておく。

初めてのPython 第3版

初めてのPython 第3版


いきなりだがサンプルコード。

#!/usr/bin/python

import datetime
import random
import hashlib
import base64
import urllib2

userid = "[UserID]"
apikey = "[AtomPub API Key]"
blogid = "[BlogID]"
apiurl = "http://blog.hatena.ne.jp/%s/%s/atom/entry" % ( userid, blogid)



def make_wsse( userid, apikey):
    created = datetime.datetime.now().isoformat() + "Z"
    nonce = hashlib.sha1( str( random.random())).digest()
    digest = hashlib.sha1( nonce + created + apikey).digest()

    return 'UsernameToken Username="%s", PasswordDigest="%s", Nonce="%s", Created="%s"' % ( userid, base64.b64encode( digest), base64.b64encode( nonce), created)


headers = { "X-WSSE": make_wsse( userid, apikey)}
request = urllib2.Request( apiurl, headers=headers)
response = urllib2.urlopen( request)
print response.read()
userid ログイン等に使うユーザ名
apikey ブログの詳細設定にきさいされているAPIキー
blogid mon0.hatebalog.jp等のURL。ブログの基本設定にブログURLとして記載

これを変更すればそのまま使える。実行すると直近の記事7件(10件?)に関連するAtomが出力される。


はてなブログのAtomPub APIBasic認証、WSSE認証、OAuthに対応している様子。Basic認証は試していないが最も単純に認証を行えるかと思う。だがBasic認証はセキュリティ的にあんまりよくなさそうなのでWSSE認証を選択した。世間的にはOAuthがベターかと思うが、アプリケーションの登録が必要などサンプルコード以外の説明も必要になるためWSSE認証とした。

また、先のAPI説明ページではAtomの解析までおこなっているようだが、このサンプルでは生のXMLを取得するまでとする。このXMLAPI説明ページの内容とは少々異なるため、ドキュメントの内容から少々更新されているのかも知れない。また、ドキュメントにはXMLのフォーマットまで解説されていないので近日中にXMLのフォーマットを確認し記事にしようかと思う。

コードを変更する際は誤ってDELETE命令を出さないように注意。DELETEするともちろん復元することができない。


はてなブログにはエクスポート機能が提供されていないが、このAtomPub APIを用いることで全記事を取得できるようなのでエクスポート機能を実装できるかと思う。これも近日中に作成して記事にしようかと思う。

Pythonスタートブック

Pythonスタートブック

パーフェクトPython (PERFECT SERIES 5)

パーフェクトPython (PERFECT SERIES 5)

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

Professional Web 2.0 Programming (Wrox Professional Guides)

Professional Web 2.0 Programming (Wrox Professional Guides)

  • 作者: Eric van der Vlist,Danny Ayers,Erik Bruchez,Joe Fawcett,Alessandro Vernet
  • 出版社/メーカー: Wrox
  • 発売日: 2006/11/29
  • メディア: ペーパーバック
  • クリック: 11回
  • この商品を含むブログを見る