キャリア別アドレスブック登録用QRコード生成プログラム

今回の地震にあたり、大学時代一緒に過ごした人たち、後輩の
緊急連絡網を作成しようということで、情報を送ってもらったのですが、
携帯電話に打ち込むのが面倒くさすぎるということで、QRコードにしたら
カメラで取るだけなので簡単じゃねって思って作った。

イメージ

example/ディレクトリで以下のコマンドを実行すると次のような
HTMLが生成されます。

  % cd example
  % perl qrcode_html.pl sample.list > sample.html
  % firefox sample.html

以下の HTMLが出力されます。

送信者 blog

入力データ

入力データは Perl形式にしました。YAMLとかでも良かったのかもしれない
けど、Perl形式にしとけば、'perl -wc'で文法チェックできていいかなと
思いました。以下のような感じで、runメソッドの引数にハッシュリファレンスを
渡して、必要な情報を与えます。

my $app = QRCode::Carrier::JP->new();
my @contact_infos = $app->run({
    id1 => {
        memory => 'Twitter:yamada',
        name1  => '山田 太郎',
        name2  => 'ヤマダ タロウ',
        mail_addresses => [
            'yamada_taro@pc.example.com',
        ],
        telephones => [
            '090-1234-5678',
        ],
        address => '〇〇県〇〇市1-1',
    }
});

QRコード生成

runメソッドの戻り値は QRCode::Carrier::JP::ContactInfoインスタンス
配列です。一応画像として出力させるメソッド output_qrcodeというのも
あるのですが、今回は HTMLに dataスキームとして埋め込みたかったので、
qrcode_as_base64というメソッドの方が使えるかと思います。
というか出力の方は全然テストできていないです。


使用方法は以下のような感じです。

  # As Base64
  my $base64_docomo = $contact_info->qrcode_as_base64('docomo');
  my $base64_au     = $contact_info->qrcode_as_base64('au');
  my $base64_softbank = $contact_info->qrcode_as_base64('softbank');

  # Output image
  contact_info->output_qrcode('docomo', 'docomo.png');
  contact_info->output_qrcode('au', 'au.png');
  contact_info->output_qrcode('softbank', 'softbank.png');


このあたりについては example/のテンプレートファイル sample.txを
参考にしてください。

まとめ

キャリア別アドレスブック登録用 QRコード生成プログラムを紹介しました。
こんなときエンジニアとしてできることがあればと思っていたんですが、
ちょこっとですが、人の役に立ててよかったと思います。


今回利用させていただいたモジュールの作者に感謝いたします。

  • [twitter:@clouder] for Imager::QRCode
  • [twitter:@__gfx__] for Text::Xslate in example

そして、Perlデベロッパのみなさんにも感謝します。