Under the Bridge

a Picture of the Late Him

MT4:エントリのURLをQRコードで自動生成する

2009年2月15日 14:17 | Writer: yoshi | 記事本文 | コメント(0) | トラックバック(0)

以前、MT4.xの環境でQRコード画像を生成するプラグインを作ってた。わかんないことなどがあり、MTにおいて実用できるレベルにまで到達しては居なかった。今日時間があったので、発作的にやってみた。

こんなケースで使えるかも

モバイル対応のサイトで、QRコードをエントリ毎に出力したい。しかしよくあるQRコード画像生成サービス(こういうの http://www.star-click.ne.jp/e-poket/search/cgi/qr/)などを使うのは制約が多い・面倒・サービス終了時の生成画像のファイルのリンク切れなどが心配、そんな方へいいのではないか?

準備

perlモジュールとしてGD::Barcodeを使用する。

ローカル環境で実験する場合は、環境がXAMPPなどの場合はhttp://www.apstars.com/blog/215/mt42qr.phpにやり方の一例を少し書いている。

プラグインのコードは以下。これにgetqrcode.plなどと名前をつけて、pulginsフォルダへ放り込めば準備完了。

package MT::Plugin::GetQRCode;
use strict;
use MT::Plugin;
use base qw(MT::Plugin);
our $VERSION = '0.1';
use MT::Template::Context;
use GD::Barcode;

my $plugin = new MT::Plugin::GetQRCode({
    id => 'GetQRCode',
    key => 'get_qrcode',
    name => 'GetQRCode',
    version => $VERSION,
    description => 'GetQRCode',
    author_name => 'apstar',
    author_link => 'http://www.mtde.info/',
});
MT->add_plugin($plugin);

sub init_registry
{
    my $plugin = shift;
    $plugin->registry({
        tags => {
            function => {
                'GetQRCode' => \&_hdlr_getqrcode,
            },
        },
    });
    
}

sub _hdlr_getqrcode {
my ($ctx, $args) = @_;
my $url = $args->{url};
my $qrcodeurl = $args->{qrcodeurl};

my $oGdBar = GD::Barcode->new('QRcode', $url,
{ Ecc => 'L',
ModuleSize=> 2,
Version => 3,
});

open(OUT,">$qrcodeurl");
binmode OUT;
print OUT $oGdBar->plot->png;
close OUT;
return;
}

1;

MT側のコード

MT側のコードは、すこし注意が必要である。

QRコードの画像ファイルを生成する際は、ブログのURLではなくサイトパスを用いるのがポイントか(以下パスと呼ぶ)。MTBlogSitePathで取得し、「サブパスの情報、ファイル名(今回はエントリ生成日時とした)、拡張子(pngとしている)」をくっつけてプラグインへ与える。

そのQRコードを実際にhttpで表示する場合はMTBlogURLで取得できるURLのほうを用いる(以下URLと呼ぶ)。「サブパスの情報、ファイル名、拡張子(pngとしている)」は、サイトパスの場合と同じであるので、とある変数へ入れておき、パス、URL組み立て時に「MTSetVarにappendモデファイア指定」して文字列連結するやり方が一番簡単だ。

MTGetQRCode url="$QRpara" qrcodeurl="$QRqrpath"の部分。QRPara変数にはMTSetvarBlockでMTEntryPermalinkの結果を与えている。つまりエントリのパーマリンク。今回のエントリ「MT4:エントリのURLをQRコードで自動生成する」というお題だが、実はここはエントリパーマリンクではなくほかの文字列を与えてもいい。が、恐らく日本語では文字化けするんじゃないかと思う。あと、QRqrpath変数にはQRコードが実際に生成されるパスを与えねばならない。

以下サンプル

<p>QRコード生成プラグイン 実験</p>

<MTIgnore>QRコードのサブパス</MTIgnore>
<MTSetvarBlock name="QRsubpath">images/<MTEntryDate format="%Y%m%d%H%M%S">.png</MTSetvarBlock>
1.<MTGetVar name="QRsubpath"><br />

<MTIgnore>ブログの URL</MTIgnore>
<MTSetVarBlock name="QRblogurl"><MTBlogURL></MTSetVarBlock>
2.<MTGetVar name="QRblogurl"><br />

<MTIgnore>ブログのサイトパス</MTIgnore>
<MTSetVarBlock name="QRsitepath"><MTBlogSitePath></MTSetVarBlock>
3.<MTGetVar name="QRsitepath"><br />

<MTIgnore>QRコードの パス</MTIgnore>
<MTSetVar name="QRqrpath"value="$QRsitepath">
<MTSetVar name="QRqrpath"value="$QRsubpath" append="1">
4.<MTGetVar name="QRqrpath"><br />

<MTIgnore>QRコードの URL</MTIgnore>
<MTSetVar name="QRqrurl"value="$QRblogurl">
<MTSetVar name="QRqrurl"value="$QRsubpath" append="1">
4.<MTGetVar name="QRqrurl"><br />

<MTIgnore>QRコードに変換したい文字列</MTIgnore>
<MTSetVarBlock name="QRpara"><MTEntryPermalink></MTSetVarBlock>
6.<MTGetVar name="QRpara"><br />


<MTIgnore>現在のブログのURLをQRコード画像に変換するサンプル</MTIgnore>
<MTGetQRCode url="$QRpara" qrcodeurl="$QRqrpath"><br />

<MTIgnore>生成したQRコードのURLを取得するサンプル</MTIgnore>
<MTGetVar name="QRqrurl">
<img src="<MTGetvar name="QRqrurl">" width="100" /><br />

上記サンプルコードを貼ってみる

※部分は非表示とした。晒すのもなんかキモチワルイので。

QRコード生成プラグイン 実験

1.images/20090215141736.png
2.http://www.apstars.com/blog/
3.※ここは非表示にしてます
4.※ここは非表示にしてます
4.http://www.apstars.com/blog/images/20090215141736.png
6.http://www.apstars.com/blog/215/mt4urlqr.php

http://www.apstars.com/blog/images/20090215141736.png

トラックバック(0)

このブログ記事を参照しているブログ一覧: MT4:エントリのURLをQRコードで自動生成する

このブログ記事に対するトラックバックURL:

コメントする






Categories
Entries
Feed
スポンサードリンク

parts

フィードメーター - Under the Bridge

あわせて読みたい

なかのひと

2008 yoshi(apstar)