• Emacs と Perl を使って,XML-RPC 経由で Movable Type のエントリを編集するツールを配布しています.良かったら持っていってください.( 2004/10/24 update) mapae logo
  • Movable Type で footnote*1 を生成する plugin を配布しています.良かったら持っていってください.( 2004/03/04 update )
  • その他の配布物等

*1: 脚注.よ〜するに,こ〜ゆ〜やつです.

Movable Type:: Emacs フロントエンド「mapae」

| コメント(20) | トラックバック(30)
mapae
mapae (24 KB)

Movable Type:: Emacs フロントエンド「mapae *1」は,Emacs (Meadow を含む) で Movable Type のエントリを投稿,修正するツールです.また,sugi 氏が xyzzy 対応版に移植してくださっています.現在の機能は以下の通りです.なお,基本機能については,@Nifty によるココログにも対応しています.

  • 基本機能
    • エントリの新規投稿,修正
    • カテゴリ指定
    • タイトル一覧取得
    • 更新 Ping 送信
      • 独自に送信機能を備えています.この機能により, 投稿後正しく表示されることを自分の目で確認してから 更新 Ping を送信することができます.)
    • Trackback URL 取得
      • Trackback Ping の URL を直接指定するだけでなく,それが rdf で含まれている URLから取得 できます.それを用いて Ping を送信するのは,Movable Type の仕事です.
    • ファイルのアップロード
    • XML 整形式の確認 *2
    • はてなダイアリーキーワードへのリンク生成
    • 簡易プレビュー
  • mapae.pm 拡張機能

*1: 長らくちゃんとした名前がありませんでしたが,とりあえず 「mapae」とつけてみました.一連のエントリのタイトルが「Movable Type と Perl と Emacs と」だったもので.
*2: XHTML で書いている場合は便利でしょう.

目次

1. はじめに

Movable Type:: Emacs フロントエンド「mapae *1」は,Emacs で Movable Type のエントリを投稿,修正するツー ルです.現在の機能は以下の通りです.

  • 基本機能
    • エントリの新規投稿,修正
    • カテゴリ指定
    • タイトル一覧取得
    • 更新 Ping 送信
      • 独自に送信機能を備えています.この機能により, 投稿後正しく表示されることを自分の目で確認してから 更新 Ping を送信することができます.)
    • Trackback URL 取得
      • Trackback Ping の URL を直接指定するだけでなく,それが rdf で含まれている URL *2から取得 できます.それを用いて Ping を送信するのは,Movable Type の仕事です.
    • ファイルのアップロード
    • XML 整形式の確認 *3
    • はてなダイアリーキーワードへのリンク生成
    • 簡易プレビュー
  • mapae.pm 拡張機能

mapae はユーザインターフェイス処理を中心に行う Emacs Lisp で書かれた mapae.el と,XML-RPC 処理を中心に行う Perl で書かれた mapae.pl で構成されています. *4

また,あらかじめ断っておきますが,所詮は日曜プログラミングなので,完璧な完成度は求めないでください.そもそも,「私が便利に使えればそれで良い」程度にしか考えていませんので.しかし,「このようにしたほうが使いやすい」というご意見は歓迎します.

1.1. 開発の経緯

Movable Type は XML-RPC という機能を持っています.この機能を使えば,Web で直接書き込む以外に XML-RPC に対応したアプリケーションから書き込むことも可能です.幾つかメジャーなアプリケーションがあるようですが,Emacs で書き込みができる mt.el というものもあります.ところがこの mt.el,日本語環境では使えないのです.厳密に言えば,mt.el が依存している他のプログラムが多バイト文字を扱えないのです.

何とかして日本語に対応できないものかとしばらく頑張ってみたのですが,Emacs Lisp *5のことはほとんど分からない上,結構深いところを修正しないといけないようなので,断念してしまいました.

しかし,そこでふと気付きました.「全て Emacs で処理する必要はない」ということに.そこで,XML-RPC の処理は使いなれた Perl にまかせることにしたのです.というわけで,Movable Type と Perl と Emacs という組合わせで作り始めたのです.


*1: 長らくちゃんとした名 前がありませんでしたが,とりあえず 「mapae」とつけてみました. 一連のエントリのタイトルが「Movable Type と Perl と Emacs と」だったも ので.
*2: 一般的には permalink
*3: XHTML で書いている場合は便利でしょう.
*4: なぜすべて Emacs Lisp で書かれていないのかというと,...単に私が書き方を知らなかっただけです.
*5: プログラミング言語の一つ.Emacs のほとんどの機能は,これで書かれています.

2. 導入

2.1. 下準備

動作に必要な Perl モジュール「SOAP::Lite」がインストールされているかどうかを確認します.以下のコマンドを実行してみてください.

$ perl -e 'use SOAP::Lite'

両方のコマンドでエラーが出なければ大丈夫です.エラーがでた場合は,それぞれ以下のコマンドでモジュールをインストールしてください.(root アカウントで)

# perl -MCPAN -e 'install SOAP::Lite'

インストールの途中で何か聞かれるかもしれませんが,エンターの連打で多分大丈夫だと思います.

2.2. ダウンロード

本プログラムについて,一応私は著作権を主張しますが,改変,再配布等は自由にして頂いて構いません *6.なお,私は本プログラムの動作について,一切の責任は負いません.各自の責任においてご利用下さい.

※ mapae.pm 拡張機能を利用する場合は,"mapae :: mapae.pm 拡張" を参照してください.

2.3. mapae.pl の設定

「mapae.ph」「mapae.pl」を任意のディレクトリに置きます.これらは同じディレクトリにある必要があります.

次に,mapae.ph の内容を適切な値に変更します.

$RPCSERVER
mt-xmlrpc.cgi の url
$RPCPROXY
$RPCSERVER へのアクセスにプロキシを経由する必要がある場合, 「http://example.or.jp:8080/」のように入力します.プロキシを経由 する必要がない場合は,そのままで構いません.
$BLOGID
Movable Type のBlog の ID.Blog が一つしかない場合は,1であることが多いでしょう.
$USERNAME
Movable Type のユーザ名
$PASSWORD
Movable Type のパスワード

また,mapae for xyzzy をお使いの方は,$CHARSET{emacs}の設定を有効にしてください.

その他にも設定項目がありますが,とりあえずは,無視しておいて構いません.

ここで,設定が正しいかどうかを確認します.mapae.pl を置いたディレクトリで,以下のコマンドを実行してください.

$ perl ./mapae.pl getRecentPost

正しく設定されていれば,現在登録されている最新のエントリが表示されるはずです.なお,非 EUC 環境では文字化けが起きますが,ここでは無視しておいて構いません.

2.4. mapae.el の設定

「mapae.el」を,任意のディレクトリに置きます.

次に,~/.emacs 等に設定を追加します.

(require 'mapae "/home/foo/lisp/mapae.el")
(setq mapae-perl-command "/usr/bin/perl")
(setq mapae-command "/home/foo/perl/mapae.pl")
(global-set-key "\C-cwn" 'mapae-new-post)
(global-set-key "\C-cwr" 'mapae-get-recent-post)
(global-set-key "\C-cwg" 'mapae-get-post)
(global-set-key "\C-cwl" 'mapae-get-recent-titles)

なお,下線部はそれぞれ適切なディレクトリに変更してください.また,Emacs の言語環境が japanese でない場合は,正しく動作しない場合があります.その場合は,上記の設定より前に以下の行を記述してください.

(set-language-environment 'japanese)

ここで Emacs を再起動します.再起動できたら,Ctrl-c w r(Ctrl を押したまま w,続いて Ctrl をはなして w r)と入力します.正しく設定できていれば,登録されている最新のエントリが読み込まれ,表示されるはずです.

2.5. その他

その他,以下のディレクトリを mapae.pl と同じディレクトリに必要に応じて作成してください *7
var
はてなダイアリーキーワードリンク生成機能を使う場合
tmp
簡易プレビュー機能を使う場合 *8

*6: しかし,本来自身のために作ったので,改良したら私にも使わせてもらえると嬉しいです.
*7: これらのディレクトリは mapae.pl の実行権限で書き込める必要があります.また,ディレクトリ名は関連する設定で変更可能です.
*8: mapae.ph 拡張によるプレビューでは必要ありません.

3. 画面構成

※以下,標準以外の設定では,この通りでないことがあります.

以下の内容の繰り返しにより構成されてます.

-----
(要素名):
(内容)

たとえ内容が 1行だけであっても,要素名と同じ行に書くことは出来ません.

なお,本文中等に上記のような文字列を記述したい場合は,行頭や行末にスペースを入れる,一部をエンティティ化する等により,各要素のヘッダとして解釈されるのを回避してください.

3.1. 作成日時

作成時刻欄を空欄にしておくと,サーバ側で登録時刻が自動的に指定されます.

3.2. Comment/Trackback 許可設定

「0」が不許可,「1」が許可です.

4. 各コマンド・キーバインドの説明

※「☆」がついているものは,mapae.pm 拡張の導入が必要です.

4.1. グローバルキーバインド

\C-cwn
新規エントリを書くためのテンプレートを読み込みます.
\C-cwr
既に登録されている最新のエントリを取得します.
\C-cwg
指定された番号のエントリを取得します.
\C-cwl
タイトル一覧を取得取得します.
\C-u(NUM)\C-cwl
タイトル一覧を(NUM)件取得取得します.
(バインドなし) mapae-blogset
設定セットを変更します.

4.2. 編集モード

\C-cws
現在編集しているエントリを登録します.また,仮登録されたカテゴリがあれば,それも登録します *9
※Trackback が指定されていても,送信されません
\C-u\C-cws
現在編集しているエントリを登録し公開します.また,仮登録されたカテゴリがあれば,それも登録します *10.TrackBack についても指定されている場合は,それを送信します.
\C-c\C-k
登録処理を中止します.
\C-cwu
ファイルをアップロードします.詳しくは,後述の"ファイルのアップロード"をご覧下さい.
\C-cwp
更新 ping を送信します.
(失敗時のエラーで URI の先頭に「!」がついているものは, 接続でき なかったものです.)
※ mapae.ph において,後述の更新 Ping 関連の設定が必要です.
\C-cww
整形式であることを確認します.(この機能は,XML や XHTML でエント リを書いている場合でなければ意味が無いでしょう.)
※Perl の XML::Parser モジュールが必要です.
\C-cwc
現在開いているエントリのカテゴリを設定します.
\C-cwv
プレビュー用のページを構築し,そのページをブラウザで開きます.
詳しくは,後述の"プレビュー/簡易プレビュー"を参照してください.
C-cwh
はてなダイアリーキーワードをはてなダイアリーキーワードへのリンクに変換します.mapae.ph の $VAR_DIR で指定されているディレクトリにファイルを書き込める必要があります.まず,全ての対象キーワードを抽出するため,長いエントリではハングアップしたように見えるかもしれません.
C-cwM-h
リージョンに対して変換を行うこと以外は上と同じです.
C-cwH
はてなダイアリーキーワードへのリンクを削除します.
C-cwM-H
リージョンに対して削除を行うこと以外は上と同じです.
(バインドなし) mapae-hatena-keyword-hide
はてなダイアリーキーワードにリンクされている部分を下線部で表示し,タグ部分を隠します.
(バインドなし) mapae-hatena-keyword-show
はてなダイアリーキーワードにリンクされていて隠されている部分を見えるようにします.
(バインドなし) mapae-change-text-filter
テキストフィルタ(mt_convert_breaks)の値を変更します.この機能を使うためには,mapae.ph でこれに関する設定を有効にしなければなりません.なお,変更時にエントリに挿入される文字列が予期したものと違う場合がありますが,これは Movable Type がテキストフィルタを識別するための文字列であり,正常です.

4.2.1. ファイルのアップロード

ミニバッファでアップロードするファイルと, リモートでのファイル名を指定します.リモートでのファイル名は Blog があるディレクトリからの 相対パスで指定します.ディレクトリのみを指定した場合は,アップロードファイルのファイル名が補完されます.アップロードに成功すると,キルリングにアップロードしたファイルを 参照する URL が入ります.

また,Image::Magick モジュールがインストールされており,かつアップロードされたファイルが画像ファイルであれば,サムネイルを作成するかどうかを聞いてきます.サムネイルのサイズは,後述の設定による上限値を元に決定されますが,手動で決めることも可能です.サイズは,「幅x高さ」で指定します.幅,高さのいずれかを自動決定させたい場合は,「幅x」または「x高さ」と指定します.

さらに,以下の条件が全て満たされる場合,画質調整のウィンドウが開き,サムネイルの画質調整を行うことができます.

  • Tk モジュールがインストールされている
  • 画像形式が,JPEG または PNG である
  • mapae-use-tk が真である
  • Emacs(または Meadow)がターミナルで動作していない

4.3. プレビュー/簡易プレビュー

mapae では,2通りのプレビュー方法が用意されています.一つは「(完全な)プレビュー」,そしてもう一つは「簡易プレビュー」です.どちらのプレビューが用いられるかは,XML-RPC サーバの URL によって決まります.即ち,ココログの XML-RPC サーバの場合は「簡易プレビュー」,それ以外であれば「(完全な)プレビュー」が用いられます *11.また,コマンドの先頭に C-u を入力することにより,この選択を一時的に反転することができます.

以下に,二つのプレビューの違いを説明します.

4.3.1. プレビュー

mapae.pm 拡張を用いて,サーバ側に完全なプレビューを作成します.macros プラグイン等を用いていて,エントリの内容が動的に変更される場合でも,正確なプレビューを作成することができます.

一方で,ココログなど mapae.pm 拡張が導入できない環境では用いることは出来ません.

詳しくは,"mapae :: プレビュー機能" を参照してください.

4.3.2. 簡易プレビュー

ローカルにプレビューファイルを作成します.全てローカルで作成するので,macros プラグイン等を用いていて,エントリの内容が動的に変更される場合は,正しく反映されません.

後述のカスタマイズ変数において,ブラウザ表示関連の設定が必要です.また,簡易プレビューのテンプレートについては,後述の"簡易プレビューテンプレート" を参照してください.

4.4. カテゴリモード

スペース
ポインタがある行の選択/非選択状態を反転します.
P
ポインタがある行のカテゴリを主カテゴリに設定します.
\C-c\C-c
設定中のカテゴリを登録します.まだ一度も登録されていないエントリに対して登録しようとした場合は,仮登録します *12.これは,そのエントリのバッファに記憶されるものであり,バッファを破棄した,一度保存して開き直した等の場合は,仮登録した情報は破棄されます.
また,まだ一度も登録されていないエントリから開かれたカテゴリモードは,そのエントリが初めて登録された時以降は無効となります.この場合は,カテゴリモードを開き直してください.
\C-u\C-c\C-c
設定中のカテゴリを登録し公開(再構築)します.まだ一度も登録されていないエントリに対して登録しようとした場合は,「\C-c\C-c」を実行したときと同じ動作を行います.
q
このモードを終了します.
g
現在の状態を破棄し,再取得します.

4.5. タイトル一覧モード

f
ポインタがある行のエントリを取得します.
c
ポインタがある行のカテゴリを取得します.
o
ポインタがある行のエントリをブラウザで表示します.
※ .emacs 等において,後述のブラウザ表示関連の設定が必要です.
D
ポインタがある行のエントリを削除します.
m
ポインタがある行のマークを反転します.
A
全てをマークします.
U
全てのマークを解除します.
R
☆ マークがついているエントリを再構築します.
※この機能を使うためには,サーバに mapae.pm 拡張 が導入されている必要があります.
K
再構築を中止します.
\C-uR
Movabel Type XML-RPC API を用いて,マークがついているエントリを再構築します.
1エントリ毎に再構築するので,効率は著しく悪いです.
g
一覧を再取得します.それまでつけられていたマークは破棄されます.
q
このモードを終了します.

*9 *10: 現在のところ,カテゴリ登録中は他の操作はできません.
*11: 後述の変数 $LOCAL_PREVIEW によって,ココログ以外でも簡易プレビューを用いるように設定できます.
*12: これは,Movable Type XML-RPC API の仕様上,未登録の(即ち,エントリ ID を持っていない)エントリのカテゴリは設定出来ないためです.このため,「仮登録」として記憶しておき,エントリを登録したとき(即ち,エントリ ID を取得したとき)に改めてカテゴリの登録を行います.

5. カスタマイズ変数

5.1. mapae.pl

※全ての設定変更は,mapae.ph で行ってください.

5.1.1. 全般

$RPCSERVER
mt-xmlrpc.cgi の url.
$RPCTIMEOUT
XMLRPC のタイムアウト秒数.(defult:40)
$RPCPROXY
$RPCSERVERにアクセスするために必要なプロキシ.
$BLOGID
対象とする Blog ID. (default:1)
$USERNAME
Movable Type のユーザ名
$PASSWORD
Movable Type のパスワード
$VAR_DIR
キャッシュデータ等を保存するディレクトリ.絶対パスか,mapae.pl からの相対パスで指定.現在のところ,はてなダイアリーキーワードのキャッシュ保存にのみ使用.(default: var)
%CHARSET
mapae 各部で用いる文字コード.通常は変更する必要はありません.
rpc
XML-RPC サーバとの通信に用いる文字コード
perl
perl 内部で扱う文字コード
emacs
Emacs(Meadow,xyzzy)との通信に用いる文字コード
default:
%CHARSET = ( 'emacs' => 'euc-jp', );
例(Emacs での文字コードを shift-jis にする場合):
$CHARSET{emacs} = 'shift-jis';

5.1.2. 表示関連

$ELEMENTSEPARATOR
各要素を区切るセパレータ.mapae.el の mapae-separator と同じ値でなければなりません.(default:-----)
@ELEMENTLABEL
XMLRPC で用いる要素名と表示する要素名とのマッピングを配列で指定します.編集モードで各要素が表示される順序は,ここで指定した順となります.
label
XMLRPC で用いる要素名
type
データの型
necessary
真のであれば,データがない場合は空文字列があるものとして扱われます.現在のところ,type が「string」である要素以外での動作は未定義です.
check
真であれば,整形式チェックの対象になります.
hatena
真であれば,はてなダイアリーキーワード変換の対象になります.
default:
( POST_ID     => { label=>'postid', type=>'int' },
  TIMESTAMP   => { label=>'dateCreated', type=>'string',
                   necessary=>1 },
  TITLE       => { label=>'title', type=>'string',
                   necessary=>1 },
  DESCRIPTION => { label=>'description', type=>'string',
                   necessary=>1, check=>1, hatena=>1 },
  EXTENDED    => { label=>'mt_text_more', type=>'string',
                   necessary=>1, check=>1, hatena=>1 },
  EXCERPT     => { label=>'mt_excerpt', type=>'string',
                   necessary=>1 },
  TRACKBACK   => { label=>'mt_tb_ping_urls', type=>'array'} )

5.1.3. タイトル一覧関連

$USE_GETRECENTPOSTS
真の場合,mt.getRecentPostTitles の代わりに metaWeblog.getrecentPosts を使います.

5.1.4. 更新 Ping 関連

$BLOGNAME
Blog の名前.
$BLOGURL
Blog の URL
@PINGURL
Ping を送信する URL の配列.
例:
@PINGURL
  = ( 'http://www.blogpeople.net/servlet/weblogUpdates',
      'http://ping.myblog.jp/' );
$HTTP_PROXY
更新 Ping を送信する際にプロキシを経由する必要がある場合,ここに指定します.通常は $RPCPROXY と同じなので,
$HTTP_PROXY = $RPCPROXY;
と指定することになるでしょう.
$HTTP_TIMEOUT
更新 Ping を送信する際のタイムアウト秒数を指定します.

5.1.5. Trackback URL 取得関連

%DISCOVER_TB
Trackback URL を取得する条件 *13を指定します.これを指定しない場合は,Trackback URLの取得を行いません.以下の例では,スペースで始る指定に対し Trackback URL の取得を行い,取得の際には,そのスペースを除去します.
例:
%DISCOVER_TB
  = ( pattern=>'^ ', remove=>1 );
その他
Trackback URL を取得する際のプロキシ, タイムアウトは前述の$HTTP_PROXY,$HTTP_TIMEOUTに従います.

5.1.6. ファイルアップロード関連

$THUMBNAIL_POST_PROCESS
サムネイル作成時,サイズ変更に加え別の処理を行いたい場合は,その処理をする関数のリファレンスを指定します.ここで指定された関数には,サイズの変更直後の Image::Magick オブジェクトが渡されます.
$NEW_MEDIA_OBJECT_URL_FILTER
ファイルをアップロードしたときにキルリングに格納される URL のフィルタ関数へのリファレンスを指定します.フィルタ関数の戻り値は,文字列でなければなりません.フィルタ関数へは,以下の値がハッシュで渡されます.「ref_」で始る値以外は,直前に処理されたファイルに関する値であり,例えば,サムネイルアップロード時の「width」は,サムネイルの幅を指します.この関数は,画像がアップロードされる度に呼び出されます.つまり,ある画像とそのサムネイルをアップロードした場合,その両方で呼び出されるので注意してください.アップロードされたファイルがサムネイルであるかどうかは,「ref_」で始る値を見れば分かります.
url
アップロードされたファイルにアクセスできる URL.
filesize
アップロードされたファイルのファイルサイズ.(バイト)
ref_url
サムネイルがアップロードされた場合,元画像の URL.
ref_filesize
サムネイルがアップロードされた場合,元画像のファイルサイズ.(バイト)
magick
アップロードされたファイルが画像の場合は,画像の形式.(Image::Magick による値)
width
アップロードされたファイルが画像の場合は,画像の幅.(Image::Magick による値)
height
アップロードされたファイルが画像の場合は,画像の高さ.(Image::Magick による値)
なお,Movable Type から返ってきた URL をそのまま使う場合は,この変数を指定する必要はありません.

5.1.7. プレビュー関連

$PREVIEW_TEMPLATE
プレビュー用テンプレートの名前

また,必要に応じて,以下の変数を指定してください.

$PREVIEW_URL_FILTER
プレビュー URL を変換する無名関数を指定します.
$PREVIEW_URL_FILTER =
  sub {
    my $url = shift;
    $url =~ s!^http://nyam.info/!http://localhost/!;
    return $url;
  };
%PREVIEW_DUMMY_ID
プレビュー作成時に用いる仮のエントリ ID.あくまで仮なので,既に登録されているエントリ ID でも,上書きされることはないはずですが,利用しているプラグイン等によっては上書きされることがあるかもしれません.
id
仮のエントリ ID
must
真の場合は,常に上記のエントリ ID を用います.偽の場合は,まだ登録されていない新規投稿の場合のみ上記のエントリ ID を用い,既に一度登録されているエントリを編集している場合は,そのエントリ ID が用いられます.
default:
( id=>1, must=>0 )
$LOCAL_PREVIEW
真であれば,簡易プレビューが優先されます.ただし,$RPCSERVER がココログのサーバをさしている場合は,本変数が真でなくても簡易プレビューが優先されます.
$LOCAL_PREVIEW_TEMPLATE
簡易プレビューで用いるテンプレートファイル名.mapae.pl からの相対パス,または絶対パスで指定.(default: preview_template.html)
$LOCAL_PREVIEW_FILE
簡易プレビューを出力するファイル名.mapae.pl からの相対パス,または絶対パスで指定.(default: tmp/preview.html)
$LOCAL_PREVIEW_CONVERT_BRAKES
真であれば,簡易プレビューを作成する際に改行が <br /> タグに置換されます. *14

5.1.8. 再構築関連

%REBUILD_UNIT
一度に再構築を行う単位.デフォルトの設定では,エントリ: 40 エントリ毎,日別: 40日毎,週別: 4週毎,月別: 1月毎,カテゴリ別: 1カテゴリ毎に再構築が行われます.
default:
( Individual => 40,
  Dairy      => 40,
  Weekly     =>  4,
  Monthly    =>  1,
  Category   =>  1 )

5.1.9. はてなダイアリーキーワード関連

$HATENA_CLASS
アンカーで使用するクラス.(default: hatena)
$HATENA_EXPIRE
キーワードキャッシュファイルの有効期限.(秒) (default: 86400)
@HATENA_IGNORE_TAG
キーワード変換から除外したい要素名の配列.(default: ('a'))
例:
@HATENA_IGNORE_TAG = qw(a code var script);
除外する要素(タグ)は,「(@HATENA_IGNORE_TAGで指定された)要素+単語境界」で判定されるので,次のような指定も出来ます.
例:
@HATENA_IGNORE_TAG = ('a', 'span class="nohatena');
この場合,終了タグの判定では,要素内の最初の単語境界以降は無視されます *15
なお,ここに空要素の要素名を指定したり,エントリ内での入れ子関係が正しくない場合の動作は保証しません.

5.1.10. 設定セット

複数の Blog を扱う場合,設定セットにより操作対象の Blog を変更することができます.使用する設定セットは,「M-x mapae-blogset」で切り替えることが出来ます.ここで指定した文字列が mapae.ph に引渡されます.デフォルトは「1」 *16です.

引渡された文字列は,mapae.ph を処理する際に,変数 $BLOGSET に格納されています.これを用いて使用する設定を切り替えることが出来るわけです.

複数の設定セットを利用する場合の mapae.ph は,一般的には次のようになるでしょう.

## mapae.ph 設定例

全セットに共通する設定

if ( $BLOGSET eq '1' ) {
  設定セット「1」の設定
} elsif ( $BLOGSET eq 'hoge' ) {
  設定セット「2」の設定
} else {
  fault("設定セット「$BLOGSET」は定義されていません.");
}

1;

なお,定義されていない設定セットで呼び出された場合は,この例のように fault 関数を呼び出すことにより,エラーを Emacs 側に通知して,処理を中断させることができます.

5.2. mapae.el

※全ての設定は,\/.emacs 等で行ってください.

5.2.1. 全般

mapae-perl-command
mapae.pl を実行するための perl コマンドを絶対パスで指定します.(default: /usr/bin/perl)
mapae-command
mapae.pl を絶対パスで指定します.
mapae-blogset
設定セットの初期値.(default: "1")
mapae-default-process-coding-system
mapae.pl との通信に用いる文字コード.$CHARSET{emacs} が指す文字コードとそろえる必要があります.

5.2.2. 編集モード関連

mapae-separator
各要素のセパレータを指定します.mapae.pl の $ELEMENTSEPARATOR と同じ値でなければなりません. (default:-----)
mapae-postid-tag
エントリID を示す要素名を指定します.(default:POST_ID)
mapae-favorite-mode
編集モードで基本とする既存のモードを指定します. (default:text-mode)
例:
(setq mapae-favorite-mode 'html-helper-mode)
mapae-local-data-dir
アップロードファイルのローカルデフォルトディレクトリ
mapae-remote-data-dir
アップロードファイルのリモートデフォルトディレクトリ
設定セット別に指定する場合は,設定セット名をキーとするコンスセルのリストを指定してください.
例:
(setq mapae-remote-data-dir '(("3" . "old/images/")
                              (t . "archives/data/")))
なお,設定セット名でマッチする設定がなかった場合は,この例のようにキーが t で指定されたディレクトリが用いられます.
mapae-thumbnail-suffix
サムネイルを生成するときファイル名に付ける接尾辞.ここで指定された文字列が,拡張子の前に挿入されます.(default: _tn)
mapae-thumbnail-max-width
サムネイルの最大幅.ここで指定された値を元にサイズが決められますが,実行時にその値を変更することは可能です.(default: 200)
mapae-thumbnail-max-height
サムネイルの最大の高さ.ここで指定された値を元にサイズが決められますが,実行時にその値を変更することは可能です.(default: 300)
mapae-use-tk
画像のアップロード時 Tk による画質調整を行わない場合は,nil を指定します.(default: t)
mapae-mode-map
編集モードのキーマップ
mapae-mode-hook
編集モード起動時のフック
mapae-hatena-keyword-hide
真の場合,はてなダイアリキーワードにリンクされた部分は下線で表示され,タグ部分は隠されます.(default: nil)

5.2.3. カテゴリモード

mapae-category-mode-map
カテゴリモードのキーマップ

5.2.4. タイトル一覧モード

mapae-recent-post-count
タイトル一覧で取得するデフォルトのエントリ数 (default: 15 )
mapae-title-list-mode-map
タイトル一覧モードのキーマップ

5.2.5. ブラウザ表示関連

mapae-browser-command
プレビュー等に用いるブラウザの起動コマンド.文字列であれば,外部のウェブブラウザとして認識され,Emacs の関数シンボルであれば Emacs 内で動くウェブブラウザとして認識されます.
mapae-browser-option
ブラウザを起動する際に用いる引数のリスト.実行時に文字列 "<URL>" が表示する URL に置換されます.mapae-browser-command で外部のウェブブラウザがしていされている場合は,全要素が文字列でなければなりません.
default: (UNIX系OS における,Mozilla/Firebird での設定です)
("-remote" "openurl(<URL>)")
例: (Windows における,Mozilla/Firebird の場合)
(setq mapae-browser-option '("<URL>"))

5.3. 簡易プレビューテンプレート

$LOCAL_PREVIEW_TEMPLATE で指定される簡易プレビューのテンプレートでは,以下のタグが解釈され置換されます.

MTEntryTitle
タイトル
MTEntryBody
description の内容.
MTEntryMore
mt_text_more の内容.(「続きを読む」等で表示される部分に該当)
MTMe
簡易プレビューの結果について,タグ等がエスケープされたもの.The W3C MarkUp Validation Service 等に引渡す際に用います.

各タグの使用例については,前述の例を参照してください.


*13: 正規表現で指定します
*14: ただし,別のテキストフィルタが指定されている場合は,置換されません.
*15: 'span class="nohatena' の場合は,終了タグは「span」であるとして扱われます.
*16: 任意の文字列を使用することができます.

6. トラブルシューティング

現状では,カスタマイズ変数関連の例外チェックをほとんど行っていません.正しく動作しない場合は,まずこれらの変数が正しく設定されているかを確認してください.なお,初期導入時に mapae が全く動作しない場合は,以下のコマンドの結果が参考になるかもしれません.

M-x mapae-file-test
Emacs から呼び出す外部のコマンド等が,正しく設定されているかを確認します.
M-x mapae-get-recent-post-dump
mapae.pl で最新のエントリを取得し,RPCの通信内容と共に,結果を処理せずに表示します.
M-x mapae-submit-post-dump
バッファの内容を登録し,RPCの通信内容と共に,結果を処理せずに表示します.
M-x mapae-preview-dump
バッファの内容でプレビューを作成し,RPCの通信内容と共に,結果を処理せずに表示します.

カスタマイズ変数が正しいにも関わらず動作しない場合は,バグの可能性もあり得ます.その旨を下記バグトラックにご報告いただければ,(全てに対応できるとは限りませんが)出来るだけ対処します.なお,ご報告いただく際には,perl や emacs 等のバージョン,問題が再現する条件や結果,関連しそうなカスタマイズ変数の設定内容等 *17,こちらが状況を把握できるような情報を添えてください.


*17: 当然,Movable Type のパスワード等は送ってこないでください.

7. 各環境での動作について

mapae の開発は,主環境として Linux + Perl5.10 + Emacs23 で行っていますが,他の環境でも動いているという報告を頂いています.報告下さった方々,有難うございました.

全てをご紹介させていただきたいところですが,細かな構成や各機能の確認状況等までこちらで追いきれませんので,割愛させていただきます.これから mapae の導入を検討される方には,TrackBack 等をご参照いただければと思います.

また導入された方は,動作した環境,動作が確認できた機能,問題点等を,TrackBack 等でお寄せいただければ幸いです.また,解決された問題点等については,エントリの更新をお忘れなく.

7.1. 改行コード処理

mapae.el と mapae.pl との間の通信では,システム標準の改行コード(Windows なら CR+LF)を用いています.したがって,perl 側がシステム標準の改行コードではない場合にうまく処理することが出来ません.

mapae.el では,変数 mapae-default-process-coding-system で,mapae.pl との通信に用いる文字コードや改行コードを指定することができます.例えば,Perl 側の改行コードが LF の場合は,以下の設定を .emacs 等に追加してください.

(setq mapae-default-process-coding-system 'euc-jp-unix)

8. mapae バナー

usay 氏が mapae のバナーを作ってくださいました.「mapae を使ってるよ」って人は,サイドバーにでも張り付けておいていただけると嬉しいです.

9. 旧バージョンの配布

(内部的なものも含めて)大きな変更があった場合は,バージョンナンバーを0.1上げ,直前のバージョンを tarball で公開します *18.バグフィックス等の小規模な変更では,バージョンナンバーを変更せず,最新版のみ公開します.最新版については,当面の間従来通り本文中のリンクから取得してください.


*18: これが安定版というわけではありません.

10. 最近の更新内容

  • trunk
    • 2010-11-8
      • perl5.6系および Jcode の対応を終了
      • perl 部の文字コードを utf-8 に変更
      • mt の文字コードを utf-8 に固定
    • 2010-01-10 Ver.0.10 20100110
      • mapae.pm 拡張
        • エラー発生時にエラー通知を正しく返さない問題を修正
        • Jcode への依存を削除
      • mapae 本体には変更はありません。
        • MT5 でも今のところ問題なく使えています。
    • 2005-12-23
      • ダウンロードリンクが間違っていたのを修正
    • 2005-10-17 Ver.0.10 20051017
    • 2004-09-02 Ver.0.10 20040821
      • ドキュメントに mapae-default-process-coding-system に関する記述を追加.
      • 配布ファイルへの変更はありません.
    • 2004-08-21 Ver.0.10 20040821
      • mapae for xyzzy 用の設定雛形を追加
      • プログラム部分の変更はありません.
    • 2004-08-20 Ver.0.10 20040820
      • mapae for xyzzy アップデートに向けた修正
    • 2004-07-04 Ver.0.10 20040704
      • ココログ側で時刻ずれの問題解消に対応
    • 2004-06-20 Ver.0.10 20040620
      • Tk モジュールが入っていない場合で mapae-use-tk が真の場合に,サムネイルが作成できない問題を修正.
    • 2004-05-24 Ver.0.10 20040524
      • はてなダイアリキーワード置換を再適用した場合に失敗する場合があるのを修正
      • 新規投稿時のカテゴリ仮登録ができない問題を修正
      • $PREVIEW_URL_FILTER 追加
    • 2004-05-14 Ver.0.10 20040514
      • カテゴリ登録時のエラーを修正
      • プレビュー時の postid が正しくない問題を修正
    • 2004-05-09 Ver.0.10 200405091
      • deletePost の引数型を修正
      • 一部の XML-RPC メソッドについて,呼び出しメソッド名の変更
    • 2004-05-09 Ver.0.10 20040509
      • XML-RPC 呼び出し時の引数の型を修正
      • 配布形態を,ファイルごとから,tarball に変更
    • 2004-05-06 Ver.0.9 20040506
      • 新規投稿時にカテゴリ指定画面が開けない問題を修正.
    • 2004-05-02 Ver.0.9 20040502
      • postid が数字以外であっても処理できるように変更.
      • mt.getRecentPostTitles の代わりに metaWeblog.getrecentPosts を使うことができるように変更.
    • 2004-03-10 Ver.0.9 20040310
      • 簡易プレビューを実装
      • ちなみに,次のメジャーアップデートは,「1.0」ではなく「0.10」の予定.(^_^;
    • 2004-03-06 Ver.0.8 20040306
      • mapae-mode 時のバッファローカル変数を扱いを修正.
      • 登録内容が空の時の動作を修正.
      • 空要素補完処理を修正.
      • 改行コードの取り扱いに関する記述を追加.
    • 2004-03-05 Ver.0.8 20040305
      • 内容が空の要素の取り扱いを修正
    • 2004-03-03 Ver.0.8 20040303
      • Perl 5.6 以前でココログをを使っている場合でも,時刻補正処理だけは行うことが出来るように変更.
    • 2004-03-02 Ver.0.8 20040302
      • ドキュメントに設定セットについての記述を追加
      • mapae 自身の変更は無し
    • 2004-02-25 Ver.0.8 20040225
      • 配布ディレクトリの変更(プログラム自身は変更無し)
      • 配布用ドキュメントを追加
      • ...すいません.Subversion を試してみたかっただけです.とは言っても,公開サーバは Apache1 系なので配布は WebDAV 経由では無いのですが.配布形態には変更はありません.
      • というわけで,リポジトリ管理を CVS から Subversion に変更しました.
    • 2004-02-18 Ver.0.8 200402181
      • エントリ登録後,隠されていたはてなダイアリキーワードが見えてしまう問題を修正.
    • 2004-02-18 Ver.0.8 20040218
      • はてなダイアリーキーワードが連続している場合,リンクの削除に失敗する場合がある問題を修正.
    • 2004-02-17 Ver.0.8 20040217
      • はてなダイアリーキーワードのリンクタグ部分を隠す処理を追加.
      • はてなダイアリーキーワード変換時,対象から除外する要素を指定できるように変更.
    • 2004-02-16 Ver.0.8 200402161
      • はてなダイアリーキーワード変換時,ハイライト処理を追加
    • 2004-02-16 Ver.0.8 20040216
      • mapae-favorite-mode を fset ではなく,setq で指定するように変更.旧バージョンをご利用の方はご注意下さい.
        対応していただいたばかりの変更で申し訳ないです.>sugi さん
      • mapae-mode のキーマップを mapae-mode-map で指定するように変更.
      • はてなダイアリーキーワード自動リンクAPI に対応
      • 更新 Ping について,以前のインターフェイス統一時に変更し忘れていた点を修正.
    • 2004-02-11 Ver.0.7 20040211 mapae-0-7-20040211.tar.gz
      • mapae for xyzzy 用処理を追加
      • カテゴリ選択画面で ID を隠す処理を追加
      • 一部テキストプロパティを除外する処理を追加
      • テキストフィルタ変更関数を追加
      • テキストフィルタ,comment/trackback許可設定用の設定例を追加
      • Blog 切り替え対応
      • mapae.pl→mapae.el のインターフェイス統一
      • 登録と公開を同時に行う場合のみ discover_tb を実行するように変更.
      • サムネイル画質調整機能追加
      • トラブルシューティング用関数追加

トラックバック(30)

トラックバックURL: http://d.nym.jp/mt/trackback/1638

six olq: Movable Type:: Emacs フロントエンド「mapae」 うおー。 メモです。 続きを読む

six olq: Movable Type:: Emacs フロントエンド「mapae」をxyzzy対応にしてみました。一部未確認の機能がありますが、ほぼオリジナルのmapaeの機能をそのまま使えるはずです。 続きを読む

過去のエントリをウェブブラウザで眺めているとき,少し手直ししたくなったことはありませんか? Emacs で動く mapae では,ちょっとした応用でそのエントリを簡単に開くことができるのです. 続きを読む

「続きを読む...」の出し方 ココログはブラウザのフォームからだけでなく、「XML-RPC」という方法を使って、ブラウザを使わず記事を投稿できるようなインターフェースが備わっています。これを使うことにより、上下2段のテキストフィールドの情報をそれぞれ送信すること... 続きを読む

やはり、やっている方はやっているようで、「 six olq: Movable Type:: Emacs フロントエンド「mapae」」から感謝しつついただいてきた。スクリプトを、Makefile書いて、パッチを当ててインストール。 んが、問題検出 投稿した文字が化ける(エンコードめちゃくちゃ) 投... 続きを読む

「mapae」で投稿してみてる. やっと,投稿できるようになったかもしれない. # コレを読めてる人から見たら投稿できてるやんってつっこみ放題だが. ちゃんと動いた後に日本語の入力設定がうまくできてないことに気づいたりしたけど(苦笑) これで巡回はw3m-emacsで,投... 続きを読む

mapae :: Meadow + ActivePerl5.8 に対応 昨日の夜に書いたエントリのmapaeの作成者であるnyamさんからコメントをいただきました. 設定の変更点を書くのを忘れていました.mapae.el で変数 mapae-perl-command の設定が必要になっています.追記しておきましたので,そち... 続きを読む

JuNya KOBORI's Miscellaneous Impressions Page - Movable Type:: Emacs フロントエンド「mapae」 (2004年1月23日 14:48)

「書くのはテキストなんだし、それだったら慣れた Emacs でなんとかしたい」っていう方は mapae を利用するのはいかがでしょ。 続きを読む

What happens today? - mapae (2004年1月31日 17:47)

Movable Type:: Emacs フロントエンド「mapae」 やっぱEmacsからWeblogを更新したいじゃん。ということで、インストールしてみました。 自分用メモ NetBSDから利用する際には以下のパッケージをインストールした converters/p5-Jcode net/p5-SOAP-Lite www/p5-libwww 続きを読む

mapaeについて,まだ登録していない新規のエントリでもカテゴリ指定ができるようになりました. 一度登録しないとカテゴリ指定が出来ないのは不便だという声が mapae for xyzzy のユーザさんの中に幾つかあったみたいですし,私も不便だとは思っていたので,かなり無理や... 続きを読む

結局 xyzzy から MT にエントリーとかする mapae.l。上手く行ったようで万歳。しーかーしー。肝心なブラウザでプレビュ†とかのアレが上手く行かないまんまなのであるます。 まあ自分、結果オーライ主義なんで、無理矢理ここまで漕ぎ着ける事が出来た訳ですが。やっぱプ... 続きを読む

mapae :: 新規エントリのカテゴリ指定 [six olq] EmacsからMovableTypeのエントリを登録・編集することのできるmapaeが,新規エントリのカテゴリ指定できるようになりました. 内部的にエントリ本体とカテゴリ選択のバッファの親子関係を記憶しておくことによって解決しま... 続きを読む

mapae で,複数の Blog の設定を切り替えて使用できるようになりました.... 続きを読む

mapae for xyzzy を2004-02-11 Ver.0.7 20040211に対応しました。 続きを読む

mapaeを,はてなダイアリーキーワード自動リンクAPIに対応させてみました. この機能は,現在開いているエントリ内に,はてなダイアリーキーワードに該当するものがある場合,それをはてなダイアリーキーワードへのリンクに変換します. 続きを読む

甘からず。辛からず。旨からず。 - mapae for xyzzy (2004年2月29日 06:16)

ココログでmapaeをxyzzyで使うためのメモ Windows2000 xyzzy 0.2.1 1. ActivePerl 5.8.xをインストール (ActivePerl 5.6.xじゃ動かない。Jcode関係) 2. 本家からmapae.phとmapae.plをダウンロード 3. chez sugiからmapae.lをダウンロード 4. mapae.phを編集 $RPCSERVER = ... 続きを読む

とりあえずローカルプレビューなるモノがしたくて、本家 mapae と mapae for xyzzy を同時にバージョンアップ。そしたらなーんーとー、mapae で投稿時に mode が選べるようになってるじゃないすか。 本家 sugi さんの設定では xml-mode になってたんですが、ここは一つ念... 続きを読む

mapae for xyzzyでエントリの新規登録・編集等はできるのにカテゴリの設定だけができない件について、様々な助言を頂いた結果、無事解決することができました。助言をして下さった方々にこの場を借りてお礼申し上げます。それで解決までの手順をメモしておこうと思います... 続きを読む

一覧 一覧 技術系 .net python RSS・BLOGなど Linux系 ディストリビューション いろいろ このサイトで使っている系 順次追加予定 ↑技術系 ↑.net mono ↑python A Byte of Python 日本Pythonユーザ会 wxPython wxPython入門 ↑RSS・BLOG... 続きを読む

ココログの時刻ずれの問題が解消されたとのことなので,mapaeでの時刻補正をデフォルトで無効としました. 続きを読む

PukiWiki/TrackBack 0.1 - メモ (2004年7月12日 12:56)

プログラミング関連 ATL/WTL -- ATL/WTL関連のtipsメモ Mozilla -- Mozilla ActiveXメモ http://www.iol.ie/~locka/mozilla/mozilla.htm boost -- C++テンプレートライブラリ boost neon -- HTTP/WebDAV クライアントライブラリ xmlrpc-c -- XML-RPC クライアント/サー... 続きを読む

blog クライアントをきちんと紹介するシリーズ第1回。今回は mapae と mapae for xyzzy を取り上げます。 続きを読む

six olq : Movable Type:: Emacs フロントエンド「mapae」 chez sugi : mapae for xyzzy 先日 ubicast Blogger を使ってみたりと、Movable Type 編集環境の向上を考えているのですが、自分にもっともあってさげなツールにやっとめぐり合えました。 それは mapae for xyzzy... 続きを読む

six olq: Movable Type:: Emacs フロントエンド「ma... 続きを読む

eternal :: temporality - MT3.11 (2004年9月26日 07:01)

eternal::temporality を Movable Type 2.64 -> 3.11 に Upgrade しました。 ・コメント管理機能で、スパムコメントを一括削除できる ・登録者のみコメント許可できるTypeKeyという認証機能がついた と、Spam対応がメインなのですが、管理画面のデザインも一新されてます... 続きを読む

ひよっこプログラマーの日記 - Movable Type:: Emacs フロントエンド (2005年1月19日 20:55)

mapae... 続きを読む

ビジネスブログのBLOG <ビジネスブログ・企業ブログの制作会社 ART BEAUTE> - ブログの投稿・編集ソフトウェア (2005年6月 2日 02:21)

この記事を今、BlogWriteというブログの投稿・編集ソフトから書いています。... 続きを読む

10日のエントリー の続きですが、ここからは『LOOX』に特化したお話ではありませんので、タイトルも省略してます。 ◯ま... 続きを読む

記事の更新は標準では Web ブラウザの投稿画面から行いますが,Web ブラウザの入力フォームは狭く編集機能が貧弱なので,あまり長い文章を書くのには向いて... 続きを読む

コメント(20)

cool! と、思ったらour使ってるんですね…perl-5.6以上が入ってないプラットフォームはまだまだたくさんあるのではないでしょうか。

実は,Perl5.6 しか使ったことがないので,以前のバージョンとの違いがよく分かっていなかったりします.our 宣言と lvalue 属性くらいしか違いを認識していません... mapae は(mapae.pm を除いて)クライアント用のツールですから,5.6以降でも問題無いようにも思いますが,どうでしょう?
とは言え,簡単な修正で動くようになるのであれば修正してもよい,とも思います.とりあえず,our 宣言を使わないようにしたテストバージョンを出してみましたが,どうでしょうか.他にも修正が必要な個所があれば,ご指摘頂ければ幸いです.

おつかれさまです。お返事ありがとうございます。

テストバージョンを拝見しました。自分も手元でuse varsに修正して使っていたのでours宣言についてはこれで問題ないと思います。

追加としては、warnings.pm がこれも5.6以降依存となります。もうひとつ、open関数の書式(646行目)が3引数を取るのも5.6以降依存ですね。

あとは趣味の問題なので参考程度にですが、SOAP::Lite がHTTPヘッダをチェックするためmod_perl環境下でうまくないので、以下を適当な位置に仕込んでいます。

$XMLRPC::Constants::DO_NOT_CHECK_CONTENT_TYPE = 1 if (exists $ENV{MOD_PERL});

お返事の中の「mapae はクライアント用のツールですから,5.6以降でも問題無いようにも思います」の意図がちょっと汲み取れなかったのですが、自分が生活しているFreeBSDの標準で入るperlは 5.005 となっており、システムで使われるためもあり、あまり安易にperlのupdateができません。そういった環境の方も多いのでは、といった意味でした。

配布状態で修正する手間が省かれていれば、より多くの環境/方達に使われるのではないかと個人的には思います。今後も期待しておりますので、無理のない程度にがんばってください。

warnings と open を修正しました.

>SOAP::Lite がHTTPヘッダをチェックするためmod_perl環境下でうまくないの
>で、以下を適当な位置に仕込んでいます。

mapae.pm の方でしょうか.
mod_perl を使っていないので良く分からないのですが,どのような Content-type になるのでしょうか.

>お返事の中の「mapae はクライアント用のツールですから,5.6以降でも問題
>無いようにも思います」の意図がちょっと汲み取れなかったのですが、自分
>が生活している FreeBSDの標準で入るperlは 5.005 となっており、システム
>で使われるためもあり、あまり安易にperlのupdateができません。そういっ
>た環境の方も多いのでは、といった意味でした。

サーバ用マシンであれば,Perl5 であることが多いでしょうが,クライアントマシンであれば5.6以上になっているかな,と勝手に思っていただけです.FreeBSD では Perl5なんですね.
それに他の環境であっても,テスト環境としてサーバに合わせていたりするかもしれませんし,出来るだけ Perl5 に合わせた方がいいかもしれませんね.

mapae for xyzzy でのココログへの投稿に成功しましたので、報告します。
カテゴリの設定法がよくわからず、結局、投稿後、ココログに login して、手で設定しました。
http://watcher.moe-nifty.com/memo/2004/01/mapae_go.html

報告,有難うございます.
カテゴリ設定の問題については,私が文字コードの変換処理を忘れていただけでした.<多分

初回取得時の文字化けについては,mapae.pl の出力文字コードの判定に失敗しているのが原因だと思うので,以降のバージョンで検討していきます.

文字化けの件は、どうもココログのサーバ側の問題のようです。とりあえず、最新の記事を1個持ってくるだけの XML-RPC クライアントを C で書いて動かしてみたのですが、何回かに1回、化けた状態の記事が返ってくることを確認しました。
化け方には規則性があるようなので、無理やりコード変換して復元できそうですが、たぶん、化けていると判断した場合は再取得するような実装にする方が簡単だと思っています。

日付のフォーマットについては、Movabe Type とココログでは微妙に違っていて、おそらく TypePad もココログと同じフォーマットなのでしょう。
汎用的なblog投稿用クライアントを作ろうとすると、この辺の差を吸収する仕組みを考慮する必要がありそうです。

報告が遅れましたが、mapae-0-3-20040108-p5-01091 で 5.005 での動作に修正の必要はなくなりました。対応ありがとうございました、今後の開発に影響がないようであればマージしていただけると嬉しいです。

mod_perl についてですが、こちらは利用者が必要ならば1行追加するだけなので本体側での対応は過剰かなとも思います。頭の片隅にでも入れておいていただければと。

mod_perl 環境下ではスクリプトはデフォルトでHTTP応答ヘッダを返さないため、SOAP::Lite のContent-Typeチェックが通りません。このチェックを省略するために DO_NOT_CHECK_CONTENT_TYPE が用意されています。

HTTP応答ヘッダを返すようにすることも可能なのですが、その処理自体がパフォーマンスを低下させたり、httpd の設定を変更する必要があったり、他のスクリプトにも影響を与える可能性があります。

ご興味があれば PerlSendHeader といったキーワードでgoogle等でいくらでも出てくると思いますので参考にされてみてはいかがでしょうか。そもそも SOAP::Lite もしくはもっと低レイヤ側で auto-nego できるのではないかとも思っています。

>tsupo さん

> 文字化けの件は、どうもココログのサーバ側の問題のようです。

> 日付のフォーマットについては、Movabe Type とココログでは微妙に違って
> いて、おそらく TypePad もココログと同じフォーマットなのでしょう。

@nifty に対応をお願いしたほうが良いのかもしれませんね.

mapae での直接の対応は見送ります.私はココログユーザではないので,テスト環境が用意できませんし.
情報ありがとうございました.

>you さん

> 報告が遅れましたが、mapae-0-3-20040108-p5-01091 で 5.005 での動作に
> 修正の必要はなくなりました。

Ver.0.5 20040117 でマージしました.また,Perl5.005 のテスト環境が用意出来たので,今後もコンパイルのテスト位は出来ると思います.

> mod_perl についてですが、こちらは利用者が必要ならば1行追加するだけな
> ので本体側での対応は過剰かなとも思います。

わかりました.これについての対応は,当面は見送ります.

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

はじめまして。
日記を読ませていただきました。
チョッと気になることがあったので、おせっかいですが進言おばさせてください。

MeadowというかEmacsではマルチバイト文字(日本語も含む)のElispでの処理は、内部的にiso-2022-7bitで処理しています。ですので、日本語を扱うElisp(.emacsも)のCodecは、iso-2022-7bitにしないと化ける可能性があります。

バイトコンパイルをするとおかしくなる。日本語が化けるといったElispは、ほとんど、文字コードがEUC-JPのことが多いのです(昔はこれが標準だったのかもしれませんが、よくわかりません)。

日本語を扱う有名なElispパッケージの文字コードを見てください。おそらくほとんどiso-2022-7bitになっています。mapae.elも文字コードを変更することをお勧めします。

これで、文字化けがすべて解決できるものではないのかもしれませんが、気になったもので。
でわでわ。

> MeadowというかEmacsではマルチバイト文字(日本語も含む)のElispでの処
> 理は、内部的にiso-2022-7bitで処理しています。ですので、日本語を扱う
> Elisp(.emacsも)のCodecは、iso-2022-7bitにしないと化ける可能性があ
> ります。

これ,気になっていたんです.でも結局,私の環境では化けていなかったので,頭の方に日本語をいれておけば自動認識してくれるかな,なんて想像していたのですが.

iso-2022-7bit にしておけばよかったんですね.
早速修正しました.ありがとうございました.

すでにご存知かもしれませんが、ココログ特有の問題について触れた XML-RPC API の解説ページ
http://www.na.rim.or.jp/~tsupo/program/blogTool/mt_xmlRpc.html
を用意しています。

文字化けが頻発する件、Unicode を UTF-8 にマッピングするときの変換処理を複数回適用してしまっているのが原因のようです。文字化けがなくなるまで UTF-8 → Unicode 変換を適用すればデコードできますが、文字化けがなくなるまでデータをサーバから取得し直すという方法もあります。

文字化けは、ココログだけではなく、TypePad でも発生しているとのことです。

> 文字化けは、ココログだけではなく、TypePad でも発生しているとのことです。

となると,根本的に解決するのはもう少し先になるのかもしれませんね.
とりあえず,Perl5.8 では回避できているのですが,5.6では解決できていません.
5.6でも回避できるようにして欲しいというユーザさんの声が多ければそちらも検討しても良いとは思うのですが,それよりもやはりサーバ側での早期解決をお願いしたいところです.

ココログの投稿日時の問題、ようやくサーバ側で対処されました。
http://info.cocolog-nifty.com/info/2004/07/_xmlrpc_api_.html

ということで、mapae 側での対応は不要となりました。

ただし、文字化けの方はまだ対処されていません。かなり根が深い問題のようです。

> ココログの投稿日時の問題、ようやくサーバ側で対処されました。

修正しました.情報ありがとうございました.

mapae-0-10-20051017 + Meadow 2.10 + Active Perl 5.8.8 on WinXP SP2で快適に利用させていただいております。

.emacs での設定についてなのですが、mapae.pl の指定などで相対パスが使えないようです。例えば、(setq mapae-command "c:/home/perl/mapae.pl") では大丈夫ですが、(setq mapae-command "~/perl/mapae.pl") と書くと「予期せぬエラー」がでてしまいます (環境変数 HOME は設定済み)。

私は Meadow を USB メモリに入れて、出先の PC で使用することがあります。その際、ホームディレクトリは bat ファイルで Meadow 起動時に設定するのですが、相対パスでのファイル指定が必須となっております。

mapae が原因なかったら恐縮ですが、御一考いただければ幸いです。

ご報告ありがとうございます。

実は、最近は Windows 環境を持っておらず、手元で再現させることが出来ません。

絶対パスなら可、環境変数 HOME 設定済とのことですので、以下の設定により問題を回避できないでしょうか?

(setq mapae-command
(concat (getenv "HOME") "/perl/mapae.pl"))

お試しください。

作者さん、さっそくアドバイスありがとうございます!

上記のやり方で Meadow でも相対パスで指定できました。また mapae-perl-command の同様に指定可能なので、USB メモリに Meadow や Perl を放り込み、出先で Movable Type を更新、という夢w も実現しそうです (まだ試してはいませんが)。

重ねまして、どうもありがとうございました。

追記。私は mapae for xyzzy も併用しているのですが、こちらの場合は、

(setq mapae-command
(concat (si:getenv "XYZZYHOME") "/etc/mapae.pl"))

などでいけることを確認しました。では失礼します。

コメントする

最近のコメント

アーカイブ

Author

nym <n...@nym.jp>
Powered by Movable Type 5.161-ja