「タイムラインを見ずに、Windows Mobile端末でミニブログに投稿できたらなー」という需要は私を含めてそこそこあるらしく、手に持ってすぐ投稿できると確かに便利です。
似たようなものとして、手に持ってすぐウェブ検索できるQuicTodayという強力なTodayプラグインがあるため、これと連携してTwitterに投稿するゲートウェイサイト([Windows Mobile]QuicTodayからTwitterに投稿する試み: 旧式ひとりぶろぐ)や直接投稿するアプリケーション(Twitterにコマンドラインから投稿。 - tmytのらくがき)などが作られています。
残念ながらはてなハイク向けのそういった試みは見つからなかったので、今回はPython CE 2.5を導入してHatena Haiku APIからの投稿を試してみることにします。
Advanced/W-ZERO3[es]ことWS011SHではこんな風です。
「はてなハイク(idページ)で検索」と書いてあるフォームに短文を入れると投稿できます(入力欄をふたつにしてキーワードへの投稿もできます)。投稿なのに「で検索」と書いてあるのはソフトに埋め込みの文字列なのでこれは仕方ない。
今回使ったコードは末尾に置いておきます。使う場合は最低限、user, password, browserの変数を環境に合わせて書き換える必要があります。平文なのでセキュリティは良くないですね。
投稿時のダイヤルアップがQuicTodayとうまく連携しないので、AutoConnectが無いと実用に耐えないと思う。
# -*- coding: utf-8 -*- """ コマンドライン引数に渡って来たクエリのプレフィクスによって ブラウザに投げたりはてなハイクに投げたりするスクリプト。 警告ダイアログにcoreDllを呼ぶのでWindowsMobile専用。 QuicTodayに下記の設定変更が必要 使用するブラウザ: python.exeのショートカットにスクリプトの位置を追記したもの 検索エンジンに追記(1): 名称 はてなハイク(id頁) URL haiku##$1 エンコード shift_jis 検索エンジンに追記(2): 名称 はてなハイク(キーワード) URL haiku#$1#$2 エンコード shift_jis 実行中エラーや投稿失敗の処理は入っていない。 """ import urllib2 def postHaiku(keyword, status, source): server = u"http://h.hatena.ne.jp/" url = u"http://h.hatena.ne.jp/api/statuses/update.json" user = u"xxxx" password = u"xxxx" if status=="": return(u"status is blank.") passman = urllib2.HTTPPasswordMgrWithDefaultRealm() passman.add_password(u"API", server, user, password) authHandler = urllib2.HTTPBasicAuthHandler(passman) opener = urllib2.build_opener(authHandler) urllib2.install_opener(opener) req = urllib2.Request(url) postdata = u"keyword=" + urllib2.quote(keyword.encode("utf-8")) postdata += u"&status=" + urllib2.quote(status.encode("utf-8")) postdata += u"&source=" + urllib2.quote(source.encode("utf-8")) req.add_data(postdata) r = urllib2.urlopen(req) r.close if __name__ == "__main__": import sys import re import ctypes import os.path # Win32の関数 shell = ctypes.windll.coreDll.CreateProcessW mesbox = ctypes.windll.coreDll.MessageBoxW # コマンドライン引数が足りない場合 if len(sys.argv) < 2: mesbox(0, u"please input command line and encoding by shift_jis.\n\ usage:\n\ (1) haiku#keyword#status\n\ (2) url\n", u"notice", None) sys.exit() # ファイルパス定義 command = sys.argv[1].decode("mbcs") browser = u"\\Program Files\\Opera\\OperaLaunch.exe" disconnect = "" #disconnect = u"\\Program files\\harddial\\harddial.exe" # 切断用ソフトのパスを書いておくと実行後ダイヤルアップを切断する #ハイク向けかどうか if command[0:6] != "haiku#": print "Forward to browser." shell(browser, command, None, None, 0, 0, None, None, None, None) else: print "Post to Hatena haiku." # "#"で分割した後、URLエンコードを復元する param = re.split(u"#", command) param = map( lambda x:urllib2.unquote(x).encode("raw_unicode_escape").decode("shift_jis"), param) ret = postHaiku(param[1], param[2], u"QuicToday") if ret != None: mesbox(0, ret, u"error", None) print "Done." if(disconnect != ""): shell(disconnect, "-off", None, None, 0, 0, None, None, None, None) sys.exit()