はてダラ+simple-hatena-modeで複数ブログ投稿&Twitter通知する
hw.plとsimple-hatena-mode.elに以下のパッチを当てれば複数ブログ(ACCOUNT+NAMEというidとして作る)とTwitter通知ができます.Twitter通知のprefixは設定しなければ毎回聞いてきます.ディレクトリ構造とかは適宜読み替えて当ててください.
あとsimple-hatena-modeで編集するファイルがUTF-8じゃない場合はhw.plのUTF-8決め打ちの部分を変えてみてください(twitter通知のprefixがeuc-jpじゃないと文字化けする…)
バグってたのでhw.pl修正
追記
一応patchの当て方を.
- 以下のデータをコピーして,適当なファイル名でsimple-hatena-mode.elのあるディレクトリに保存する(例えばshm.patch)
- patch -p2 < shm.patch を実行
hw.plのほうはp2じゃなくてp1で実行するといいはず.
さらに追記
hw.plはgithubで管理されていたのでforkしてcommitしました.yaotti/hatena-diary-writer · GitHub
simple-hatena-mode.elの更新は 404 · GitHubを見てください.
simple-hatena-mode.el
diff --git a/hatena/simple-hatena-mode.el b/hatena/simple-hatena-mode.el index 03423cf..4768043 100644 --- a/hatena/simple-hatena-mode.el +++ b/hatena/simple-hatena-mode.el @@ -133,6 +133,14 @@ simple-hatena-toggle-debug-modeを実行する。" :type 'boolean :group 'simple-hatena) +(defcustom simple-hatena-option-notify-to-twitter nil + "*ダイアリーに投稿した記事をTwitterに通知する時に付けるprefix。nilならtwitterに通知しない。 + +実行時に、-wオプションとして使われる。" + :type 'string + :group 'simple-hatena) + + (defcustom simple-hatena-process-buffer-name "*SimpleHatena*" "*はてダラを実行するプロセスのバッファ名。" :type 'string @@ -228,8 +236,9 @@ simple-hatena-toggle-debug-modeを実行する。" ;; > 大文字あるいは小文字のアルファベット・0-9の数字・「-」・「_」(いずれも ;; 半角)のいずれかを3-32文字並べたもの(ただし最初の文字はアルファベットで ;; あること)から成る。 +;; 10/05/27 複数ブログのために+を許容 (defconst simple-hatena-id-regex - "^[A-z][\-_A-z0-9]+[A-z0-9]$" + "^[A-z][\-_A-z0-9]+[A-z0-9]\\(\\+[\-_A-z0-9]+\\)?$" "") ;; はてなグループ名の正規表現 @@ -705,9 +714,15 @@ dirが存在しない場合は`simple-hatena-setup'を呼ぶ。" (defun simple-hatena-internal-build-command (flag) "実行可能なコマンド文字列を作成する。" - (let ((flag-list (list flag))) + (let ((flag-list (list flag)) + (twitter-prefix-onetime nil)) (if simple-hatena-option-debug-flag (setq flag-list (cons "-d" flag-list))) (if simple-hatena-option-cookie-flag (setq flag-list (cons "-c" flag-list))) + (if (or (setq twitter-prefix-onetime simple-hatena-option-notify-to-twitter) + (and (setq twitter-prefix-onetime + (read-string "Twitter notification prefix (sth or \"n\"): ")) + (not (string= "n" twitter-prefix-onetime)))) + (setq flag-list (cons (format "-w %s" twitter-prefix-onetime) flag-list))) (simple-hatena-internal-join " " (cons simple-hatena-bin
hw.pl
diff --git a/hw.pl b/hw.pl index 67cba6e..5716738 100755 --- a/hw.pl +++ b/hw.pl @@ -66,6 +66,10 @@ my $filter_command = ''; # Proxy setting. my $http_proxy = ''; +# Notification prefix to Twitter. +my $twitter_notification_prefix = undef; + + # Directory for "YYYY-MM-DD.txt". my $txt_dir = "."; @@ -112,10 +116,11 @@ my %cmd_opt = ( 'M' => 0, # "no timestamp" flag. 'n' => "", # "config file" option. 'S' => 1, # "SSL" option. This is always 1. Set 0 to login older hatena server. + 'w' => undef, # Twitter notification prefix ); $Getopt::Std::STANDARD_HELP_VERSION = 1; -getopts("tdu:p:a:T:cg:f:Mn:", \%cmd_opt) or error_exit("Unknown option."); +getopts("tdu:p:a:T:cg:f:Mn:w:", \%cmd_opt) or error_exit("Unknown option."); if ($cmd_opt{d}) { print_debug("Debug flag on."); @@ -133,6 +138,8 @@ load_config() if -e($config_file); # Override global vars with command-line options. $username = $cmd_opt{u} if $cmd_opt{u}; $password = $cmd_opt{p} if $cmd_opt{p}; +$twitter_notification_prefix = $cmd_opt{w} if defined $cmd_opt{w}; +warn 'twitter prefix: ' . $twitter_notification_prefix; $groupname = $cmd_opt{g} if $cmd_opt{g}; $ua_option{agent} = $cmd_opt{a} if $cmd_opt{a}; $ua_option{timeout} = $cmd_opt{T} if $cmd_opt{T}; @@ -262,7 +269,7 @@ sub login() { } my %form; - $form{name} = $username; + $form{name} = (split /\+/, $username)[0]; $form{password} = $password; my $r; # Response. @@ -331,7 +338,7 @@ sub logout() { } my %form; - $form{name} = $username; + $form{name} = (split /\+/, $username)[0]; $form{password} = $password; print_message("Logout from $hatena_url as $form{name}."); @@ -488,7 +494,11 @@ sub post_it($$$$$$) { print_debug("post_it: $year-$month-$day."); $user_agent->cookie_jar($cookie_jar); - + # XXX: twitter prefix must be EUC-JP... + if ($enable_encode && $twitter_notification_prefix) { + $client_encoding ||= 'UTF-8'; + Encode::from_to($twitter_notification_prefix, $client_encoding, 'EUC-JP'); + } my $r = $user_agent->simple_request( HTTP::Request::Common::POST("$hatena_url/$username/edit", Content_Type => 'form-data', @@ -501,6 +511,8 @@ sub post_it($$$$$$) { title => $title, trivial => $cmd_opt{t}, rkm => $rkm, + twitter_notification_enabled => defined $twitter_notification_prefix, + twitter_notification_prefix => $twitter_notification_prefix, # Important: # This entry must already exist. @@ -696,7 +708,7 @@ sub load_config() { # skip comment. } elsif (/^$/) { # skip blank line. - } elsif (/^id:([^:]+)$/) { + } elsif (/^id:([^:+]+)$/) { $username = $1; print_debug("load_config: id:$username"); } elsif (/^g:([^:]+)$/) {