IT Office Nishimiyahara

個人用スマホから商用プログラミングまでなんでもお任せ下さい

flickr_fetcher.plをモジュールにしてみました。

      2014/05/14

flickr_fetcher.plは、元々は引数でキーワードを入れるという、とてもフレキシブルなスクリプトです。 元ネタ ゆーすけべー日記: Flickr からキーワードにマッチした写真を一括ダウンロードする Perl スクリプト「flickr_fetcher.pl」 が、前エントリーでは、プログラムの中に直接書き込む事を選んだので、別のキーワードで画像を探すときにはその部分を変更してやる必要が出てきます。 ローマ字や英語でキーワードを入れる場合はかまいませんが、日本語の検索は標準のコマンドプロンプトでは無理なのです。 本来なら配布されているプログラムの中身を変えるのは、配布元で更新があったときに、それに対応するのが面倒なので、できれば変えたくない。 実際、このスクリプトの場合はページの最大値を求める計算方法が変わった。 勝手に改造した部分には変更はなかったが、こういうのは精神衛生上良くない。 …と思いながらソースを見ていると、モジュールとスクリプトを分けて記述してあることに気づいた。 実際の実行部(スクリプト部分)はたったの2行(宣言と空白を入れて4行)だった。

ここだけを別のファイルに切り分けて、FlickrFetcherモジュールを使うようにすれば、スクリプトファイルを別で用意すればいいので、それほどややこしくない。 今回は、スクリプトファイルの中身は簡単でしたが、keywordとdirのデータを沢山揃えてfor文でfetchに流してやれば、かなり収集が便利になるでしょう。 というところで、モジュール化したFlickrFetcherですが、現時点で二つほど改善点があります。 どちらも、fetchルーチン内です。 一つは「Transfer truncated」で止まってしまう事がある問題です。 細かく調べてはいませんが、止まらなければ良いので、evalで括ってしまいました。 本来ならリトライを頑張るところでしょうが、そのあたりは誰かにおまかせです。 もう一つは、検索結果が1枚だけの時にループで「Not an ARRAY reference」と言われてしまいます。 parse_responseメソッドの親切心(?)が仇になっているのでしょうか? ともあれ、ARRAY referenceでない場合はARRAY referenceに変換するようにしました。 あと、モジュールにはしましたが、podは変更してません。

FlickrFetcher.pm

flickr_fetcher.pl

respo

respo link

ZenBackWidget

 - 情報技術について