mt-csv2customfields
「CSV形式のデータを Movable Type のカスタムフィールドに一括読み込みさせたい」という要望がかなり多いようなので、スクリプト mt-csv2customfields.cgi を作成しました。
CSVファイルを読み込み、新規ブログ記事のカスタムフィールドに登録します。
2011.07.11 より高機能なプラグイン「CSVDataImExporter」をリリースしました。
1.機能
今のところできるのは次の通りです。
- 新規ブログ記事のみ対応
- タイトルの書き込み
- 本文の書き込み
- カテゴリーまたはサブカテゴリーの書き込み。カテゴリーが存在しない場合は新規作成(トップレベルのみ)
- タグの書き込み(複数設定可能)
- 出力ファイル名の書き込み
- コメント受信設定・トラックバック受信設定の書き込み
- カスタムフィールド(テキスト形式)の書き込み
- 複数のカスタムフィールドに対応
- 既存のブログ記事タイトルを指定した場合、カスタムフィールドのみ上書き(他のフィールドの内容は無視)
CSVのフォーマット
CSVデータは次のフォーマットにしてください。
1行目:
タイトル:'title'を設定
本文:'text'を設定
カテゴリー:'category'を設定
タグ:'tags'を設定
出力ファイル名:'basename'を設定
コメント受信設定:'allow_comments'を設定(0:非許容/1:許容)
トラックバック受信設定:'allow_pings'を設定(0:非許容/1:許容)
カスタムフィールド:カスタムフィールドのベースネームを設定
2行目以降:フィールドに対応したデータ。
カテゴリーは新規のトップカテゴリー(他と重複しない名称)または既存のカテゴリー名(サブカテゴリーであればサブカテゴリー名のみ設定)。
タグは新規のタグも大丈夫で、":"で区切れば複数設定できます。
なお、CSVデータはUTF-8のものしか確認ができておりません。
3.CSVデータのサンプル
title,text,category,tags,basename,allow_comments,allow_pings,test1,test2,test3
たいとる1,てきすとの内容1,カテゴリー1,タグ1:タグ2,aaa,1,1,カスタムフィールド1の内容1,カスタムフィールド2の内容1,カスタムフィールド3の内容1
たいとる2,てきすとの内容2,カテゴリー2,タグ3:タグ4,bbb,0,0,カスタムフィールド1の内容2,カスタムフィールド2の内容2,カスタムフィールド3の内容2
たいとる3,てきすとの内容3,カテゴリー3,タグ5:タグ6,ccc,1,0,カスタムフィールド1の内容3,カスタムフィールド2の内容3,カスタムフィールド3の内容3
4.ライセンス
4.1 商用ライセンスの Movable Type で利用する場合
商用ライセンスの Movable Type で利用する場合は、有償(3000円/1サーバ)とさせて頂きます。お振込み方法につきましては、お問い合わせよりメールにてご連絡ください。
以下のPaypalからもご利用頂けます。
4.2 個人ライセンス(無償)と組み合わせる場合
個人ライセンス(無償)と組み合わせる場合は、無償でご利用ください。
5.インストール
下記のファイルをダウンロードして、展開した中にあるmt-csv2customfields.cgi をアプリケーションディレクトリにアップロードし、CGIが実行可能なパーミッションを変更してください。
たいしたスクリプトではありません。α版ということでお試しください。
修正履歴
v0.01 2008.03.24 初版
v0.02 2008.04.21 カテゴリーとタグに対応。head / body 要素の重複削除
v0.03 2009.11.17 出力ファイル名、コメント受信設定、トラックバック受信設定に対応
6.利用方法
ブラウザから mt-csv2customfields.cgi にアクセスすると、次のような画面が表示されるので、ブログのID、ユーザーIDを数字で設定し、CSVファイルを選択して送信をクリックしてください。
正常に実行できれば次のような画面が表示されます。
登録後のブログ記事編集画面です。
- Movable Typeのカスタムフィールドのオプションの表示名を表示する方法
- Movable Typeの日付カスタムフィールドを使って「予定」「開催中」「終了」を別々に表示する方法
- Movable Typeの日付カスタムフィールドを2つ使って「開催中」を表示する方法
- Movable Typeの日付カスタムフィールドを使って現在時刻と比較する方法
- Movable Typeのカスタムフィールドに入力した複数のブログ記事IDからブログ記事リストを出力する
- Movable Typeのポップアップコメントにカスタムフィールドを表示する
- コメントカスタムフィールドの値をクッキーに保存する方法
- コメントプレビューでカスタムフィールドの値を表示する
- Movable Typeのサインアップ画面に表示するカスタムフィールドの順序を並べ替える
- コメント用カスタムフィールドの投稿フォームのカスタマイズ(その2)
- コメント用カスタムフィールドの投稿フォームのカスタマイズ(その1)
- 特定のカスタムフィールドの情報を出力する(その2)
- 特定のカスタムフィールドの情報を出力する
- Movable Type 5.0 のカスタムフィールドをカテゴリで振り分ける
- カスタムフィールドの入力文字数が改善
便利なツールをありがとうございます。
ところで、これはカテゴリの設定はできませんか?
>yoshiさん
こんにちは。
ご質問の件ですが、ご要望の機能を追加してみました。
それではよろしくお願い致します。
ありがとうございます!大変助かります。
便利なツールをありがとうございます。
やりたいことはまさにコレって感じで、ありがたく使わせていただいてます。
2つのレンタルサーバで試してみましたが「UTF-8」だと、肝心のタイトルだけ何故か空っぽ(記事のリストで見ると「…」)になってしまいます。
(本文~カスタムフィールドは全て問題なく一括入力できています。)
「UTF-8N」で保存しなおしたところ、ようやくタイトルも含めて夢の一括読み込みができたのですが、個人的にちょっと不具合が…。
というのは、ブログ記事の出力ファイル名を指定したかったんです。
CSVデータ「本文欄」の冒頭に「希望のファイル名(英数字)」を追加して読み込むというやり方で出力ファイル名を指定していたのですが、UTF-8Nではこの方法が通用しないようです。(MT側が勝手につける「post」「post-1」等になってしまいます。)
UTF-8のときはタイトルが入らない代わりに出力ファイル名は希望通りの設定ができていたので、今はとりあえずUTF-8で読み込んだ後、タイトルを元ファイルからコピペしてます。
出力ファイル名も設定できるとウレシイのですが。
ちょっとハマってしまったので僭越ながら報告させていただきました。
報告ついでで恐縮ですが、以下さらにワガママな要望をいくつか…
ブログの設定でコメント&トラバを許可しているのですが、読み込まれた記事ではチェックが外れてしまいます。
ここも設定できたらハッピーです。
最後に一気に読み込むと公開時間が同じになってしまうせいか、idは読み込み順にキレイに並んでいるのですが、投稿順が逆?になってしまいます。
入力元のCSVデータには入力日のデータもあるので、できれば公開日も操作できると最高なんですけど^^
以上、ワガママ放題な長文コメントで失礼いたしました。
>moppyさん
こんばんは。
ご返事遅くなり申し訳ありません。
タイトル&コメント&トラックバック&公開日の件、ご要望承りました。
誤ってUTF-8ではなく、shift-jisで保存してアップロードをしてしまいました。
そのため、誤ってアップしてしまったエントリーやカテゴリーをMTの管理画面で削除しようとしたところ以下のようなメッセージが現れて削除が出来ませんでした。
こうなってしまうと、どのエントリーも削除をすることが出来なくなります。
一旦、UTF-8以外でアップしてしまったらもう消すことは出来ないのでしょうか?
エラーメッセージ
close Can't call method "execute" on an undefined value at /home/******/www/******/blogmt/extlib/Data/ObjectDriver/Driver/DBI.pm line 486.
便利なツールをありがとうございます。
質問ですが、カテゴリは1つしか選べないのでしょうか?
複数カテゴリが選択できたらいいなぁと思ったので、よろしくおねがいします。
>ねもさん
こんにちは。
ご要望事項として、複数カテゴリについて承りました。
可能であれば実装したいと思います。
夢のようなツールありがとうございます。
ただ私も上記の方と同じように、サブカテゴリー、ファイル名、が使えたらとってもうれしいです!!
>TAKUさん
こんにちは。
コメントの件、ご要望事項として承りました。
すいませんが今しばらくお時間ください。
それではよろしくお願いいたします。
こんにちは。いつも楽しく拝見させていただいており
ありがとうございます。
ご質問になりますが
MTOSでは上記のツールは満たされないのでしょうか?
お手数ですがご教授いただけますでしょうか。
>ichicorocoroさん
こんばんは。
ご質問の件ですが、MTOSでもご利用ください。
カスタムフィールドが画像の場合も対応でしょうか?
その場合、単純にファイル名で大丈夫でしょうか?
こんばんは。いつも貴サイト大変活用させていただいております。
一点ご質問なのですが、こちらのツールをブログ記事ではなくウェブページに対応させることは可能でしょうか?
自力でなんとかできないかとcgiの中身を少しだけいじらせていただいたところ、既存ウェブページにカスタムフィールドの値を上書きすることは簡単にできるようになったんですが、新規ウェブページの処理で行き詰まってしまいました。
もし対応可能であれば、改変箇所などご助言をいただければ幸甚です。
>たまきさん
こんばんは。
ご返事遅くなり申し訳ありません。
ご質問の件ですが、下記の2行を利用すれば可能と思われますので、お試しください。
下記を追加
use MT::Page;
また、
$entry = MT::Entry->new;
を下記に変更
$entry = MT::Page->new;
それではよろしくお願い致します。
こんにちは。ご回答ありがとうございました。
確認が遅くなりまして申し訳ございません。
ご教示いただいた方法で、無事にウェブページに対応させることができました。
フォルダ登録の部分で少し手間取ってしまいましたが、教えていただいたことをヒントにクリアすることができました。
ついでに概要や追記も項目追加させていただき、おかげさまでウェブぺージの一括登録がとってもスムーズにできるようになりました。
本当にありがとうございました!
>たまきさん
こんばんは。
ご連絡ありがとうございました。
うまくできたようでよかったです。
ではでは!
はじめまして。
こちらのプラグインをつかってMTOSにCSVファイルのアップロードを試みているんですが、以前のバージョンのコメントにあったのを元に
MTOS本 の自作カスタムフィールドの値をインポートしようと試みたのですが上手く行きませんでした。
my @field = ('title','text','category','tags','allow_comments','allow_pings','basename','sub_title6','sub_price2','sub_price3','sub_title5','sub_title4','sub_title01','sub_title9');
のようにして
#debug $buf .= $data[$i];
next;
}
if ($flag{sub_title6} && $pos{sub_title6} == $i) {
$entry->sub_title6($data[$i]);
以下略
の追記をしたのですが、これは可能なんでしょうか。
※自作フィールド以外の値はインポートできました。
sudohさん、なかなかレスが付かないようなので横から失礼します。
以前あったコメントとは私が質問したコメントなのでは?と思いこの場を
お借りしました。
私も最初うまくいきませんでしたが、「MTOS活用テクニック 藤本壱著」の
自作カスタムフィールドへのCSVファイルの取り込みは何とかできました。
ここで私が長々書くのはおかしいと思うので、良ければメールください。
私でお力になれればご協力します。
おかげさまで、カスタムフィールドのインポートができました。ただ、一部のデータのtitleに「,」が入っていて、項目がずれて入力されます。
例:1,000 など
「"1,000"」としても「"」がそのまま入力されてしまいます。
よい解決方法がありませんか?