SSブログ

Reader Storeの複数ダウンロードの方法 [IT]

少し前にソニーの電子書籍ストアの「Reader Store」がリニューアルした。見やすく改善はされているものの、購入した書籍の一括ダウンロードができなくなっており、この点が非常に不便なのである。大量購入してもらいたくないのだろうか?
 
それはさておき、スマホやタブレットで見るならばPCのダウンロードは必要ないが、筆者が持っている電子書籍閲覧端末「Reader」はWiFi機能が無いモデルであるため、転送するにはPCでダウンロードする必要があり、いつ「Reader Store」が店じまいしてもいいようにバックアップもしたいので、PCでダウンロードはしたい。
 
[8/21追記:Webの「Reader Store」のサイトで購入完了の画面または自アカウントの本棚ページで読みたい本を選択して読みたい端末として「Reader」を選ぶと.mbbsファイルがダウンロードされる。]
 
この.mbbsファイルというのが、PCにインストールしたダウンローダーに関連付けられていて、ダブルクリックすると実データが「Reader」端末が接続されたPCおよび「Reader」端末本体にダウンロードされる仕組みになっている。1個1個.mbbsファイルをダブルクリックしてると、1冊ダウンロードして終わってからまたもう1回って繰り返すので面倒なのだ。
 
この.mbbsファイルの中身を見ると、XMLファイルになっている。とりあえず複数.mbbsファイルをダウンロードして、「<Product :xsi:type=…>…</Product>」で囲まれた範囲を「<Product_List xsi:type=…>…</Product_List>」の中にダウンロードしたい冊数分入れればいいようだ。
 
結局.mbbsファイルを1個1個ダウンロードして.mbbsファイルを編集する必要はあるけれども、とりあえずダブルクリック1回でPC及び「Reader」端末にダウンロードできるようにはなった。
 
自動化するバッチか、シェルスクリプトでも書いてみるかな。気が向いたら書きます。
 
追記:
できました。
bashのシェルスクリプトとWindowsのバッチファイル。バッチファイルの方はアイコンにまとめて放り込むとマージしてくれるようにしている。テキスト処理に使うのでsedをインストールといておくこと。
 
bash用シェルスクリプト
#!/bin/bash
#merge_mbbs.sh
#指定ディレクトリの.mbbsファイルをマージする
#書式 ./merge_mbbs.sh 引数1 引数2
#引数1 ディレクトリを指定
#引数2 出力する.mbbsファイルのファイル名
count=1
#指定ディレクトリの.mbbsファイルを読み込む
ls ${1}/*.mbbs | while read line
do
  #最初のファイルでヘッダとフッタを生成
  if [ ${count} = 1 ]; then
    #「<Product xsi」より後を削除したものがヘッダ
    sed -e 's/<Product xsi.*//g' ${line} > "${1}/${2%.*}_header.tmp"
    #「</Product>」より前を削除したものがヘッダ
    sed -e 's#.*</Product>##g' ${line} > "${1}/${2%.*}_footer.tmp"
    #ヘッダを出力してマージ用.mbbsファイルを生成
    cat "${1}/${2%.*}_header.tmp" > "${1}/${2%.*}.mbbs"
  fi
  #ヘッダ部とフッタ部を削除した(<Product>タグで囲まれた)文字列を追加
  sed -e 's/.*\<Product xsi/\<Product xsi/g' "${line}" | sed -e 's#</Product>.*#</Product>#g' >> "${1}/${2%.*}.mbbs"
  count=`expr ${count} + 1`
done
#最後にフッタを出力
cat "${1}/${2%.*}_footer.tmp" >> "${1}/${2%.*}.mbbs"
#ヘッダとフッタを削除
rm "${1}/${2%.*}_header.tmp"
rm "${1}/${2%.*}_footer.tmp"
Windows用バッチファイル

@echo off
setlocal enabledelayedexpansion
REM merge_mbbs.bat
REM ドラッグアンドドロップで放り込んだ.mbbsファイルを結合する
REM SED.exeをパスの通った場所にインストールすること
set /a count=1
for %%a in (%*) do (
  if !count!==1 (
    REM 「<Product xsi」より後を削除したものがヘッダ
    sed -e "s/<Product xsi.*//g" %%a > merge_header.tmp
    REM 「</Product>」より前を削除したものがヘッダ
    sed -e "s#.*</Product>##g" %%a > merge_footer.tmp
    REM ヘッダを出力してマージ用.mbbsファイルを生成
    type "merge_header.tmp" > merge.mbbs
  )
  REM ヘッダ部とフッタ部を削除した(<Product>タグで囲まれた)文字列を追加
  sed -e "s/.*\<Product xsi/\<Product xsi/g" "%%a" | sed -e "s#</Product>.*#</Product>#g" >> "merge.mbbs"
  set /a count=!count!+1
)
REM 最後にフッタを出力
type "merge_footer.tmp" >> "merge.mbbs"
REM ヘッダとフッタを削除
del "merge_header.tmp"
del "merge_footer.tmp"
)
REM pause
exit


nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。