MT4:エントリのURLをQRコードで自動生成する
以前、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.png2.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

- カテゴリ:215プラグイン関係
トラックバック(0)
このブログ記事を参照しているブログ一覧: MT4:エントリのURLをQRコードで自動生成する
このブログ記事に対するトラックバックURL:
- Categories
- Entries
-
- Feed情報の無いサイトの更新日時を得るプラグイン(2)
- Feed情報の無いサイトの更新日時を得るプラグイン
- MT4.2:JPEGファイルのEXIF情報を取得するプラグイン(Ver0.6)
- EXIF情報を取得するプラグインの進行状況
- MT4.2:JPEGファイルのEXIF情報を取得するプラグイン(Ver0.5)
- MT4.2:JPEGファイルのEXIF情報を取得するプラグイン(Ver0.4)
- memo:perlでプラグイン Image::ExifとImage::Info
- MT4.2:JPEGファイルのEXIF情報を取得するプラグイン(Ver0.3)
- MT4.2:JPEGファイルのEXIF情報を取得するプラグイン(Ver0.2)
- MT4.2:JPEGファイルのEXIF情報を取得するプラグイン(GPS Ready)
- MT4:エントリのURLをQRコードで自動生成する
- MT4.2:QRコード画像を生成するプラグイン(改)
- 嵌りメモ(perlのxampp環境でのファイル吐き出し実験)
- MT4.2:QRコード画像を生成するプラグイン
- MT4.2:JPEGファイルのEXIF情報を取得するプラグイン(失敗)
- 管理画面を拡張する(メニューとメソッド追加)
- MT4.1:追加したファンクションタグのみへモデファイア追加
- MT4.1:エントリの既存DBへアクセスしてデータ取得
- MT4.1:MTの計算機能を拡張するプラグイン(CalcExp)開発の話
- MT4.1:MTの計算機能を拡張するプラグイン(CalcExp)配布
- MT4.1:営業日(休日)をイッパツで表現するカレンダープラグイン(改)
- MT4.1:プラグイン作成におけるDBへのフィールド追加について(プラグイン設定編)
- MT4.1:プラグイン作成におけるDBへのフィールド追加について(ブログ毎編)
- MT4.1:プラグイン作成におけるDBへのフィールド追加について(カテゴリ編)
- MT4.1:プラグイン作成におけるDBへのフィールド追加について(エントリ編)
- MT4.1:カテゴリの並べ替え(オリジナルプラグイン+ハッシュ変数)
- サンプルプラグインを手入力した(AddField)
- MT4.1:営業日(休日)をイッパツで表現するカレンダープラグイン
- サンプルプラグインを手入力した(RandomEntry)
- 最小単位のプラグインを生成するサンプル(ファンクション、ブロック、モデファイア、コールバック)
コメントする