2007年07月05日

ロリポップのブログからNucleusへブログの移動

ロリポップのブログ(ロリポブログ)から、Nucleusのブログへ移動したかったので、ちょっとだけスクリプトを組んでみた。なお、ロリポブログは、Jugemのシステム(使ったこと無いけど)なんで、同じ系列のものなら、同じように動くかもしれない。
 なお、自分用に作ったもので、しかも一回使えば済むものなので、スクリプトの汚さと、使い勝手の悪さはお許しください。

仕様など


  • ロリポブログのxmlをNucleusでインポートできる形にコンバートします。
  • MovableType形式を参考にしているので、MTでも読めるかも。
  • 相対リンクはリンク切れになります。
  • トラックバックは無視されます
  • 変なコメントがあると、記事とコメントがうまくいかない場合があるので、スパム系は外してから実行したほうがよいかも。
  • 「続きはこちら」「もっと読む」などの記事の分割には対応していません。
  • ご利用は、ご自分の責任の範囲でお願いします。

使い方


  • PHPが使える環境にスクリプトを設置する(ローカルサーバーなど)
  • ロリポブログから、データをxml形式でエクスポートする。(jugem.xml)
  • このスクリプトとjugem.xmlを同じディレクトリに置く
  • このスクリプトを実行する(ブラウザで開く)
  • output.txtが生成されているのを確認する
  • NucleusのNP_ImpExpを利用して、MTファイルとして、output.txtをインポートする

参考
 ぱふう家のホームページのスクリプトを参考にしています。

利用規定
 特に無いですが、「これから使ってみます」などのコメントを書いてもらえると、個人的に嬉しいです。

スクリプトの入手
 適当にコピペしてください。

// --------------------------------------------
// Jugemのブログからエスポートしたxmlファイルを
//  MovablelType形式に変換するスクリプト
//
// というか、本当はロリポップのブログから、ニュークリアスに
// 引越しするためのスクリプト
//
// URLはそのまんなんで、相対パスはリンク切れになります。
// コメントは対応してますが、トラックバックは対応してません。
// 一応、カテゴリー書き出しますが、動作確認してません。
// EXTENDED BODYにも対応していません。 
// 文字コードを考慮していませんので文字化けしたら自力でコンバートしてください。
//
// 使い方
// 1.ロリポブログから、xml形式でエクスポートする
// 2.エクスポートしたjugem.xmlと、このスクリプトを同じ場所へ入れる
// 3.このスクリプトを実行する(ブラウザからアクセスする)
// 4.output.txtというファイルが生成されているのを確認する
// 5.ニュークリアスのNP_ImpExpプラグインを使って、output.txtをインポート
// 作者: わくさん http://wakusan.com
// 個人用に作ったので、サポートしてくれと
// 言われましてもできないかもしれないです。
// ぱふうさんのページの記事を参考にしました。
// -------------------------------------------

// xmlを読み込む => xmlは、jugem.xmlとして、同じディレクトリにあるとする
// URLで指定しても読み込むかもだ。

echo 'xml読み込み処理=>';
$out = "";
$xmlfile = "jugem.xml";

$buff ="";
$buff .= file_get_contents($xmlfile);

echo 'xmlパーサ処理=>';
// パーサ作成
$parser = xml_parser_create();
// パーサオプションを指定
xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1);
// パース実行、連想配列にパース結果代入
xml_parse_into_struct($parser,$buff,$values,$idx);
// パーサ開放
xml_parser_free($parser);

// パースして得た連想配列をまわす
echo '解析処理=>';

$in_item = 0;
foreach ($values as $value) {
$tag = $value["tag"];
$type = $value["type"];
$value = $value["value"];

if( $tag == "COMMENTS" && $type == "open") $flag = 1; //commentにはいる。
if( $flag == 1 ){

if ($tag == "COMMENT" && $type == "open") {
$in_commnet = 1;
} else if ($tag == "COMMENT" && $type == "close") {
$commentout .= "COMMENT:
AUTHOR: $name
DATE: $date2
$description2
-----
";
$in_comment =0;

}
if ($in_commnet) {
switch ($tag) {
case "NAME":
$name = $value;
break;
case "DATE":
$date2 = $value;
//2005/06/10 13:09:14 を 04/17/2007 08:02:55 形式に変更
$a = explode(" ", $date );
$b = explode("/", $a[0]);
$c = $b[1]."/".$b[2]."/".$b[0]." ".$a[1];
$date2 = $c;
break;

case "TITLE":
$title2 = $value;
break;
case "link":
$link2 = $value;
break;
case "DESCRIPTION":
$description2 = $value;
break;
}
}

}

if( $tag == "COMMENTS" && $type == "close") $flag = 0; //Commentからでる。

if ($tag == "ENTRY" && $type == "open") {
$in_item = 1;


} else if ($tag == "ENTRY" && $type == "close") {
$out .= "AUTHOR: $author
TITLE: $title
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: __default__
ALLOW PINGS: 1
CATEGORY: $category
DATE: $date
-----
BODY:
$description
-----
EXTENDED BODY:

-----
EXCERPT:

-----
KEYWORDS:

-----
$commentout

--------
";
$in_item = 0;$commentout =""; $in_comment = 0;
}
if ($in_item == 1 and $flag == 0) {
switch ($tag) {
case "AUTHOR":
$author = $value;
break;
case "CATEGORY":
$category = $value;
break;
case "DATE":
$date = $value;
//2005/06/10 13:09:14 を 04/17/2007 08:02:55 形式に変更
$a = explode(" ", $date );
$b = explode("/", $a[0]);
$c = $b[1]."/".$b[2]."/".$b[0]." ".$a[1];
$date = $c;
break;

case "TITLE":
$title = $value;
break;
case "link":
$link = $value;
break;
case "DESCRIPTION":
$description = $value;
break;
}
}

}
echo 'ファイル書き出し処理=>output.txt=>';
$fp = fopen( 'output.txt', 'w');
fwrite( $fp, $out);
fclose( $fp );

echo '終了!';
?>

2007年06月06日

Masterbakeの不具合かな?

cakePHPの機能であるbakeの拡張版、masterbakeを使っていたら、masterの売りであるページネーションに不具合を発見。書いておく

症状:
 前ページ、次ページのボタンが反応しない。セレクトボックスでのページ切り替えもできない。トップとラストへのボタンは動く

原因:
 操作の情報をコントローラーが受け取っていない。

処方:
 そのままなら、220行と221行の2箇所、
$this->params['data']~

$this->params['url']['data']~
に変更。

このスクリプトの直後に、同じようなコードがあるが、そちらでは
$this->params['url']~
になっているので、これで良いと思います。

masterbakeそのものを訂正すれば良かったのでしょうが、良くわかんない(というかチャレンジもしていませんが)ので、報告はここまで。

2007年06月04日

cakePHPでモデルに保存の前にhtmlentitiesする

postデータを受け取ったときに、よくhtmlentitiesすると思います。cakePHPだと、どこで実行しようかと思ったのですが、モデルのビフォーフィルターでしてみた。

class AppModel extends Model{

function beforeSave()
{
$arrs = $this->data;

foreach ($arrs as $key=>$arr) {

foreach( $arr as $key2=>$value){

$encode = mb_detect_encoding( $value );
$value = mb_convert_encoding( $value, "UTF-8" ,$encode);
$arrs[$key][$key2] = htmlentities( $value,ENT_QUOTES, "UTF-8" );

}
}
$this->data = $arrs;

return true;
}
}

これで問答無用で、何でもかんでもhtmlentitilesするはず・・・ただし、失敗した場合の処理がないけど(誰か作ってください)ただし、データベースへ保存をしないでビューへ渡す場合はこの場所ではダメです。コントローラーに関数を作って、そのつど呼び出しですね。

cakePHPのfileタグヘルパー

cakePHPのヘルパーで、$this->file()を使うときの大半は、ファイルノアップロードだと思う(他の使い道を知らないだけかも・・・)しかしながら、ファイルのサイズを書いたhiddenタグも必要なので、どうせだからと一緒に書き出すようにしてみた。

html.phpを cake/libs/view/helpersから app/view/helpersにコピーしてオーバーライドできるようにする。

function fileがある場所を探す。

function fileの引数の最後に、$size=300000 を追加。この数字は適当。

2つあるreturn~の行を

return $this->output("<input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"$size\" />".sprintf(・・・ と付け足してしまう。2つとも。 これで、ビューから、$this->file()とすれば、hiddenタグも自動的に出力される。パラメーターでファイルの大きさを指定できます。 あんまりクールな方法じゃないけど。

2007年05月10日

地道に改善

 この自動生成。地道に改善しているが、使い勝手はいい。
データーベースから、入力フォームのサンプルを作り出すのはかなり便利だし、単純なSQLも書き出してくれる。ついでに、バリデートするためのif文の羅列のスケルトンのスクリプトも書き出してくれるようにした。
 この辺の作業は、人それぞれのパターンがあると思うのでだが、それを書き出してくれると楽チン。フィールド名が増えても、SQLを書き間違えたりしないし、ほぼ毎回使う、SQLの成功、不成功のif、elseも自動で書き出してくれる。使い込むほどに出力サンプルを微調整していくと、徐々に便利差が増すようです。
 もうちょっとしたら、変更したのをアップしますね。

2007年04月25日

メールマガジン

ファイルをダウンロード

 メールマガジンを、メールマガジンらしくない方法で送信することを考えたメルマガ送信プログラムです。宛名の部分を書き換えながら1通づつ送信することで実現しています。
・相手の会社名、名前が入ったメールマガジンを送れる
・CCもBCCも使わず、1通づつ送る。
・共通部分はテンプレートが使える
・独自タグにより、本部中にも相手の名前を差し込める。
・送信元のメルアドも普通のアドレスを指定するので、そのまま返信可能
この結果、本文の内容をメルマガらしくしないように気をつけると、まるで一人ひとりに送信したような体裁で送る事ができます。

動作環境
・webアプリですので、webサーバー、PHP、sendmailが稼動する環境が必要です。
・ほとんどのブラウザで利用できます。
ファイルをダウンロード

注意事項
・公開されているwebサーバーの場合、必ずhtacssessなどで認証機能をつけてください。
・大量の送信をすると、比例してサーバーに負担が掛かります。
・ご利用は自己責任でお願いします。
・基本的にフリーソフトですが、広告メールや(含むアフェリエイト)で利用する場合は、適当な寄付をお願いします(1通1円程度を目安)。また有料であっても、特別サポートをすることはありません。
・改造、変更などはかまりませんが、再配布は禁止します。グレードアップされた方は、フィードバックしていただけると、本体をバージョンアップするときの参考になせて頂きます。

2007年04月24日

PHPコードの自動生成

ファイルをダウンロード

PHPでWebページを作るとき、データベースなどと連携させることが多いが、この手のスクリプトは、ほとんどが、表示、新規、更新、削除の3つだけでできている。あとはレイアウトを変更するだけと言うのが多い。そこで、ある程度、自動的に作ってしまうシステムを作成してみた作成してみた。

機能としては次のようなものになった。

データベースのホスト名、データベース名、パスワード、テーブル名を入力すると、テーブルの構造を取得、解析し、簡単な入力フォームと、一覧表表示、さらには登録、更新、削除するためのSQLを生成する。作成したものは、ブラウザ上で操作して、コピー&ペーストしながら使う。

注意事項としては、

スクリプトが手抜きなので、Warninngが沢山ででてくるが、入力が正しければ動作はする。
入力欄の最後のSELCT文の入力は機能していない。(今後のバージョンアップで使う)
そもそも、出力されたスクリプトが正しいのか、ちゃんと検証していない

自分のためだけに作ったお粗末なコードなので、動かない場合は報告&アドバイスなどしていだだけるととても嬉しい。

インストール ファイルをダウンロード  製作したいwebページと同じテストサーバーにアップして、
/WFW/dataBaseModel/create_Model.php
をブラウザで呼び出せば使える。 セキュリティを考慮していないので、ローカルなテストサーバでの利用をお勧めします。

RailonRubyのような立派なものではないが、フレームワークではなく、サンプルコードを吐き出すというのは、ファイル構造に左右されることも無く、解りやすい。単純なデータベースアプリの作成の手助けになれば良いと思う。今後のバージョンアップはもちろん、他の機能のサンプルコードを書き出すのも考えたいが、私の能力が足りないかも。 協力していただける人を募集しています

このスクリプトの利用は自由ですが、なんら責任は取れません。ゆえに、無断で再配布はしないでください。改善、改造した場合は、フィードバックしていただけると、バージョンアップさせていただきただくときの参考とさせていただきます。

2007年04月19日

mb_blogバージョン0.3リリース

mb_bogは、ある日思い立って作り始めたブログエンジンです。私にとって必要最低限の機能とは何かを意識したものです。画像はもちろん、音楽や、フラッシュ、などのアップロードを意識し、投稿用のタグを表示する簡易ファイルマネージャや、cssとindexをweb上で同時に開いて編集できる機能などが特徴といえば特徴です。RSS配信も一応あります。Pingの送信先も登録できます。全てPHP&MySQLで書かれ、常にデータベースから情報を読み込んで表示するダイナミック形式です。デザインは、CSSで管理なので、PHPとCSSを多少知っていれば、かなりのカスタマイズが可能です。ファイル構成が簡単なので、迷うことも無いと思います。
なお、トラックバック機能はありません。

特に問題なく動くと思うのですが、管理画面にパスワードをかけていません・・・

動作環境は、PHP4+MySQLが動くWebサーバーなら大丈夫かと。

カテゴリー

Powered by
Movable Type 3.35