<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>lab.naoki.sato.name &#187; bash</title>
	<atom:link href="http://naoki.sato.name/lab/archives/tag/bash/feed" rel="self" type="application/rss+xml" />
	<link>http://naoki.sato.name/lab</link>
	<description>lab for naoki.sato</description>
	<lastBuildDate>Sun, 20 Mar 2011 06:02:24 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://naoki.sato.name/lab/archives/tag/bash/feed" />
		<item>
		<title>PythonでTwitter BOTを作る</title>
		<link>http://naoki.sato.name/lab/archives/210</link>
		<comments>http://naoki.sato.name/lab/archives/210#comments</comments>
		<pubDate>Sat, 11 Sep 2010 13:18:19 +0000</pubDate>
		<dc:creator>naoki</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[webservice]]></category>

		<guid isPermaLink="false">http://naoki.sato.name/lab/?p=210</guid>
		<description><![CDATA[とあるツイートにインスパイアされて、Flickrから写真を取得してTwitterに投稿するBOTを作ってみました(ネコ、イヌ、ペンギン、ウサギ、ハムスター、赤ちゃん、とリスト)。
TwitterのBOTくらいなら簡単に作 [...]]]></description>
			<content:encoded><![CDATA[<p>とあるツイートにインスパイアされて、<a href="http://flickr.com/">Flickr</a>から写真を取得してTwitterに投稿するBOTを作ってみました(<a href="http://twitter.com/nyancopot">ネコ</a>、<a href="http://twitter.com/wancopot">イヌ</a>、<a href="http://twitter.com/penpenpot">ペンギン</a>、<a href="http://twitter.com/usapot">ウサギ</a>、<a href="http://twitter.com/hamupot">ハムスター</a>、<a href="http://twitter.com/baboopot">赤ちゃん</a>、と<a href="http://twitter.com/naokisatoname/pot">リスト</a>)。</p>
<p>TwitterのBOTくらいなら簡単に作成できる…と思っていたのですが、先日のBASIC認証廃止で、OAuthによる認証が必須となり、簡単なBOTでも結構ややこしい手順をふむ必要が出てきました。<br />
そこで、少しでも楽をするために、今回はPythonを使って構築しています。<br />
適当なライブラリを活用することで、認証の処理がかなり容易になります。</p>
<p>以下、一連の作業と作成したソースコードの記録です。</p>
<p><span id="more-210"></span></p>
<h3>BOTアカウントの登録</h3>
<p>なにはともあれ、BOT用のアカウントを登録します。<br />
<a href="https://twitter.com/signup"> こちらのページ</a>から、通常通りアカウントを作成します。</p>
<p>後々、このアカウントに紐づいたアクセストークンが必要となります。</p>
<p><a href="http://naoki.sato.name/lab/wp-content/uploads/2010/09/pot01.png"><img src="http://naoki.sato.name/lab/wp-content/uploads/2010/09/pot01-300x206.png" title="pot01" width="300" height="206" class="alignnone size-medium wp-image-213" /></a></p>
<p><a href="http://naoki.sato.name/lab/wp-content/uploads/2010/09/pot02.png"><img src="http://naoki.sato.name/lab/wp-content/uploads/2010/09/pot02-300x206.png" title="pot02" width="300" height="206" class="alignnone size-medium wp-image-214" /></a></p>
<p>登録を終えたら通常通りログオンし、Bio等をセッティングします。</p>
<p><a href="http://naoki.sato.name/lab/wp-content/uploads/2010/09/pot03.png"><img src="http://naoki.sato.name/lab/wp-content/uploads/2010/09/pot03-300x206.png" title="pot03" width="300" height="206" class="alignnone size-medium wp-image-215" /></a></p>
<h3>アプリケーションの登録</h3>
<p>次に、BOT用アカウントでログインした状態で <a href="http://dev.twitter.com/">http://dev.twitter.com/</a> へアクセスします。</p>
<p><a href="http://naoki.sato.name/lab/wp-content/uploads/2010/09/pot11.png"><img src="http://naoki.sato.name/lab/wp-content/uploads/2010/09/pot11-300x235.png" title="pot11" width="300" height="235" class="alignnone size-medium wp-image-216" /></a></p>
<p>この画面から、新しく作成するBOTをアプリケーションとして登録します。<br />
右上の &#8220;<a href="http://dev.twitter.com/apps">Your apps</a>&#8221;  をクリックします。</p>
<p><a href="http://naoki.sato.name/lab/wp-content/uploads/2010/09/pot12.png"><img src="http://naoki.sato.name/lab/wp-content/uploads/2010/09/pot12-300x235.png" title="pot12" width="300" height="235" class="alignnone size-medium wp-image-217" /></a></p>
<p>既に登録しているアプリケーションの一覧が表示されます。<br />
何も登録していない場合は、登録画面へのリンクだけが表示されるはずです。</p>
<p>新しく登録する場合は、右の &#8220;<a href="http://dev.twitter.com/apps/new">Register a new app</a>&#8221; をクリックします。</p>
<p><a href="http://naoki.sato.name/lab/wp-content/uploads/2010/09/pot13.png"><img src="http://naoki.sato.name/lab/wp-content/uploads/2010/09/pot13-300x235.png" title="pot13" width="300" height="235" class="alignnone size-medium wp-image-218" /></a></p>
<p><a href="http://naoki.sato.name/lab/wp-content/uploads/2010/09/pot14.png"><img src="http://naoki.sato.name/lab/wp-content/uploads/2010/09/pot14-300x235.png" title="pot14" width="300" height="235" class="alignnone size-medium wp-image-219" /></a></p>
<p>基本的に、入力項目はすべて入力する必要があります。</p>
<p>BOT用アプリケーション登録の際のポイントは、<strong> &#8220;Application Type&#8221; を &#8220;Client&#8221; に変更すること</strong>と、 <strong>&#8220;Default Access type&#8221; を &#8220;Read &amp; Write&#8221; に変更する</strong>こと。<br />
ちなみに、 &#8220;Callback URL&#8221; の入力欄は、 &#8220;Application Type&#8221; を &#8220;Client&#8221; に変更すると消えます。</p>
<p><a href="http://naoki.sato.name/lab/wp-content/uploads/2010/09/pot15.png"><img src="http://naoki.sato.name/lab/wp-content/uploads/2010/09/pot15-300x235.png" title="pot15" width="300" height="235" class="alignnone size-medium wp-image-220" /></a></p>
<p>登録が完了すると、このような画面に移ります。</p>
<p><a href="http://naoki.sato.name/lab/wp-content/uploads/2010/09/pot16.png"><img src="http://naoki.sato.name/lab/wp-content/uploads/2010/09/pot16-300x235.png" title="pot16" width="300" height="235" class="alignnone size-medium wp-image-221" /></a></p>
<p>この画面で必要な情報は、 <strong>&#8220;OAuth 1.0a Settings&#8221; の &#8220;Consumer key&#8221; と &#8220;Consumer secret&#8221; の2つ</strong>。<br />
これらの情報が、このBOTを更新するためのアプリケーションである、ということを証明するのに使われるものです。<br />
これらの情報を記録します。</p>
<p>次に、画面の上に戻って &#8220;My Access Token&#8221; をクリックします。</p>
<p><a href="http://naoki.sato.name/lab/wp-content/uploads/2010/09/pot17.png"><img src="http://naoki.sato.name/lab/wp-content/uploads/2010/09/pot17-300x235.png" title="pot17" width="300" height="235" class="alignnone size-medium wp-image-222" /></a></p>
<p>すると、このように <strong>&#8220;Access Token (oauth_token)&#8221; と &#8220;Access Token Secret (oauth_token_secret)&#8221;</strong> の情報が表示されます。<br />
これは、このアプリケーションの作成者(=BOTアカウント)の認証に使われる情報です。</p>
<p>先の &#8220;Consumer key&#8221; 、 &#8220;Consumer secret&#8221; とあわせて、初めてBOTを更新するためのアプリケーションで、BOTアカウントのツイートを更新できるようになります。<br />
&#8220;Access Token (oauth_token)&#8221; と &#8220;Access Token Secret (oauth_token_secret)&#8221; の情報も記録しておきます。</p>
<p><strong>これで、BOTに必要な &#8220;Consumer key&#8221;、 &#8220;Consumer secret&#8221;、&#8221;Access Token (oauth_token)&#8221;、 &#8221;Access Token Secret (oauth_token_secret)&#8221; という4つの鍵が手に入りました。</strong></p>
<h3>スクリプトの作成</h3>
<p>上述のように、今回BOTを更新するアプリケーションは、Pythonによるスクリプトを作成しました。</p>
<p>PythonでのTwitterの操作は <a href="http://code.google.com/p/tweepy/">tweepy</a> というライブラリを利用しています。<br />
また、Flickrからの写真の取得は、<a href="http://www.degraeve.com/flickr-rss/">Flickrのタグをキーに写真を検索してRSSを作成してくれる Flickr RSS Feed Generator</a> というサービスを利用し、この結果取得したRSSを <a href="http://code.google.com/p/feedparser/">feedparser</a> というライブラリを使ってパースしています。<br />
更に、 今回はFlickrの写真をツイートするということで、 <a href="http://stuvel.eu/flickrapi/documentation/">flickrapi.shorturl</a> というライブラリでURLを短縮しています。</p>
<p>各ライブラリのインストールは環境により異なるので、他を参照いただきたいのですが、このBlogを置いている<a href="http://www.coreserver.jp/">Coreserver</a>やXREAの場合は基本的に次のような手順でインストールできると思います。</p>
<ol>
<li>管理画面からホスト情報を登録する。</li>
<li>SSHでサーバへアクセスする。</li>
<li>次の環境変数を設定しておく。</li>
<pre>$ export PYTHONPATH=$HOME/lib/python2.4:$HOME/lib/python2.4/site-packages</pre>
<li> 各ソースコードをダウンロードし、以下のコマンドでインストール先を指定してインストールする。</li>
<pre>$ python setup.py install --prefix=~/</pre>
</ol>
<p>次に、実際にBOTを更新するスクリプトのソースコードです。ここで、&#8221;Consumer key&#8221;, &#8220;Consumer secret&#8221;, &#8220;Access Token (oauth_token)&#8221;, &#8221;Access Token Secret (oauth_token_secret)&#8221;にはそれぞれ植えで入手した情報を入れて下さい。</p>
<blockquote>
<pre>#!/usr/local/bin/python
# -*- coding: utf-8 -*-

import string
import random

import feedparser
import tweepy
import flickrapi.shorturl

CONSUMER_KEY        = 'Consumer key'
CONSUMER_SECRET     = 'Consumer secret'
ACCESS_TOKEN        = 'Access Token (oauth_token)'
ACCESS_TOKEN_SECRET = 'Access Token Secret (oauth_token_secret)'

num = 100    # 100枚の写真から1枚選ぶ
tag = 'cat+kitty+kitten'    # 検索するタグを + で繋げる
id = random.randint(0, num)
if random.randrange(0, 10, 1) &gt; 5:
  sort = 'interestingness-desc'
else:
  sort = 'date-posted-desc'

url  = 'http://www.degraeve.com/flickr-rss/rss.php?tags=' + tag + '&amp;tagmode=any&amp;sort=' + sort + '&amp;num=' + str(num)
data = feedparser.parse(url)

prefix = u'ミ^・.・^彡'
title  = data['entries'][id]['title']
link = data['entries'][id]['link']
link = flickrapi.shorturl.url(link[link.rfind(u'/')+1:])

if len(title) + len(link) + len(prefix) &gt; 110:
  title = title[0:110 - len(link) - len(prefix)] + '...'

tweet = prefix + ' ' + title + '  ' + link

# ここからTwitter
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
api = tweepy.API(auth)
api.update_status(tweet)</pre>
</blockquote>
<p>最後に、このスクリプトをcronで動かすためのshスクリプトを作成します。ここで、上のPythonスクリプトは /virtual/user/bin/nyancopot.py に保存されているものとします。</p>
<blockquote>
<pre>#!/bin/sh

export PYTHONPATH=$HOME/lib/python2.4:$HOME/lib/python2.4/site-packages
export LD_LIBRALY=$HOME/lib

/usr/local/bin/python /virtual/user/bin/nyancopot.py</pre>
</blockquote>
<p>あとは、このshスクリプトをcronに登録すれば完了です。<br />
指定された時間にBOTがつぶやきます。</p>
]]></content:encoded>
			<wfw:commentRss>http://naoki.sato.name/lab/archives/210/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://naoki.sato.name/lab/archives/210" />
	</item>
		<item>
		<title>ScanSnapから作成した連番画像ファイルを1クリック(+α)でePubに変換する -Mac編-</title>
		<link>http://naoki.sato.name/lab/archives/153</link>
		<comments>http://naoki.sato.name/lab/archives/153#comments</comments>
		<pubDate>Mon, 05 Apr 2010 13:42:34 +0000</pubDate>
		<dc:creator>naoki</dc:creator>
				<category><![CDATA[ebooks]]></category>
		<category><![CDATA[applescript]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[epub]]></category>
		<category><![CDATA[mac]]></category>

		<guid isPermaLink="false">http://naoki.sato.name/lab/?p=153</guid>
		<description><![CDATA[先日の連番画像ファイルからePubを作成するの続きです。
先日の記事ではePubを作成するシェルスクリプトを公開しましたが、いちいちターミナルからスクリプトを実行するのも面倒なので、AppleScriptを使ってFind [...]]]></description>
			<content:encoded><![CDATA[<p>先日の<a href="http://naoki.sato.name/lab/archives/142">連番画像ファイルからePubを作成する</a>の続きです。</p>
<p>先日の記事ではePubを作成するシェルスクリプトを公開しましたが、いちいちターミナルからスクリプトを実行するのも面倒なので、AppleScriptを使ってFinderからスクリプトを呼出し、Finderで開いているフォルダ内の連番画像をePubに変換するアプリケーションを用意しました。AppleScriptですので、Mac専用です。</p>
<p><a href="http://naoki.sato.name/epubunco/epubsh.dmg">連番画像ファイル-&gt;ePub作成アプリケーション</a></p>
<p>簡単な使い方は以下の通り。なお、未検証ですが連番画像のファイル名に日本語が含まれていると上手くいかないかも知れませんので、ファイル名は英数字のみにしておいた方が無難だと思います。</p>
<ol>
<li>自分のホームディレクトリに &#8220;bin&#8221; フォルダを作成します。</li>
<li>dmgに入っている &#8220;epubsh.sh&#8221; を1.で作成した &#8220;bin&#8221; フォルダにコピーします。</li>
<li>dmgに入っている &#8220;epubsh.app&#8221; を任意の場所 (&#8220;bin&#8221; や &#8220;アプリケーション&#8221; をおすすめします) にコピーし、DockもしくはFinderのツールバーに登録します。</li>
<li>ePubに変換したい一連の画像のあるディレクトリを最前面のFinderで開いた状態にし、3.で登録した &#8220;epubsh.sh&#8221; を実行します。</li>
<li>タイトル、著者を入力するダイアログが表示されるので、それらを入力します。</li>
<li>暫く待つと、画像と同じディレクトリに &#8220;タイトル.epub&#8221; という名前でePubファイルが作成されます。</li>
</ol>
<p>以上です。いつも通り検証不十分ですので、At Your Own Riskでお願いします。コメント等々ございましたら<a href="http://twitter.com/naokisatoname">@naokisatoname</a>宛に頂けると幸いです。</p>
<p>以下、スクリーンショット付きの詳細説明とスクリプトのソース。</p>
<p><span id="more-153"></span></p>
<h3>詳細設定手順</h3>
<p>ここでは、以前ScanSnapからPDF形式で電子化し、今回検証のためにjpgで画像を抽出した<a href="http://www.amazon.co.jp/gp/product/4840120722?ie=UTF8&amp;tag=naokisatoname-22&amp;linkCode=as2&amp;camp=247&amp;creative=7399&amp;creativeASIN=4840120722">新海誠さんの小説・秒速5センチメートル</a>を使用しています(連番画像ファイル名は &#8220;5cm_xxx.jpg&#8221;)。</p>
<ol>
<li>上のリンクから<a href="http://naoki.sato.name/epubunco/epubsh.dmg">dmgファイル</a>をダウンロードします。</li>
<li>Finder上でダブルクリックし、マウントします。</li>
<li>中に &#8220;epubsh.app&#8221; と &#8220;epubsh.sh&#8221; の2ファイルが入っていることを確認します。</li>
<li>自分のホームディレクトリに &#8220;bin&#8221; フォルダを作成します。</li>
<li>dmgに入っている &#8220;epubsh.app&#8221; と &#8220;epubsh.sh&#8221; を &#8220;bin&#8221; フォルダにコピーします。<br />
<a href="http://naoki.sato.name/lab/wp-content/uploads/2010/04/20100405_1.png"><img src="http://naoki.sato.name/lab/wp-content/uploads/2010/04/20100405_1-300x169.png" title="20100405_1" width="300" height="169" class="alignnone size-medium wp-image-146" /></a></li>
<li>&#8220;epubsh.app&#8221; をDockもしくはFinderのツールバーに登録します。個人的にはFinderのツールバーの方が使い易い気がします。<br />
<a href="http://naoki.sato.name/lab/wp-content/uploads/2010/04/20100405_2.jpg"><img src="http://naoki.sato.name/lab/wp-content/uploads/2010/04/20100405_2-300x68.jpg" title="20100405_2" width="300" height="68" class="alignnone size-medium wp-image-147" /></a></li>
<li>連番画像ファイルをおいたディレクトリをFinderで表示します。<br />
<a href="http://naoki.sato.name/lab/wp-content/uploads/2010/04/20100405_3.png"><img src="http://naoki.sato.name/lab/wp-content/uploads/2010/04/20100405_3-300x169.png" title="20100405_3" width="300" height="169" class="alignnone size-medium wp-image-148" /></a></li>
<li>先ほど登録した &#8220;epubsh.app&#8221; をクリックして実行します。</li>
<li><em>Book Title:</em> というダイアログが表示されるので、本のタイトルを入力します。<br />
<a href="http://naoki.sato.name/lab/wp-content/uploads/2010/04/20100405_4.png"><img src="http://naoki.sato.name/lab/wp-content/uploads/2010/04/20100405_4-300x124.png" title="20100405_4" width="300" height="124" class="alignnone size-medium wp-image-154" /></a></li>
<li><em>Book Author:</em> というダイアログが表示されるので、本の著者を入力します。<br />
<a href="http://naoki.sato.name/lab/wp-content/uploads/2010/04/20100405_5.png"><img src="http://naoki.sato.name/lab/wp-content/uploads/2010/04/20100405_5-300x124.png" title="20100405_5" width="300" height="124" class="alignnone size-medium wp-image-155" /></a></li>
<li>OKをクリックして暫く待つと、Finderで開いていた、画像と同じディレクトリに &#8220;タイトル.epub&#8221; というePub形式のファイルが作成されます。<br />
<a href="http://naoki.sato.name/lab/wp-content/uploads/2010/04/20100405_6.png"><img src="http://naoki.sato.name/lab/wp-content/uploads/2010/04/20100405_6-300x169.png" title="20100405_6" width="300" height="169" class="alignnone size-medium wp-image-151" /></a></li>
<li>後はePubを表示して読書を楽しみましょう。<br />
<a href="http://naoki.sato.name/lab/wp-content/uploads/2010/04/20100405_7.png"><img src="http://naoki.sato.name/lab/wp-content/uploads/2010/04/20100405_7-300x198.png" title="20100405_7" width="300" height="198" class="alignnone size-medium wp-image-152" /></a></li>
</ol>
<h3>ソースファイル</h3>
<p>AppleScriptおよびsh Scriptのソースです。基本的にdmgファイルの内容と同様です。ダウンロードが上手くいかない際は、右クリックでファイル名を指定して保存して下さい。</p>
<ul>
<li><a href="http://naoki.sato.name/epubunco/epubsh.scpt">AppleScript (2.6KB)</a></li>
<li><a href="http://naoki.sato.name/epubunco/epubsh.sh">sh Script (3.3KB)</a></li>
</ul>
<p>知識のある方、改変・修正はご自由に。その際は後学のため<a href="http://twitter.com/naokisatoname">@naokisatoname</a>までご連絡いただければ幸いです。</p>
<h4><span style="color: #ff6600;">※2010/04/08追記</span></h4>
<p>公開したスクリプトにバクがあったので、dmg、ソースとも置き換えました。</p>
<p>タイトルやパスにスペースが含まれていた際に正常に動作しない現象を修正しました。</p>
<h4><span style="color: #ff6600;">※ 2010/04/26追記</span></h4>
<p>dmg、ソースを再度置き換えました。</p>
<p>前回と同じく、タイトルやパスにスペースが含まれていた際に正常に動作しない不具合の修正です。</p>
<p><span style="color: #808080;">スクリプト内でディレクトリ名をクォートするのを忘れておりました。スミマセン…</span></p>
<h4><span style="color: #ff6600;">※  2010/05/09追記</span></h4>
<p>dmg、ソースを置き換えました。</p>
<p>作成されたePubがAppleのiBooksで開けないバグを修正しました。</p>
<p>ただし、iBooksでは画像のサイズを変更する指定が無効になるらしく、表示が崩れる可能性があります。</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;"><a href="../../epubunco/epubsh.sh">連番画像ファイル-&gt;ePub作成ス クリプト</a></div>
]]></content:encoded>
			<wfw:commentRss>http://naoki.sato.name/lab/archives/153/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://naoki.sato.name/lab/archives/153" />
	</item>
		<item>
		<title>連番画像ファイルからePubを作成する</title>
		<link>http://naoki.sato.name/lab/archives/142</link>
		<comments>http://naoki.sato.name/lab/archives/142#comments</comments>
		<pubDate>Sat, 03 Apr 2010 14:21:57 +0000</pubDate>
		<dc:creator>naoki</dc:creator>
				<category><![CDATA[ebooks]]></category>
		<category><![CDATA[media]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[epub]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mac]]></category>

		<guid isPermaLink="false">http://naoki.sato.name/lab/?p=142</guid>
		<description><![CDATA[日本でのiPadの発売も近づき、USではiPadが発売され、俄然電子書籍に対する注目が高まっていると感じるこの頃。iPadのリリースにあわせてiTunesも9.1にバージョンアップされてePubファイルもiTunesで管 [...]]]></description>
			<content:encoded><![CDATA[<p>日本でのiPadの発売も近づき、USではiPadが発売され、俄然電子書籍に対する注目が高まっていると感じるこの頃。iPadのリリースにあわせてiTunesも9.1にバージョンアップされてePubファイルもiTunesで管理できるようになりました。</p>
<p>ただ、惜しむらくは書籍として認識されるのがePub形式のみという点。以前からPDFはiTunesで管理できましたが、書籍形式としては認識されず、このことからiPad上のiBooksではePub形式の電子書籍のみがサポートされることが予想されます。</p>
<p>海外の古い書籍であれば<a href="http://books.google.com/">Google Books</a>や<a href="http://www.gutenberg.org/wiki/Main_Page">Project Gutenberg</a>で入手できますし、日本の古典は<a href="http://naoki.sato.name/epubunco/bookmarklet.html">拙作のBookmarklet</a>を使えば<a href="http://www.aozora.gr.jp/">青空文庫</a>からePubを作成できることができます。しかし、現在紙の本から電子データを作成する上で最も一般的と思われるScanSnap (+裁断機)では、PDFを作ることはできてもePubは作成できず、このままではiPad (というかiBooks)で市販の書籍を読む事が難しそうです。</p>
<p>他方、ScanSnapでは連番画像ファイルとして電子データを保存できます。そこで、連番の画像ファイルからePubを作成するシェルスクリプトを書いてみました。</p>
<p><a href="http://naoki.sato.name/epubunco/epubsh.sh">連番画像ファイル-&gt;ePub作成スクリプト</a></p>
<p>べた書きの上にきちんとテストも行っていない状態なので、いつも通りAt Your Own Riskでお願いします。変更はご自由に。</p>
<p>以下、スクリプトの使用方法と説明です。</p>
<h3><span id="more-142"></span>前提</h3>
<ul>
<li>bashスクリプトなので、MacもしくはLinux等Unix系OSが必須です。</li>
<li>元画像ファイルは .jpg もしくは .png いずれかの形式・拡張子で、ファイル名は連番になっている必要があります。</li>
<li>スクリプトはターミナル・コンソールから実行する必要があります。</li>
</ul>
<h3>実行方法</h3>
<ol>
<li>任意のディレクトリにePubに変換する一連の連番画像ファイルとスクリプトファイル(epubsh.sh)を置きます。
<pre>$ ls .</pre>
<pre>  001.jpg</pre>
<pre>  002.jpg</pre>
<pre>  003.jpg</pre>
<pre>  epubsh.sh</pre>
</li>
<li>ターミナルで1.で画像、スクリプトを置いたディレクトリに移動します。
<pre>$ cd /home/user/hoge</pre>
</li>
<li>引数に書籍のタイトル、著者名を入力してスクリプトを実行します。
<pre>$ sh epubsh.sh タイトル 著者</pre>
</li>
<li>実行したディレクトリに&#8221;(書籍のタイトル).epub&#8221;というファイル名が作成されます。</li>
</ol>
<h3>動作確認</h3>
<p>Mac上のSony Reader Library、Stanza、iPhone上のStanza、Sony Readerで表示確認済み。</p>
<p>予想以上にiPhone上のStanzaで読めました。</p>
<h3>やっていること</h3>
<p>基本的に<a href="http://naoki.sato.name/lab/archives/45">以前ポストしたePub形式のファイル構成</a>に従って必要なファイルを作成し、パッケージ化しているだけです。</p>
<ul>
<li>画像ファイルを/tmp以下の作業フォルダにコピー</li>
<li>各画像ファイルを表示するためのhtmlファイルを作成</li>
<li>CSSで画像ファイルをheight=100%、text-align=centerに</li>
<li>ePub用のファイルを作成</li>
<li>ePub用のフォルダ構成に設定</li>
<li>zipでePub形式を作成</li>
<li>ePubを作業フォルダからカレントフォルダに移動</li>
<li>作業フォルダを削除</li>
</ul>
<h3>今後は…</h3>
<p>正直な所、今後書籍の電子化をPDF形式にするべきかePub形式にするべきかは分かりかねるところです。</p>
<p>PDFは既に広く一般化していて、電子書籍としてだけではなくMac等ではOSレベルでサポートされているものの、iPadやE-Bookリーダでのサポートが弱い。</p>
<p>ePubはiPadのiBooksでも標準サポートされ、主要なE-Bookリーダでサポートされるものの、Mac等で扱いにくい。</p>
<p>実は画像ファイルで電子化しておくのが一番汎用的なのかも知れません。</p>
]]></content:encoded>
			<wfw:commentRss>http://naoki.sato.name/lab/archives/142/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://naoki.sato.name/lab/archives/142" />
	</item>
	</channel>
</rss>

