2018年10月21日日曜日

酒リストとWindows Subsystem for Linux - SAKE LIST & Windows Subsystem for Linux.

このブログのコンテンツの一つに酒リスト(SAKE List)があります。

今までに私が飲んで写真を撮った日本酒をフォトアルバム的に紹介しているものですが、ようやく250銘柄を登録しました。

それと同時に表示方法も若干変更しました。
※気づいた方います?

今回はこのSAKE Listの更新方法の改善についてです。

今までの更新手順

今までは以下の手順でした。
  1. ブラウザで写真をflickrへ登録
  2. flickr.APIを使って画像の登録情報をリクエスト
  3. XML形式で登録情報を取得(画像100枚単位にファイルを分けて取得)
  4. 取得したXMLファイルを、awk(Windows版)を使ってフォトアルバムのHTML形式に整形
  5. HTMLファイルを、ブラウザでブログのページに張り付け
しかしこの方法では以下の課題も。
  • 写真に規則性がなく、バラバラに表示される。
  • 説明が表示できない
そこで

一つ目は蔵元の名前でソート。
二つ目はFlickrに説明を登録、その登録内容を取得して表示。

で、解決することにしました。

まず一つ目はWindows標準のsortコマンドでやろうと思ったのですが、残念ながらWindowsのsortコマンドはそこまで強力ではありませんでした(涙)。
CSVファイルなど一行が複数に区切られているもので、キーとするフィールドを指定できない・・・。

「Excelでやればいいじゃん!?」という声も聞こえてきそうですが、わざわざテキストファイルの並び替えのために「エクセルを立ち上げて」「次にファイル読み込ませて」・・・現実的ではありません。
あとで結果を書きますが、Excelを使うっていうのは、実は以外に時間を食うんですよね。

単純かつ繰り返し的な作業は、awkとかsedとかのUNIX系のコマンドツールを使った方が絶対に効率的と思っています。
※これらのツールでも実はかなり高度なことまで出来るんですが(笑)。

話をソートに戻しますが、悩んで色々と調べていたところ、標題のWSL(Windows Subsystem for Linux)にたどり着きました。

Windows Subsystem for Linuxとは

これは最近のWindowsの標準機能としてサポートされているもので、Windows上でLinuxを透過的に使用できるという機能。

「これだ!」
「これを導入することで、Linuxのsortコマンドも使える!」

LinuxのsortコマンドはWindowsよりも強力です。

標準機能ですが、使用するにはLinuxのインストールが必要となります。
ただし手順は簡単ですし、インストールするLinuxのパッケージも選択可能です。
ちなみに私は以前使っていたUbuntuをインストール。

早速使ってみると・・・「おー!Linuxのコマンドが使える!」。
目的だったスペース区切りテキストファイルの特定フィールドを指定してのソートも、期待どおりの結果に(笑)。

しかもこのWSLの良いところは、わざわざLinuxのコマンドプロンプト(シェル)を起動しなくとも、写真のようにWindowsのコマンドプロンプトから魔法の呪文(WSL)を頭に付けてLinuxコマンドを打つと、そのまま実行されること。

これで一つ目の課題は解決。

次に二つ目ですが、こちらはちょっと苦労しました。

私が使っているawkというのは、ご存知の方も多いと思いますが一行(1レコード)1データという形式のファイル処理が得意です。
たった数行書くだけで複雑な処理もこなしてくれるので使いやすいのですが、複数行で1データとなると途端に苦手(笑)。
で、FlickrからのレスポンスXMLファイルは、説明(description)の内容は、画像情報の次の行に記述されているのです(涙)。

正直、色々とやって手詰まり状態になりましたが、何とか画像情報と説明内容を一行にすることは出来ました。

今回はついでに、
  • 登録している全件の情報が網羅された一つのレスポンスXMLファイルから、画像60枚毎に1ページのHTMLファイルを生成。
  • HTMLファイル名には自動で連番を付与して保存
という処理もawkに追加しました。

変更後の更新手順

  1. ブラウザで写真をflickrへ登録
  2. flickr.APIを使って画像の登録情報と説明内容を参照
  3. XML形式で登録情報を取得(全件を1ファイルで取得)
  4. XMLファイルからawkコマンドを使って必要な情報を基に整形
  5. sortコマンドで蔵元順に並び替え
  6. awkコマンド使ってフォトアルバムのHTML形式に整形(画像60枚で一つのHTMLファイルを生成し保存)
  7. ブラウザでブログのページに張り付け
という流れです。
で、4~6までが自動化している部分ですが、なんと3秒掛かるか掛からないかで終了します。
ここをExcelでやろうと思うと絶対に3秒では終わりませんよね(笑)。

これで非常に効率良く酒リスト(SAKE List)の更新が出来るようになりました。
WindowsでLinuxの強力なツール類が使えるのは非常に良いですね。

ということで、今回は久しぶりにテクニカルなお話でした(笑)。
0 件のコメント: