はてなダイアリーライター Version 1.4.1 を試してみた

以前に試したときにはどういうわけだかうまくいかなかってけど,今度はうまくいったので(ちょっとはまったけど),メモ。

はてなダイアリーライター本体はここから(Version 1.4.1)。マニュアルもここ。

まずは試してみる。テスト用の日記ファイルを作って,設定ファイルはなしでやってみたらすんなり成功。ちょっと拍子抜け。

^o^ >perl hw.pl
WARNING: Crypt::SSLeay is not found, use non-encrypted HTTP mode.
Username: takatoh
Password: ********
Login to http://www.hatena.ne.jp/login as takatoh.
Login OK.
Post 2007-07-08.
Post OK.
Logout from http://d.hatena.ne.jp as takatoh.
Logout OK.

けどちょっと待て。Cyrpt::SSLeayが無いから暗号化しないモードを使うといってる。

……それで思い出した。以前うまくいかなかったのはこのあたりだった。

というわけで,このへんのページを参考に改めてチャレンジ。

まずはOpenSSLから。上のリストの2番目のページからインストーラ(最新版 Win32OpenSSL v0.9.8e)をダウンロードしてインストールするだけ。

Crypt::SSLeay のほうは上のリストの3番目のページにある「LWPで、「https://」で始まるSSL使用サイトにアクセスできますか?」を参考にした。ppmコマンドでインストールするんだけど,モジュール名ではなくPPDファイル名を指定する必要があるらしい(GUI版ppmのリストに出てこない)。ActivePerl 5.8.8 を使っているので:

^o^ >ppm install http://theoryx5.uwinnipeg.ca/ppms/Crypt-SSLeay.ppd

後半,dllをインストールするか聞いてくるので yes と答えてインストールする。デフォルトが[no]になってるので注意。

さて,改めて試してみよう。ついでに設定ファイルも書いておく。

id:takatoh
password:********
cookie:cookie.txt
proxy:http://proxy:8080/
client_encoding:Shift_JIS
server_encoding:EUC_JP

これでOKのはず。

^o^ >perl hw.pl
Login to https://www.hatena.ne.jp/login as takatoh.
Login OK.
Post 2007-07-08.
Old cookie. Retry login.
Login to https://www.hatena.ne.jp/login as takatoh.
Login OK.
Old cookie. Retry login.
Login to https://www.hatena.ne.jp/login as takatoh.
Login OK.
ERROR: try_it: Check username/password.

なんでエラーになるんだ!!……orz

えーと。いろいろ試した結果何とか動くようになった。これについてはエントリーを改めて書く。

さきに書いておくと,インストールや設定ファイルは上の通りで大丈夫(たぶん)。問題はcookie.txtだった。--(つづく)

はてなダイアリーライター Version 1.4.1 を試してみた(その2)

id:takatoh:20070708:hw のつづき。Crypt::SSLeayをインストールしたらエラーになった件。

いろいろ試した結果,クッキーファイル(cookie.txt)の有無と関係が有ることがわかった。表にするとこんな感じ。

cookie.txtあり cookie.txtなし
Crypt::SSLeayなし OK OK
Crypt::SSLeayあり OK エラー

Crypt::SSLeayが無い場合にはcookie.txtの有無に関わらずOKなんだけど,これは暗号化されないってことなんで非推奨。Crypt::SSLeayをインストールするとcookie.txtが無い場合にエラーになる。無けりゃ作ってくれるはずなんだけど,ここで失敗しているように見える(最後から2行目)。……ちがうのかな。

-d オプションをつけて実行した結果:

^o^ >perl hw.pl -d
DEBUG: Debug flag on.
Hatena Diary Writer Version 1.4.1
Copyright (C) 2004,2005 by Hiroshi Yuki.
DEBUG: Loading config file (config.txt).
DEBUG: load_config: id:takatoh
DEBUG: load_config: password:********
DEBUG: load_config: cookie:cookie.txt
DEBUG: load_config: proxy:http://proxy:8080/
DEBUG: load_config: client_encoding:Shift_JIS
DEBUG: load_config: server_encoding:EUC_JP
DEBUG: main: files: current dir (.): ./2007-07-08.txt ./touch.txt
DEBUG: login: proxy for http: http://proxy:8080/
DEBUG: login: proxy for https: http://proxy:8080/
Login to https://www.hatena.ne.jp/login as takatoh.
DEBUG: login: 200 OK
DEBUG: login: $r = <HTML></HTML>
Login OK.
DEBUG: login: Making cookie jar.
DEBUG: login: $cookie_jar =
DEBUG: read_title_body: input: ./2007-07-08.txt
DEBUG: Convert from Shift_JIS to EUC_JP.
Post 2007-07-08.
DEBUG: create_it: 2007-07-08.
DEBUG: create_it: 302 Moved
DEBUG: create_it: Location: /takatoh/
DEBUG: create_it: returns 0 (ERROR).
DEBUG: try_it: update_diary_entry: CREATE.
Old cookie. Retry login.
DEBUG: login: proxy for http: http://proxy:8080/
DEBUG: login: proxy for https: http://proxy:8080/
Login to https://www.hatena.ne.jp/login as takatoh.
DEBUG: login: 200 OK
DEBUG: login: $r = <HTML></HTML>
Login OK.
DEBUG: login: Making cookie jar.
DEBUG: login: $cookie_jar =
DEBUG: create_it: 2007-07-08.
DEBUG: create_it: 302 Moved
DEBUG: create_it: Location: /takatoh/
DEBUG: create_it: returns 0 (ERROR).
DEBUG: try_it: update_diary_entry: CREATE.
Old cookie. Retry login.
DEBUG: login: proxy for http: http://proxy:8080/
DEBUG: login: proxy for https: http://proxy:8080/
Login to https://www.hatena.ne.jp/login as takatoh.
DEBUG: login: 200 OK
DEBUG: login: $r = <HTML></HTML>
Login OK.
DEBUG: login: Making cookie jar.
DEBUG: login: $cookie_jar =
ERROR: try_it: Check username/password.

結局,Crypt::SSLeayをインストール/アンインストールしたり,設定ファイルを書き換えてみたりしてるうちにできた(つまりCrypt::SSLeayなしの時にできた)クッキーファイルがあって動くようになったので今回はOKとする。Crypt::SSLeayありの状態でクッキーファイルを作る方法はわからない。

なんだか中途半端だけど時間切れだ。

追記:PCの環境

  • Windows XP
  • ActivePerl 5.8.8
  • Crypt::SSLeay 0.53

追記2:proxyなしの場合

hyukiさんのアドバイスに従ってproxyの無い環境で試してみたら,正しく投稿できた。どうやら次の3つが重なったときにエラーになるらしい。

  • Crypt::SSLeay あり
  • クッキーファイルがない
  • proxyを利用