くろねこ日記

ソフトウェアに関する技術メモが多いです.

はてなブログに投稿するスクリプトhapomaをつくってみた

はじめに

このはてぶ自動で2getツールの記事を読んで,はてなAPIを使いたくなりました.

運用厳禁:はてブ自動2getツールを作ってみた - 今日学んだこと

ネタを色々と悩んでいたのですが,今回ははてなブログに投稿したり更新することができるスクリプトをつくってみました.コードの話題は今回はあまりありません(つくってみた自慢ですねw).

HAYASAKA-Ryosuke/hapoma · GitHub

hapomaと言います.HAtenaPOstMAnというつもりでつけました.

setup.pyもまだ作ってないような,途中ですが,基本的な機能は完成したので暖い目で見てください(笑)

内容

まずはざっくりと行ないたいことを決定.

  • 手元にあるmarkdownファイルをはてなブログに投稿したい
  • でも,いきなり投稿するのは怖いので下書きとして投稿したい
  • 投稿したブログは手元にあるファイルを修正して送信すれば勝手に上書きされるようにしたい.

と,ざっくりこんな感じです.

なので,これらを満たす機能としては,

  • はてなブログに手元の記事を下書きとして投稿する機能
  • 一度投稿したブログか新規で書いたかを判別して,上書きか新規投稿か自動で検出する機能

があれば良いと重います.

今回使用したツールとライブラリを以下に示します.

  • ツールやライブラリ
    • Python・・・今回使用する言語
    • LevelDB・・・Google製のKVS
    • plyvel・・・pythonからLevelDBを操作するライブラリ
    • requests・・・urllib2よりも賢いライブラリ
    • requests-oauth・・・requestsからoauth認証を弄るためのライブラリ

LevelDBは投稿した直後やDBファイルが無いときにはてなブログの記事IDと記事タイトルを取得して貯めるためのものです. このときタイトルをKey,記事IDをValueにしてます. こうすることで編集しているファイルのタイトルをlevedbに渡してIDが存在するかどうかで,新規投稿か上書きかを決定するようにしました.

requestsはurllib2を便利にしたライブラリで,これに関係するoauthライブラリも便利に使えそうなので今回採用しました.

OAuthのheaderを見る方法

oauthはキーやトークンを必要とするために,正しいフォーマットで送信できているのか不安になります.

その場合にどうデバッグしたかメモしておきます.

まずはOAuthのフォーマットをチェック

oauth = OAuth1Session(oauth_consumer_key, oauth_consumer_secret, access_token, access_token_secret)
print(oauth.headers)

まとめ

hapomaというはてなブログに投稿するスクリプトを作った話を書いた

このブログはhapomaをつかって送信している.

謝辞

OAuth周りではTwitter上で@nakazyeさんにアドバイス頂きました.

ありがとうございました!