PEAR Image_Barcodeでバーコードを出力2009年08月01日

商品管理をすべてバーコードで行うことになり。
管理用のシールは、在庫管理のソフトで出力できるのですが。
バーコードを画像で出力する方法を探していました。

最初は、何かフリーウェアでやろうと検索していて。
沢山あるのですが、これといった良いソフトが無く。

ふと、PEARにあるかなと思い検索してみると。
バッチリありました。
PEARなら信頼性も高いので、PEAR Image_Barcodeでバーコードを出力するPHPを書きました。

バーコードについて

その前に、バーコードについてお勉強。
Wikipediaで、バーコードについて読んでみると。
今回出力するバーコードはJANなのですが。
EANと互換性がある模様。

また、JANコードには、短縮タイプもあるそうですが。
これは、国際的には通用しない規格だそう。
なので、JANの13桁でバーコードを出力すればOKかなと。

参考にさせて頂いたサイト

PEAR Image_Barcodeについて

で、次は、PEAR Image_Barcodeについてお勉強。

PEAR Image_Barcodeで出力できるバーコード

PEAR Image_Barcodeで出力できる画像形式

参考にさせて頂いたサイト

画像形式は、何となくGIFが一番クッキリ出そうで、読みやすそうな気がしたのでGIFを選択。
バーコードの形式は、JANなので、JAN互換のEANを選択。

で、バーコードの出力の際のコードは、たったこれだけ。
スゴイなPEARは。

画像として表示

Image_Barcode::draw('1234567890123','ean13','gif');

画像として出力

$barcode=Image_Barcode::draw('1234567890123','ean13','gif',false);
imagegif($barcode,'filename.gif');

最初、大変そうかなと思いましたが。
あっさりとできてしまい。
後は、実際の商品のJANコードを用意して、実際の運用の体制を整えるのみとなりました。

出荷の際は、出荷商品の一覧を出力しているので、それにバーコードを掲載すれば。
後は、それを読むだけなので問題はないかなと。

ただ、スムーズな運用のためには。
入荷の際にどのタイミングでバーコードを読み込むかがキーでしょうか。

また、PEARについて。
サイトは、PHPのエラータイプ E_STRICTにしているのですが。
たまに、PEARのコード内で、E_STRICTエラーが出ることが。
リライトしてもいいんですが。
できれば、その辺も考慮して直してもらえたら最高かと。

読み込みできるバーコードサイズ

PEAR Image_Barcodeで出力したバーコードの読込みテストをしてみました。
バーコードリーダーにも左右されると思いますので、使用する環境にも左右されると思います。

モニター上で読込みしてみたところ。
若干の認識のしにくさはありますが、読込み可能でした。
なので、商品管理などのためにも、商品ページにバーコードを表示しようかと思います。

バーコードを10%単位で縮小して読込んでみたところ。
40%の縮小まで読込み可能でした。
ただ、40%の縮小だと、JANコードが見にくかったので。
実際には、50%〜60%の縮小で利用しようかと思います。

Amazon Product Advertising API RESTリクエストの署名認証2009年07月21日

2009年8月15日までに、Amazon Product Advertising API(旧Amazon アソシエイト Web サービス)のRESTリクエストに署名認証を加えろと、じゃないと、もうリクエストを受け入れないよと。
Amazonから、ひたすらメールが届いてしたので、重い腰を上げてやっと対応しました。

以下、PHPでのRESTリクエスト用URLの生成サンプル。

$point='http://ecs.amazonaws.jp/onca/xml';
$point_parse=parse_url($point);

$param['Service']='AWSECommerceService';
$param['AWSAccessKeyId']='AWSAccessKeyId';
$param['AssociateTag']='AssociateTag';
$param['ContentType']=rawurlencode('text/xml');
$param['Version']='Version';
$param['Timestamp']=rawurlencode(gmdate('Y-m-d\TH:i:s\Z'));
以下、その他のリクエストパラメーター


$key=array_keys($param);
sort($key);

foreach($key as $key){
$q[]="{$key}={$param[$key]}";
}
$q=implode('&',$q);

$sign[]='GET';
$sign[]=$point_parse['host'];
$sign[]=$point_parse['path'];
$sign[]=$q;
$sign=implode("\n",$sign);
$sign=hash_hmac('sha256',$sign,'Secret Access Key',true);
$sign=base64_encode($sign);
$sign=rawurlencode($sign);

$url="{$point}?{$q}&Signature={$sign}";
return $url;

老舗のAmazonのAPIも、何回もverを変えて。
もう10年ぐらいたっちゃうんでしょうか。
で、いい加減膨大なリクエストを受け入れるのが面倒になっての今回のバージョンアップなんでしょうか。。。

しっかし、こういったバージョンアップが他のAPIで繰り広げられると。
その都度、直すのが大変そうなので、とりあえずこれで収まってほしいなと思います。

参考にさせて頂いたサイト

メールをトリガーにしたPHPの起動。2009年05月09日

注文時のデータを取り込む必要が出たので。
メールをトリガーにPHPを起動して、メールに記載されているデータをMySQLにインサートするプログラムを作りました。
すんなりCSVか何かで吐き出してくれればいいのですが、その手続きが大分面倒で。
でも、まぁ、これをきっかけに勉強にはなったからいいかなと。

参考にしたのは以下のサイト。

結構すんなりと書けました。
メールを取り込む際のソースは以下。

require('Mail/mimeDecode.php');
$params['include_bodies']=true;
$params['decode_bodies']=true;
$params['decode_headers']=true;
$params['input']=file_get_contents('php://stdin');
$params['crlf']="\r\n";
$mail=Mail_mimeDecode::decode($params);

で、$mailにオブジェクトで、メールの各種情報が取得されます。
ヘッダーは、$mail->headersに配列で。
本文は、$mail->bodyにstringで。

ただ、文字コードはiso-2022-jpなんで。
UTF-8で書いてるので、文字コードの変更が必要。
mb_convert_encoding($mail->body,'UTF-8','JIS');

注意点としては、ヘッダーの$mail->headersの配列のキーが、すべて小文字だったこと。
最初取得できなくて、少しハマりました。
$mail->headers['from']
$mail->headers['subject']

また、毎度大変だなと思う。
正規表現での文字列の操作ですが。

最初、以下のように書いてて、文字列が取得できないなと。
preg_replace('/^正規表現/m',$mail->body,$text);

そりゃそうですよね。replaceしてるもん。
正しくはこう。
preg_match('/^正規表現/m',$mail->body,$text);

で、また少しハマって。
preg_matchで取得する場合は、配列でやってくる。
なんで、上記の場合は、$text[0]にstringが入ると。

それまで、チンプンカンプンの世界で。
3年ほど前からPHPをいじり始めて、まだまだ半人前ですが。
プログラムのクリエイティブさと、奥深さに気づきました。
HTML・CSSのみのWEBよりも、プログラミングを交えたWEBの方が色々なことができて広がりが出ます。
ただ、それに脳がついていかず、やる毎にドンドン忘れていくのが最近の悩みで、毎度訂正する際に思い出すのが大変。
それを備忘するためにも、ブログを始めました。

追記で、PHPのエラーレベルをE_STRICTも表示するようにしているのですが。
pearのパッケージで、STRICTエラーが表示されることがあるので、この辺もケアしてくれたなと。
ただ、pear・PECLのパッケージには、いつもお世話になっていて。
色々なことが簡単にできて、偉大だと思う。

最新情報最新のエントリー

カテゴリー

バックナンバー