« MT2MIXI成功!! | メイン | 肩ブレラが届いた »

2007年02月15日

MT2MIXI改造方法

[ Category : ブログ ]

MovableType - mixi連携用PHPスクリプト【MT2MIXI】を使ってみようとしたけど、どうもうまく動作しない。

オリジナルスクリプト配布元に書かれているが、昨年の12月四日からmixiがメールの「Return-Path」ヘッダーが携帯のアドレスかどうかチェックするようになったのが原因のようだ。
このmixi側のシステム変更により、このスクリプトを使ってmixiの携帯用の投稿アドレスにメールを送信しても、mixiの日記に書き込むことができない。

はて?どうしたものか!!

そう思っていたところ、ふと名案を思いついた。

要はメールの「Return-Path」ヘッダーが携帯のアドレスになればいいわけである。でもそんなことできるか?

方法があった。Sendmailプログラムを使って、「-f」オプションを付けて送信すれば、メールの「From」ヘッダーと「Return-Path」ヘッダーが同じになる。

オリジナルのMT2MIXIスクリプトでは、PHPの「mb_send_mail()」関数を利用してメールを送信しているので、これをSendmailプログラムを使って送信するように改造すればうまくいくのではないか…
という寸法だ。

それでは早速改造に入ろう。

●設定ファイルを編集

まず設定ファイル【mt2mixi.cfg】ファイルの、上から2行目~下から2行目の間、つまり
<?php
?>
で挟まれた部分に以下の1行を追加する。


define("SENDMAIL_PATH", "/usr/sbin/sendmail");

"/usr/sbin/sendmail"の部分はお使いのサーバーのSendmailのパスに合わせる。わからない場合はサーバー管理者に問い合わせること。

●スクリプト本体の編集

続けてスクリプト本体【mt2mixi.php】を改造する。こいつはちょっと大変だ。何しろプログラム本体をいじるのだから。下手すると全く動作しなくなる可能性がある。

さて、改造方法の説明に入ろう。

mt2mixi.phpの83行目~95行目あたり。以下のようになっている。

/* post to mixi */
$from = "From: " . mb_encode_mimeheader(MIXI_MAIL_FROM);
$to = mb_encode_mimeheader(MIXI_MAIL_TO);
$result = mb_send_mail($to, $subject, $body, $from);
if (!$result) {
$value = new XML_RPC_Value(
array(
"flerror" => new XML_RPC_Value(1, "boolean"),
"message" => new XML_RPC_Value("Fail to send mail.")),
"struct");
return new XML_RPC_Response($value);
}

これを以下のように書き換える。なお、オリジナルの部分をコメントアウトしておくことにする。こうしておくと何かあったとき元に戻すことができるので安全だ。

/* post to mixi */
/*
//オリジナルをコメントアウト
$from = "From: " . mb_encode_mimeheader(MIXI_MAIL_FROM);
$to = mb_encode_mimeheader(MIXI_MAIL_TO);
$result = mb_send_mail($to, $subject, $body, $from);
if (!$result) {
$value = new XML_RPC_Value(
array(
"flerror" => new XML_RPC_Value(1, "boolean"),
"message" => new XML_RPC_Value("Fail to send mail.")),
"struct");
return new XML_RPC_Response($value);
}
//オリジナルのコメントアウトここまで
*/
/* post to mixi */
//メールアドレス、タイトルをMimeエンコード
$from = mb_encode_mimeheader(MIXI_MAIL_FROM);
$to = mb_encode_mimeheader(MIXI_MAIL_TO);
$subject = mb_encode_mimeheader(mb_convert_encoding($subject, "JIS", "auto"), "JIS");
//本文の漢字コードをJISに変換
$body = mb_convert_encoding($body, "JIS", "auto");
//sendmailへアクセス
$mp = popen(SENDMAIL_PATH . " -i -t -f $from", "w");
if (!$mp) {
$value = new XML_RPC_Value(
array(
"flerror" => new XML_RPC_Value(1, "boolean"),
"message" => new XML_RPC_Value("Fail to open sendmail.")),
"struct");
return new XML_RPC_Response($value);
}
//メールヘッダーを整形してSendmailに渡す
fputs($mp, "From: " .$from ."\n");
fputs($mp, "To: $to\n");
fputs($mp, "Subject: $subject\n");
fputs($mp, "MIME-Version: 1.0\n");
fputs($mp, "Content-Type: text/plain; charset=iso-2022-jp\n");
fputs($mp, "\n");
//本文をSendmailに渡す
fputs($mp, $body);
//sendmailへのプロセスを開放
pclose($mp);

以上で改造終了。

あとは普通に使えばMTでブログを更新すると自動的にmixi日記にも書き込まれる。使い方は付属のreadme.txtファイルを参照。

RSSだと日記が反映されるまで時間がかかるが、このスクリプトを利用した場合ほぼリアルタイムに書き込まれる。
しかもmixiの日記機能はそのまま使えるし、コメント機能も使えるからmixiでコメントしてもらうこともできる。

本当はやはりHTTPポストを利用して書き込むようにする方がいいと思う。
そのうち作者さんが対応してくれると思うけど、それまでの繋ぎとして利用していただければ幸いです。

投稿者 Dream : 2007年02月15日 20:33

この記事はあなたのお役に立ちましたか?もし気に入っていただけたのでしたら、是非人気blogランキングをクリックしてください。

トラックバック

このエントリーのトラックバックURL:
http://www.sf-dream.com/cgi/mt33/mt-tb.cgi/656

このリストは、次のエントリーを参照しています: MT2MIXI改造方法:

» ブログを携帯での閲覧に対応しました from MISONO Blog
ここのブログを携帯対応にしてみました。とりあえずまだ実験中なので失敗するおそれが... [続きを読む]

トラックバック時刻: 2007年04月24日 14:15

コメント

すみません。postfixでも上記と同じで動作しますでしょうか?

投稿者 g : 2007年09月19日 19:36

postfixの知識がないのでわかりませんが、PHPから起動できれば使えるのではないでしょうか?
私もまた勉強してみます。

投稿者 Dream : 2007年09月22日 00:33

勝手にお世話になります。
当方MT4.1を利用してます。
こちらを参考にしまして、MTに記事を投稿するとmixiにも転載されるようになったのですが、なぜかmixiのタイトル部分にMTに投稿した記事の本文が記載されてしまいます。
お知恵を拝借できれば幸いです。何卒よろしくお願いいたします。

投稿者 こだるま : 2008年03月26日 21:01

mixi投稿用のテンプレートファイルの内容はどうなってますか?
ちなみにこちらでは以下のようにしてます。

<MTEntries lastn="1">
<$MTEntryID$>
<$MTEntryTitle$>
<$MTEntryBody$>
<MTEntryIfExtended>
<$MTEntryMore$>
</MTEntryIfExtended>

投稿者 Dream : 2008年03月27日 00:10

さっそくの対応ありがとうございます。
mt2mixi に同胞されているサンプルをそのまま使っていました。
今回、Dream 様に教えていただきましたものを用いてみたのですが、やはりmixiの方へは転送されるのですがタイトル部分にMTに投稿した本文が記載されてしまいました。
んー。どうしたものですかねぇ・・・。

投稿者 こだるま : 2008年03月28日 01:11

MT4からなにか変わったのかもしれません。
テンプレートはインデックステンプレートに設定されてますか?

mt2mixi.cfg内の設定で
define("MT2MIXI_ENTRY"
のところにURLが書いてありますよね。
このファイルの内容がそのまま投稿されるのですが、このファイルの内容はどうなってますか?

1行目:最終エントリ番号
2行目:タイトル
3行目以降:本文

となるのですが、本文がタイトルに入ってしまうということは2行目に本文があるのではないですか?
テンプレートを編集して上記のような設定になるようにしてみてください。

投稿者 Dream : 2008年03月28日 02:44

ありがとうございます。
現在、以下のようになっております。(一部投稿のため全角表記しております)

<MTEntries lastn="1">
<$MTEntryID$>
<$MTEntryTitle$>
<$MTEntryBody$>
<MTEntryIfExtended>
<$MTEntryMore$>
</MTEntryIfExtended>
</MTEntries>

投稿者 こだるま : 2008年03月28日 10:58

えっと、そのファイルの内容もそうなのですが「mt2mixi.cfg」で
define("MT2MIXI_ENTRY", "http://xxx.jp/mixi.txt");
みたいにURLもしくはファイル名が書かれてますよね。
そこで参照している内容がどうなっているかということなのですが。
例えば私のファイルだと以下のようになってます。

1379
能登半島地震から1年
何人かのマイミクさんの日記に書いてあったので思い出したのですが、昨年の今日、能登半島地震ありましたね。
去年の日記に書いてありました。
(以下略)

こんな感じで

1行目に最終エントリのID
2行目にエントリのタイトル
3行目以降本文

となっています。
mt2mixiではこのファイルを読み取って投稿します。
MT4のマニュアルを見た限りでは大丈夫なはずなんですが。
駄目ならmt2mixi改造してみるしかないかもしれません。

投稿者 Dream : 2008年03月28日 19:26

すみません。
以下のようになっていて改行されていないようです。

282インスタントラーメン1@こだるま日和http://isly.sub.jp/kodaruma/2008/03/1-1.html
秋葉原のインスタントラーメン「さくら」の店長さんが、是非こだるまさんに食べてもら

投稿者 こだるま : 2008年03月28日 20:59

MT4.01インストールして試してみました。
こちらではちゃんと改行されてます。
おかしいですね。

投稿者 Dream : 2008年03月29日 00:13

原因わかりました。
どうやらダイナミックパブリッシングにしているとうまくいかないようです。
結果的に mixi にも無事に投稿できるようになりました。
どうもありがとうございました。

投稿者 こだるま : 2008年03月29日 01:49

うまく行ってよかったですね。
ダイナミックパブリッシングという機能があるんですね。使ったことがなかったので知りませんでした。

投稿者 Dream : 2008年03月29日 15:38

コメントしてください




保存しますか?