2015年7月2日木曜日

ISBNバーコードで書籍情報を取得

蔵書管理をしたい

 本の後ろに付いているISBNバーコードを読み取って図書情報を取得できないものか。
 インターネットで調べてみるとperlモジュールでありました。

"MARC::NDL_Search::OPAC"

 https://mbc.dl.itc.u-tokyo.ac.jp/MARC-NDL_Search-OPAC/
 国会図書館の蔵書を検索できるすぐれもの。素敵!
 早速ダウンロードし、そこの説明どおりに必要モジュールと当該モジュールの導入。
 サンプルを参考にISBNを入力すると情報を取得して画面に表示するperlスクリプトを作成


getisbn.pl

バーコードリーダ代わりのzbar

 ISBNをて入力せず、バーコードリーダー的に読み込みたい。
 インターネットで調べてみると「zbar」というものがありました。webカメラでバーコード認識するもの。
 早速インストール、zbarcamでバーコード認識ができる!!!
 これと、前のをパイプでつなぐと読み取り装置の完成です。使い方は以下です。
 zbarcam --raw | perl ./getisbn.pl
 --rawはエンコード種別を表示せず、バーコードの文字数字列のみを表示するオプション

getisbn2info.sh

装置の完成


 こんな感じでバーコードを狙う。
 webカメラはピント調整機能付き、近所の電気屋で2000円ぐらいのもの。

テスト用の本たち

 先日買ってきた本2冊が今回のテスト対象

 近頃買う本は東京創元社の本ばっかり。

読み込み

 以下画面のようにバーコード認識すると、国立国会図書館に問い合わせを行い、取得した情報を表示できている!

 画面のようにパイプでteeコマンドを利用すれば、画面表示とファイル出力も同時にできるので便利。

便利

 便利な機能を実装して公開してくれている方に感謝感謝です。国立国会図書館もAPI、それを利用するperlモジュール、webカメラでバーコード読み取りとそれぞれの機能を組み合わせてやりたいことが実現できました!
 読み取り作業が思いのほか楽しい。認識して情報が出てくる、それだけなのに楽しい。
 本の管理もでき、so happyです。

2015年1月10日土曜日

PerlからWin32::OLE経由でOfficeに引数を渡せず悩む

 PerlからWin32::OLE経由でWordを操作するさい、下図のようなメソッドがある。


これは、ワードの差込印刷において元データを指定するメソッド
OpenDataSourceメソッドにSQLを指定したいのだが、悩んだという話。

問題

$doc->MailMerge->OpenDataSource($database,,,,,,,,,,,,$sql);

ではうまくいかない。

VBAでは

ActiveDocument.MailMerge.OpenDataSource Name:= "T:¥temp.accdb", SQLStatement:="SELECT * FROM `基本データ`"

と記載することができる。

対応

ハッシュで指定し、リファレンスを渡すことで対応可能
my %param;
$param{"Name"} = $database;
$param{"SQLStatement"} = $sql;

$doc->MailMerge->OpenDataSource(¥%param);

所感

perlリファレンスにしっかり書いてあった。
かるーくショック。

SaveAsで激しく悩む

症状

 PerlからWin32::OLE経由でWordを操作し、名前を指定して保存したいのにSaveAsやSaveAs2メソッドで名前をつけて保存ダイアログが表示される。
use Win32::OLE;
my $word = Win32::OLE->new("Word.Application");

$word->Documents->Item(1)->SaveAs2 ($savefile);

原因

アドイン(Word2010IvsAddin:異体字入力用)

対応

アドインをオフにすることで対応

所感

まさかアドインが邪魔をしているとは思わず、、他の端末では正しく実行できたので特定できたので原因にあたりをつけられたのは良かった。