ブログ出版局は、ブロガーがブログサービスからエクスポート(バックアップ)したデータを、ブラウザにより手作業でアップロードするようになっています。 しかし、この方法には以下の制約があります。
ブログ出版局が用意している連携機能は、上記の制約を取り払うものです。 連携機能を利用するには、ブログサービス会社様での技術的対応が必要です。
通常、ブログ出版局にブログデータを送る際は、ブログ出版局サーバー上のフォームからアップロードするしかありません。 しかし、連携機能を使う場合、そのような制約なしにブログ出版局へデータを送ることができます。
例として、http://blogservice.com/print.htmlにデータ登録フォームを用意したとします。 そこからblogservice.com内のCGI(あるいはPHP,サーブレットなど)へ必要項目をPOSTすると、CGIはblogservice.com内に開設されたブログのデータを加えてブログ出版局へPOSTします。 ブログ出版局は、プログラムが理解する形式で受付結果を返します。 blogservice.comのCGIは「データの登録を完了しました」といったメッセージを表示することになるでしょう。
見本PDFが作成されると、ブログ出版局からユーザーにメールで通知されます。 この先の、校正・注文といった流れはブログ出版局のフォームからデータ登録した場合となんら変わりありません。
見本ダウンロード画面では「もう一度本を作り直す」ボタンにより再度データ登録ページに戻ることができますが、デフォルトではブログ出版局上のデータ登録フォームが表示されます。 しかし、ブログ出版局にデータを送る際に、登録フォームのURLを指定しておけば、そのページに戻るようになります。 ただし、その際に登録フォームが既に以前記入された内容で埋められた状態になるためには、フォーム設置者の側の対応が必要です。 例えばPHPなどでフォームを復元するプログラムを書くことになるでしょう。
ブログサービスがブログ出版局にデータを送る際の方法は、通常のウェブブラウザからフォームによってデータを送る際と同じです。 すなわち、HTTPクライアントにより、multipart/formdata(RFC1867)に従ったデータを送信します。
データの送信先のURLはhttps://print.cssj.jp/misc/if/enqueue.xmlです。 SSLを用いる場合はhttps://print.cssj.jp/misc/if/enqueue.xmlにアクセスすることもできます。
以下に、ブログサービスから送られるデータの例を示します。
Content-Type: multipart/form-data, boundary=AaB03x --AaB03x Content-Disposition: form-data; name="dataFile"; filename="data.mt" Content-Type: text/plain MT形式のデータ... --AaB03x Content-Disposition: form-data; name="encoding" UTF-8 --AaB03x 他のリクエストパラメータ... --AaB03x--
ブログサービスが無事にデータを送信できたか確認できるように、ブログ出版局はXML形式で結果を返します。
無事にデータが受け付けられた場合は以下の応答を返します。
<?xml version="1.0" encoding="UTF-8"?>
<response>
<error>0</error>
<id>{ID}</id>
</response>
上記の{ID}の部分は受付IDです。 https://print.cssj.jp/order/proof.html?id={id} というページが見本のダウンロードページとなります。
エラーがあった場合は、以下の応答を返します。 messages要素の中身はHTML形式のエラーメッセージです。
<?xml version="1.0" encoding="UTF-8"?>
<response>
<error>1</error>
<message>
エラーメッセージ1<br />
エラーメッセージ2<br />
...
</message>
</response>
以下は、ブログサービスから送られるリクエスト・パラメーターの一覧です。 これらのパラメータ以外に、各表紙スタイル特有のパラメータ("sp-c-"で始まる)と、本文スタイル特有のパラメータ("sp-"で始まる)があります。 詳細は「利用可能な表紙スタイルと本文スタイル」を参照してください。
| 名前 | 必須 | デフォルト値 | 制約 | 説明 |
|---|---|---|---|---|
| formURI | - | - | - |
データ登録フォームのURLです。
ユーザーが見本をダウンロードするページから再登録の操作が行われたとき、このURLに戻ります。
このパラメータを省略した場合は、ブログ出版局のデフォルトのデータ登録画面に移動します。 データ登録フォームに戻る際、ユーザーのブラウザからPOSTメソッドで登録時と同じパラメータが送られます。 加えて、"id"というパラメータ名で受付IDが送られます。 データ登録フォームの作成者は、このパラメータを利用してフォームの状態を復元することができます。 |
| dataFile | 必須 | - | - | MT互換形式またはJUGEM互換形式のデータファイルです。 ファイル名(Content-Dispositionヘッダのfilenameパラメータ)の拡張子が".zip"である場合、ZIPファイルとして認識してファイルを展開します。 ZIPファイルに含まれるデータはそれぞれ結合されます。 |
| encoding | "JISAutoDetect" | "UTF-8" | "x-eucJP-Open" | "MS932"のいずれか | JISAutoDetect | - | MT互換形式データのキャラクタ・エンコーディングです。
JUGEM互換形式の場合は無視されます。
指定可能なエンコーディングは次の通りです。
|
| title | 必須 | - | - | ブログの題名。 |
| description | - | 表示しない | - | 要約/副題。 |
| author | 必須 | - | - | 著者名。 |
| publisher | - | 著者名と同じ | - | 発行人。 |
| baseURI | 必須 | - | 255文字以内 | ブログのURL。 |
| coverStyle | 必須 | - | 数値 | 表紙のスタイル番号です。詳細は「利用可能な表紙スタイルと本文スタイル」を参照してください。 |
| makeToc | - | "0" | "0"または"1" | 目次の自動生成機能です。"1"であれば有効になります。 |
| sp-includecomment | - | "0" | "0"または"1" | コメントを書籍に含めます。"1"であれば有効になります。 |
| sp-black | - | "0" | "0"または"1" | カラー印刷の際に全ての文字色を黒にします。"1"であれば有効になります。 |
| sp-no-table | - | "0" | "0"または"1" | 表組みを無効にして添加する機能です。"1"であれば有効になります。 |
| superConvertBreaks | - | "0" | "0"または"1" | 3つ以上連続する改行を除去して2つの改行にします。"1"であれば有効になります。 |
| noBreaksInParagraphs | - | "0" | "0"または"1" | 段落内での改行を除去します。"1"であれば有効になります。 |
| textStyle | 必須 | - | 数値 | 本文のスタイル番号です。詳細は「利用可能な表紙スタイルと本文スタイル」を参照してください。 |
| color | - | "gray" | "gray"または"color" | モノクロ印刷、カラー印刷の指定です。"gray"であればモノクロ、"rgb"であればカラーです。 |
| fetchHref | - | "0" | "0"または"1" | サムネイルのリンク先の画像を使用するか機能です。"1"であれば有効になります。 |
| cIncludeDraft | - | "0" | "0"または"1" | 「下書き」となっている記事も本に含めます。"1"であれば有効になります。 |
| cCategories | - | 全てのカテゴリーを含める | - | 本にする記事の属するカテゴリーのリストです。各カテゴリ名は改行で区切られます。 |
| cGroupByCategory | - | "0" | "0"または"1" | カテゴリーごとに記事をまとめます。"1"であれば有効になります。 |
| mailAddress | 必須 | - | 255文字以内のメールアドレス | 見本の送付先メールアドレス。 |
ブログ出版局では予告無く表紙や本文スタイルのバリエーションを増やすことがあります。 そのため、現在利用な表紙・本文スタイルや拡張パラメータを取得するためにしくみが用意されています。
表紙スタイルと本文スタイルを選択するためのフォームはJavaScriptによる、 Client Side Include(CLI; ブラウザによるコンテンツ挿入)によって表示することができます。 CLSのためのJavaScriptコードはブログ出版局のサーバーから常に最新のものが取得できるので、 ブログ出版局の現在のスタイルバリエーションを即座に利用できます。
まず、以下のように、フォームページの先頭で https://print.cssj.jp/static/js/common.js というJavaScriptを実行するようにします。
<head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>SAMPLE</title> <script type="text/javascript" charset="UTF-8" src="https://print.cssj.jp/static/js/common.js"></script> </head>
さらに、フォーム部品を設置したい位置に以下のHTMLコードを挿入してください。 この例ではテーブルを使っていますが、4種類のid属性を任意のタグに設定して、最後に https://print.cssj.jp/misc/if/enqueue.js.txt というJavaScriptを実行すれば各タグにフォーム部品が挿入されます。
<table>
<tr>
<td id="coverSelect"></td>
<td id="coverOptions"></td>
</tr>
</table>
<table>
<tr>
<td id="textSelect"></td>
<td id="textOptions"></td>
</tr>
</table>
<script type="text/javascript" charset="UTF-8"
src="https://print.cssj.jp/misc/if/enqueue.js.txt"></script>
id属性と挿入される内容の関係は以下の通りです。
データの再登録などで、ユーザーが全ての項目を再入力しなくてもよいように、フォームを復元する仕組みが用意されています。
データの再登録の際、ユーザーはブログ出版局からformURIパラメータで示されたページへ誘導されます。 このページへは、ユーザーが前回送った、dataFile以外のパラメータがそのままPOSTされるため、 ブログサービス側のシステムでそれを利用することができます。 加えて、"id"というパラメータ名で受付IDが送られます。
ブログ出版局のサイトには、フォームの復元に便利なJavaScriptのプログラムが用意されています。 https://print.cssj.jp/static/js/client-form.js というスクリプトを以下のようにページの先頭で呼び出しておいてください。
<script type="text/javascript" charset="UTF-8" src="https://print.cssj.jp/static/js/client-form.js"></script>
この中では、createClientForm(form)という関数が用意されています。 formには復元したいフォームオブジェクトを渡してください。 createClientFormが返したオブジェクト内で、POSTされたパラメータ/値に対応するparameter(name, value)関数を呼び出し、 最後にrestoreAll()を呼び出すことでフォームが復元されます。
例えば、CGIなどで以下のようなスクリプトが生成されるようにしてください。
with (createClientForm(document.forms[0])) {
parameter('title', 'hoge');
parameter('auther', 'fuga');
// ...他のパラメータ
restoreAll();
}
通常のウェブアプリケーションのように、POSTされてくるパラメータを利用して、全てサーバーサイドでフォームを復元することもできます。
なお、サーバーサイドで全て処理する場合は、 スタイル選択フォームを復元するためにJavaScriptのURLに、パラメータとして送られてくる前回の受付IDを渡してやる必要があります。 例えば、フォームの実装がPHPである場合は以下のように記述する必要があります。
<script type="text/javascript" charset="UTF-8" src="https://print.cssj.jp/misc/if/enqueue.js.txt?id=<%= $_POST['id'] %>"></script>
表紙や本文スタイルの情報はブログ出版局の特定のURLにアクセスすることによって、簡単なXML形式(とは言えHTMLの一部分として利用できます)として得ることもできます。
スタイルの一覧は、 以下のURLから取得できます。
| 表紙スタイルの一覧 | https://print.cssj.jp/misc/if/coverStyle.select.xml |
| 本文スタイルの一覧 | https://print.cssj.jp/misc/if/textStyle.select.xml |
返されるデータは、HTMLのselect要素であり、含まれるoption要素は値がスタイル番号で、ラベルがスタイル名です。 select要素のname属性とid属性は表紙と本文でそれぞれ"coverStyle","textStyle"という文字列になっています。
以下は表紙スタイルの一覧の例です。
<?xml version="1.0" encoding="UTF-8"?> <select name="coverStyle" id="coverStyle"> <option value="0">文庫風</option> <option value="1">縦縞</option> <option value="2">論文</option> <option value="3">幾何学模様</option> <option value="4">結婚式</option> <option value="5">誕生日</option> <option value="6">どうぶつ</option> <option value="7">写真</option> <option value="8">チューリップ</option> </select>
以下は本文スタイルの一覧の例です。
<?xml version="1.0" encoding="UTF-8"?> <select name="textStyle" id="textStyle"> <option value="4">新・現代文芸</option> <option value="1">理科系</option> <option value="2">電車</option> <option value="3">詩</option> <option value="0">現代文芸</option> </select>
この出力結果は、coverStyleまたはtextStyleパラメータを送るためのフォームの一部として利用することができます。
各スタイルの詳細な説明と、各表紙スタイル特有のパラメータを送るためのフォームも同様に得ることができます。 以下が、そのURLです。
| 表紙スタイルの説明とフォーム | https://print.cssj.jp/misc/if/coverStyle.options.xml?coverStyle=スタイル番号 |
| 本文スタイルの説明とフォーム | https://print.cssj.jp/misc/if/textStyle.options.xml?textStyle=スタイル番号 |
返されるデータはHTMLの一部であり、ルート要素はdiv要素で、id属性は表紙と本文の場合でそれぞれ"coverStyle-スタイル番号","textStyle-スタイル番号"という形式になります。 div要素の中には必ずfieldset要素があり、この中身がパラメータを送るフォームです。 fieldsetの外側がスタイルの説明です。
以下はhttps://print.cssj.jp/misc/if/coverStyle.options.xml?coverStyle=2で返される表紙スタイルの説明とフォームの例です。
<?xml version="1.0" encoding="UTF-8"?>
<div id="covers">
<div id="coverStyle-2">
解説書向けのシンプルなデザインです。
この表紙はカバー付きにすることができます。
<fieldset>
<legend>オプション</legend>
色:
<select name="sp-c-color">
<option value="red">赤</option>
<option value="green">緑</option>
</select>
</fieldset>
<a href="static/images/samples/cover/ronbun-red.jpg" target="_blank">
<img width="160" height="118" src="static/images/samples/cover/s-ronbun-red.jpg" class="bordered"/>
</a>
<a href="static/images/samples/cover/ronbun-green.jpg" target="_blank">
<img width="160" height="118" src="static/images/samples/cover/s-ronbun-green.jpg" class="bordered"/>
</a>
</div>
</div>
以下はhttps://print.cssj.jp/misc/if/textStyle.options.xml?textStyle=1で返される本文スタイルの説明とフォームの例です。
<?xml version="1.0" encoding="UTF-8"?>
<div id="textStyle-1">
<div>
理系に限らず、解説文などにも使えるオーソドックスな横書きスタイルです。
本文はヒラギノ明朝体です。<br/>
<a target="_blank" href="static/images/samples/text/rikakei.pdf">レイアウト見本(PDF)</a>
</div>
<fieldset>
<legend>オプション</legend>
<input type="checkbox" name="sp-breakbydate" value="1" id="sp-breakbydate"/>
<label for="sp-breakbydate">日付ごとに改ページする </label>
<br/>
<input type="checkbox" name="sp-showdate" value="1" id="sp-showdate" checked="checked"/>
<label for="sp-showdate">日付を表示する</label>
<br/>
<input type="checkbox" name="sp-dateindex" value="1" id="sp-dateindex" checked="checked"/>
<label for="sp-dateindex">日付からヘッダ・フッタ・目次を作成する</label>
<br/>
<input type="checkbox" name="sp-hidefooter" value="1" id="sp-hidefooter"/>
<label for="sp-hidefooter">ヘッダ・フッタを表示しない</label>
<br/>
<div><b>見出しフォント</b></div>
<select name="sp-header-font">
<option value="mincho">ヒラギノ明朝体</option>
<option value="gothic">ヒラギノ角ゴシック</option>
</select>
<div><b>本文フォント</b></div>
<select name="sp-font">
<option value="mincho">ヒラギノ明朝体</option>
<option value="gothic">ヒラギノ角ゴシック</option>
</select>
<br/>
<input type="checkbox" name="sp-plain-more" value="1" id="sp-plain-more"/>
<label for="sp-plain-more">追記部分を標準字体にする</label>
<br/>
<div>ページ余白</div>
<select name="sp-margin">
<option value="normal">標準</option>
<option value="thin">小</option>
</select>
<br/>
</fieldset>
</div>
ブログ出版局では、特定のブログサービス様向けに、専用の表紙スタイルやアフィリエイトなどを用意することがあります。 その際、print.virtual-domainパラメータでブログサービス様を判別します(通常はブログサービス様のFQDNを用います)。 詳細はhttps://print.cssj.jp/b2c/contact.phpからお問い合わせください。 なお、審査および別途費用が必要になることがあります。
print.virtual-domainパラメータは、POSTパラメータではなく、必ずURLのクエリパラメータとして送ってください。 例えば、mydomain.comという識別文字列が与えられている場合、データの送り先アドレスは https://print.cssj.jp/misc/if/enqueue.xml?print.virtual-domain=mydomain.com となります。
独自の表紙や本文スタイルを利用する場合は、表紙や本文の一覧の取得のための、以下のアドレスにprint.virtual-domainパラメータを付与する必要があります。
Perlのプログラム例を用意しています。こちらからダウンロードしてください。