ひまつぶし雑記帖

epub制作に必須のArchive Zipのメモ

2014/10/20 [10:03:27] (月) 天気

電子書籍作成ページの依頼があって久しぶりにスクリプトを眺めてみた。
(電子書籍の制作ではなくて、電子書籍を作成するページの作成)

エラーのないepubを作るのは手順の塊…というか手順だけなので面倒くさいんだけど難しいスクリプトでもない。
ユーザーの入力をどこまで自由にするのか、ページ移動はどうするのか、エラー処理は、ブラウザ対応は、などなどepub作成以外の部分で考えなきゃいけないことがいろいろあるのはwebだからしかたがないところ。

Archive::Zipのメモ1

てなことを考えながら見てたら、epubをパッケージするzipのモジュール、Archive::Zipでエラー。

他のスクリプトでは問題なく使えているモジュールで原因がわからないし、該当箇所を見てもよくわからない。

zipにファイルを追加していくところでエラーになってしまう。いろいろ試行錯誤。

結果。追加するファイルが見当たらない、pathが違ってたというだけのことだった。コンセントが抜けてますよレベルの話だった。
…でもなあ、このエラーメッセージじゃわからん。とほほ。


Archive::Zipのメモ2

前々からArchive::Zipで圧縮したらそれをファイルの書き出すのではなくて、標準出力にそのまま吐き出せればいいのにと思っていて、ついでなので調べてみたら、当たり前のように用意されていた。おのれの不勉強に愕然。そりゃそうだよなあ。

writeToFileHandleのファイルハンドルに標準出力を指定してやればOKだった。

これで正常なzipファイルを出力することができた。


久しぶりにこの手のことでグーグル様詣で。以前Archive::Zip について調べた時には見かけなかったepubがらみのQ&Aなんかが検索でひっかかってきてちょっとびっくり。

電子書籍を作る側は充実してきてるんだなあ、と変なところで実感した。

»電子書籍制作代行についてはこちら

改行混じりのcsvをperlで処理する

2014/6/24 [14:00:22] (火) 天気

ASPのデータベースからエクスポートされたcsvの集計作業ということで眺めてたら、セル内で改行がある・セル内にコンマがある、という腐ったデータでムカついた(「csvにエクスポート」するんだからコンマや改行の扱いをちょっと考えてくれりゃいいものを)

あちこちの管理画面でエクスポートというとcsv形式になってることが多い。
それをエクセルに読み込んで…
・行や項目の多いシートになると横スクロールに縦スクロールで大騒ぎ。
・改行が混じってるとその行だけセルが異様に広がっていて目障り。
・csvの値は属性を持ってないのでエクセルが勝手に判断してただの数値を日付表示にしたり意味不明の表示になっていることなどざらにあってイライラさせられる。

こういうデータをエクセル上で手作業すると簡単に間違う。わたしは。

なもんで、perlで読み込んで一括処理・集計した方が早いし確実。その場限りの使い捨てのスクリプトを書いて対応している…ところが、perlやAWK、sedなどは行単位での処理が基本。改行の混じったcsv、まさに今回のようなcsvデータは扱いが面倒くさい。

ということで今日もまた 「Perlメモ」 のお世話になりました。

perlでセルに改行やコンマが入っているcsvデータを処理する。

(出典:http://www.din.or.jp/~ohzaki/perl.htm
このまま利用させていただきました(ありがとうございます)

今さら知ったこと気づいたこと。
正規表現のパターンマッチは、リストコンテキストで評価すると()でくくった正規表現でひっかかった部分文字列のリストを返す。

今までこんなケースでは修飾子「g 」は使えないもんだとばかり思っていて 1 while(s/(.+)/$1/) など1つずつパターンマッチさせて処理していた。

scalar関数。リストの要素を数えるぐらいしか使ってなかったんだけど、今回このスクリプトでの使い方がまるでわからず調べてみたところ
http://perldoc.jp/func/scalar

scalar は単項演算子なので、EXPR として括弧でくくったリストを使った場合、 これはスカラカンマ表現として振舞い、最後以外の全ては無効コンテキストとして 扱われ、最後の要素をスカラコンテキストとして扱った結果が返されます。


ここでは「””」を「”」にするために使っている。
mapの条件式で部分文字列が「”」で括られていたら、scalar関数に文字列を渡して
「部分文字列をscalar関数のデフォルトに入れて、「””」を「”」に置換して、デフォルトの$_を返す」
左から順番に評価していって、コンマで繋いで各々の結果を切り捨てて、最後に残った式の結果を返すためだけにscalar関数を使っている。トリッキーで面白いなあ。これはループの中で使い途がある。

勉強になりました。


「perlパズル」
↑以前書いた、コンマの使い方のメモ

 

»電子書籍制作代行についてはこちら

ストアごとのリンク生成

2014/6/18 [16:38:58] (水) 天気

今日時点、ウチが電子書籍で有料販売しているのは kindleストアと iBookstoreの2つ(無料販売をしているのはiBookstoreとgoogle playブックス、楽天koboの3つ)

ひとつのタイトルを複数のストアで販売しているような場合、ほとんどのところがやってるように「タイトルがあってそこにストアが複数ぶら下がる」表示形式の方が当然わかりやすい…kindleで始まっちゃったもんだから、データの持ち方を間違えていてAmazonのasinをキーにしているので修正が面倒くさいということもあって放置してた。また、AWSのこともあってウチのサイトはあちこちにasinを使ってるはずなんだけど、5分前の自分はすでに他人なので、まるで覚えていない。

影響範囲が大きいので別ページで試してから徐々に修正していく(徐々にkindle以外にも並べるべく)
まずは 「EPUB3::かんたん電子書籍作成」 の右サイドのコンテナでお試し。データベースはいじらずにスクリプトに配列をベタベタ書いて作ってみた。

スクリプト自体は使い回しだし、目新しいこともなく簡単に出来たんだけど、ちょっと気になったのがレギュレーション。

ストアへリンクするのにロゴなど画像を使った方がキャッチーでわかりやすいのは間違いない。kindleの利用規約や商標利用に関するページや、App Storeマーケティグガイド系のPDFをざっとみて…よくわからなかったのでロゴ画像を使うのはやめた。
(といいつつ、App StoreのPDFはこんな使い方しちゃダメですよ、と画像つきでレギュレーション解説があってわかりやすかったです、はい)

サイトを辿ってみると、デザインに合わせてロゴを加工して使ってるところがあるなあ。
また(c)表示も GyaO  http://gyao.yahoo.co.jp/ct/anime/ を見るとページの一番下にごちゃーっとひとくくり。昔から雑誌なんかでも見るやり方ではあるけど、本当なら作品の近くになきゃいけない、はず。

目立たないのでOKのケース、力関係でOKのケース。
ということで、小心者で善良な納税者のわたしは触らぬなんちゃらの日和見。うーん、我ながらデザインだせえ。


今回のperl小ネタ。配列を order by random。

(出典:http://www.din.or.jp/~ohzaki/perl.htm
いつも参考にさせていただいている  「Perlメモ」  のまんま(ありがとうございます)
今さらながら配列のスライスでこんなことができる(for文の最後の行)なんて知らなかった。


[06/19 08:37:59] 追記。
この雑記帖の上に配置してみた。
・カテゴリ電子書籍一覧を表示している時
・ひとつの記事を表示している時
の2パターン。うるさかったら外そうと思ったけど意外に違和感もなかったのでアクセスの様子見してみる。

»電子書籍制作代行についてはこちら

一発芸:Kindleサンプル表示セット

2014/4/23 [17:36:34] (水) 天気

KDP用にサンプルチェックをするだけ、というスクリプトを書いたついでに、もう少しそれっぽくサンプルを表示できるようなセットを作ってみたので公開してみます。

https://t2aki.doncha.net/tmp/kindle-sample.html
サンプルと書かれたリンクをクリックするとkindleから公開されているサンプルを取得して、縦書きで表示します(残念ながらFirefoxなどは横書き)例によって一発芸ネタなので投げっぱなしで失礼。

kindleのサンプルを取得するためのCGIファイルと、表示のためのJavascriptとスタイルシート(縦書き)、それとサンプルのHTMLファイルの構成。

やることは以下の3つ。

・cgiファイルを自分のサーバーの実行可能なディレクトリにアップロード
・javascriptとcssを所定のディレクトリにアップロード
・HTMLの各該当部分を編集。

てな感じ。ちょっと面倒くさいです。

表紙画像は自分の作品なら自分で用意しましょう。
実際にAmazonのkindleストアでサンプルをダウンロードして確認してるひとがどのぐらいいるのか不明だけど、少なくともわたしはいきなり買っちゃう。ので、自分のサイトがあるならそこでサンプル表示をして見てもらえるならそれはそれでいいよなあ、ということで思いつき。



中身的には、単純に公開されているサンプルを取ってくるだけで、AWSのOAuth認証なんかも不要だしアフィリエイトタグもいらないので簡単。

公開されているサンプルが使っているタグは(表示に関係してるのは)h1とPタグ程度。
取得した時に全体を「kindle-sample」というクラスをつけたdivで囲んでるので、kindle-sample.cssを適当に書き換えてもらえれば横書きなどもできます。

ソースが汚いのは素人芸だから勘弁してください。


[04/23 17:52:52] 追記。
ちなみに、縦書きなどスタイルのカスタマイズが不要であれば、
ttp://kindleweb.s3.amazonaws.com/content/ASIN/gz_sample.html
このURLのASINの部分を、表示させたいkindleのASINコードにしてインラインフレームでやればそれだけでOKです。

»電子書籍制作代行についてはこちら

めも:perlでcsvデータ

2014/4/16 [09:02:27] (水) 天気

最近あまりスクリプトを書いてなくて、いざ書こうと思ったら忘れていてビックリしたのでメモ。

csv(コンマ区切り)に限らずタブ区切りでも同じく。
DBIを使ってデータベースと同じように扱うモジュールもあるけど、そこまでのスペックは不要で、とりあえず目の前にあるエクセルや管理ページからダウンロードしたcsvを扱えればそれだけでOKというところ。

コンマやタブで区切られて、ヘッダがついていてデータが並んでいる

てな感じのデータ。

これを split してそのまま配列に入れればいいだけなんだけど、

単純に区切りでバラして配列に入れただけだと、データを取り出す時に $w[1] などと書くことになる。それよりはハッシュ(連想配列)にして $_->{title} などとヘッダでつけた名前(キー)で取り出せた方が間違いも少ない。

ヘッダをキーにしてデータを入れて取り出せるようにするのが以下(改行やEncodeなどは省略)

たぶんここがハッシュ(連想配列)の面白い書き方。
ヘッダ(文字)の配列をキーに、データの配列を値に一度に入れてしまう部分。

これのおかげで、カラム数が100とか200とか多くてもへっちゃら。

@bufという配列に一行ずつハッシュとして入って、データの取り出しもキー(名前)でわかりやすく。

てのを、仕事でもプライベートでも何度もあちこちで使い捨てで書き散らしていたんだけど、メモがどこにも残ってなかったので改めて。

どうでもいいけど、「ハッシュ」って色気がないよなあ。せっかく「連想配列」というそそられる名前があるんだからこちらを使うべき。

»電子書籍制作代行についてはこちら

epub2のtoc.ncxをepub3の目次に変換

2014/1/15 [17:37:13] (水) 天気

Sigilなどで作られるepub2ファイルをepub3ファイルに変換するための小ネタ。

・各xhtmlファイルのヘッダを書き換える

これはエディタのマクロや、スクリプトで一括可能。複数のファイルに対して検索置換できるエディタがあればこういう時に重宝する。

・opfファイルを書き換える
 metadata部
 epub3の書式に合わせて書き直し…ってほぼそのままでイケるような気がするけど、既存のEPUB3ファイルのopfファイルを開いてコピペ、それをひな形にしてepub2の方から必要なものを移植するのが確実かな。
 manifest部
 toc.ncxがらみの記述を削除。
 新たにナビゲーション文書を設定・指定する。各プロパティ指定を確認。
 spine部
 toc.ncxがらみを削除。あとはそのまま。
 guide部
 まるごと削除

エディタやスクリプトで一括が可能だと思うけど、metadata部がちょっとメンドクサイので手作業コピペ。

・ナビゲーション文書を新規作成する。

ナビゲーション文書(たとえばnav.xhtml)を新たに作る必要がある。いまのところ、目次とランドマーク。ランドマークはopfファイルにguide部があれば、それをコピペして編集すればイケる。
epub2のtoc.ncxをepub3目次用のリストに変換するのが以下のスクリプト。


まとめて全部、一括変換するスクリプトを書こうとうだうだやってたんだけど、metadataの差の吸収が意外に面倒くさいので投げた。今日のところは。
…気力があったらそのうちスクリプトを書いて、もう少し丁寧に説明を書いておくかなぁ。

»電子書籍制作代行についてはこちら

profile

profile

 
doncha.net
名前:
飯田哲章
mail:
t2aki@mrh.biglobe.ne.jp
twitter:
t2akii

WEBサービス制作/電子書籍制作

検索
<<2020/8>>
      1
2345678
9101112131415
16171819202122
23242526272829
3031

リンク

WINDOWS版サウンドノベル
おかえりください PC WINDOWS版サウンドノベル
『おかえりください』体験版

iPhone電子書籍アプリ
小説同人誌Select iPhone電子書籍アプリ
『小説同人誌Select』

[19 Page]« »
1 2 3 4 5 6 7 8 9 10

TOTAL:2891

2020 (13)
1 (2)
2 (6)
4 (1)
6 (1)
7 (2)
8 (1)
2019 (17)
1 (3)
2 (4)
3 (2)
4 (2)
5 (1)
6 (1)
8 (1)
10 (1)
12 (2)
2018 (21)
1 (3)
2 (2)
3 (2)
4 (1)
5 (1)
6 (6)
8 (1)
9 (1)
10 (2)
12 (2)
2017 (32)
1 (2)
2 (1)
4 (2)
5 (1)
6 (6)
7 (3)
8 (5)
9 (3)
10 (2)
11 (2)
12 (5)
2016 (41)
1 (5)
2 (5)
3 (2)
4 (3)
5 (4)
6 (6)
7 (2)
8 (2)
9 (3)
10 (1)
11 (4)
12 (4)
2015 (99)
1 (11)
2 (12)
3 (9)
4 (6)
5 (8)
6 (8)
7 (3)
8 (5)
9 (16)
10 (6)
11 (1)
12 (14)
2014 (112)
1 (16)
2 (5)
3 (6)
4 (12)
5 (16)
6 (19)
7 (9)
8 (6)
9 (4)
10 (8)
11 (6)
12 (5)
2013 (145)
1 (24)
2 (15)
3 (18)
4 (23)
5 (14)
6 (11)
7 (7)
8 (11)
9 (5)
10 (4)
11 (6)
12 (7)
2012 (103)
1 (1)
2 (1)
3 (4)
4 (3)
5 (7)
6 (26)
7 (17)
8 (5)
9 (8)
10 (10)
11 (11)
12 (10)
2011 (54)
1 (4)
3 (7)
4 (4)
5 (14)
6 (6)
7 (3)
8 (3)
9 (1)
10 (4)
11 (2)
12 (6)
2010 (70)
1 (12)
2 (7)
3 (6)
4 (6)
5 (3)
6 (10)
7 (6)
8 (4)
9 (3)
10 (4)
11 (3)
12 (6)
2009 (144)
1 (15)
2 (12)
3 (12)
4 (6)
5 (15)
6 (6)
7 (10)
8 (9)
9 (17)
10 (12)
11 (14)
12 (16)
2008 (148)
1 (10)
2 (6)
3 (10)
4 (11)
5 (13)
6 (10)
7 (13)
8 (19)
9 (18)
10 (12)
11 (13)
12 (13)
2007 (106)
1 (7)
2 (5)
3 (3)
4 (7)
5 (5)
6 (9)
7 (8)
8 (13)
9 (18)
10 (11)
11 (8)
12 (12)
2006 (158)
1 (28)
2 (28)
3 (25)
4 (7)
5 (9)
6 (7)
7 (12)
8 (13)
9 (10)
10 (7)
11 (6)
12 (6)
2005 (350)
1 (31)
2 (26)
3 (26)
4 (27)
5 (29)
6 (30)
7 (32)
8 (30)
9 (30)
10 (32)
11 (29)
12 (28)
2004 (292)
1 (24)
2 (24)
3 (29)
4 (27)
5 (28)
6 (25)
7 (26)
8 (24)
9 (12)
10 (19)
11 (26)
12 (28)
2003 (318)
1 (22)
2 (25)
3 (21)
4 (28)
5 (28)
6 (28)
7 (28)
8 (29)
9 (26)
10 (29)
11 (28)
12 (26)
2002 (317)
1 (29)
2 (26)
3 (26)
4 (25)
5 (28)
6 (30)
7 (27)
8 (21)
9 (25)
10 (27)
11 (28)
12 (25)
2001 (277)
1 (17)
2 (21)
3 (23)
4 (20)
5 (31)
6 (18)
7 (26)
8 (25)
9 (29)
10 (19)
11 (24)
12 (24)
2000 (53)
6 (9)
7 (4)
8 (2)
9 (3)
10 (1)
11 (15)
12 (19)
1999 (3)
7 (1)
10 (2)
1998 (18)
9 (9)
10 (7)
11 (2)