Home > 梅原 > バーコードリーダーを使ってみる。

バーコードリーダーを使ってみる。

20100719
Category:梅原 /Tags:,

バーコードリーダーPS-800Pを購入したの試してみた。
USBキーボードのキーイベントとして取れるので、ドライバ不要で、すぐに使えた。

とりあえず、バーコード読み取り→改行コードを受け取ったら、コードを判別して、書籍なら書籍用APIに、それ以外の商品ならYahooに問い合わせる。

▼Wonderfl

▼ActionScript AS3(FP9)

/*
 * バーコードリーダーPS-800Pを購入したの試してみた。
 * http://www.amazon.co.jp/dp/B002C1SPBQ/
 *
 * USBキーボードのキーイベントとして取れるので、ドライバ不要で、すぐに使えた。
 *
 * とりあえず、バーコード読み取り→改行コードを受け取ったら、
 * コードを判別して、書籍なら書籍用APIに、それ以外の商品ならYahooに
 * 問い合わせる。
 *
 *
 * API
 * http://d.hatena.ne.jp/eiji8pou/20070703/1183458537
 * FetchData_url(decodeURIComponent)v2
 * http://pipes.yahoo.com/pipes/pipe.info?_id=e01ba793eb504f8c2ee7284b4614ca54
 *
 * http://developer.yahoo.co.jp/webapi/shopping/shopping/v1/itemlookup.html
 *
 * 参考
 * http://www.uraken.net/zatsugaku/zatsugaku_109.html
 * */
package
{
    import flash.display.Sprite;
    import flash.events.KeyboardEvent;

    public class Main extends Sprite
    {
        private var _string:String;
        private var _loadPublisher:LoadPublisher;
        public function Main() {
            _string = "";
            _loadPublisher = new LoadPublisher();
            this.addChild(_loadPublisher);
            stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
        }

        private function onKeyDown(event:KeyboardEvent):void {
            if (event.keyCode == 13) {
                trace(_string);
                _loadPublisher.getPublisher(_string);
                _string = "";
            }else {
                _string += String.fromCharCode(event.keyCode);
            }
        }
    }
}

import com.adobe.serialization.json.JSON;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.MouseEvent;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.net.URLLoader;
import flash.text.TextField;
import flash.text.TextFormat;
/**
 * ...
 * @author umhr
 */
[SWF(backgroundColor="0xEEEEEE")]
class LoadPublisher extends Sprite {
    private var _textField:TextField;
    private var _codeTF:TextField;
    public function LoadPublisher():void {
        _codeTF = new TextField();
        _codeTF.defaultTextFormat = new TextFormat("_sans", 12, 0, true);
        _codeTF.width = 465;
        _codeTF.text = "準備完了。Flashのステージをクリックしてからバーコードを読んでください。";
        addChild(_codeTF);
        _textField = new TextField();
        _textField.multiline = true;
        _textField.wordWrap = true;
        _textField.y = 20;
        _textField.width = 465;
        _textField.height = 465;
        addChild(_textField);
    }
    public function getPublisher(code:String):void {
        _codeTF.text = "Code:" + code;
        //ドキュメントルートのcrossdomain.xml(http://pipes.yahooapis.com/crossdomain.xml)で
        //許可を与えているので、特に指定しなくても自動的に許可を取ってくる。
        var myURLLoader:URLLoader = new URLLoader();
        var xmlURL:String;
        if (int(code) == 0) {
            _textField.text = "特殊なコードは対応してないんです。";
            return;
        }else if (code.substr(0, 3) == "491") {
            _textField.text = "雑誌は対応してないんです。";
            return;
        }else if (code.substr(0, 3) == "978") {
            //本(isbn)の場合
            myURLLoader.addEventListener (Event.COMPLETE, onCompleteISBN13JSON);
            //YahooPipesの汎用dataProxy
            xmlURL = "http://pipes.yahooapis.com/pipes/pipe.run?_id=e01ba793eb504f8c2ee7284b4614ca54&_render=json&url=";
            //encodeURIComponentでエスケープして、feedProxyにくっつける。
            xmlURL += encodeURIComponent(encodeURIComponent("http://roboko.s212.xrea.com/publisher.cgi?method="+"isbn13"+"&code="));
            xmlURL += code.substr(0, 13);
        }else {
            //本位外(jan)の場合
            myURLLoader.addEventListener (Event.COMPLETE, onCompletejanJSON);
            var appId:String = "vaSj7BOxg66o5HyvoZNcYUNiJEnzGnxJuQXKy5nuune_2XDHynZg50Y3ORQtZw0LaQqF";
            xmlURL = "http://shopping.yahooapis.jp/ShoppingWebService/V1/json/itemSearch?appid=" +appId + "&jan=" + code;

        }
        myURLLoader.load(new URLRequest(xmlURL));
    }
    private function onCompletejanJSON(event:Event):void {
        var data:Object = JSON.decode(URLLoader(event.target).data);
        var str:String = "";
        if(data.ResultSet["0"].Result["0"].Name){
            str += Utils.dump(data.ResultSet["0"].Result["0"].Name);
            str += "<br /><br />";
        }
        if(data.ResultSet["0"].Result["0"].Description){
            str += Utils.dump(data.ResultSet["0"].Result["0"].Description);
            str += "<br /><br />";
        }
        if(data.ResultSet["0"].Result["0"].Url){
            str += "<a href='" + data.ResultSet["0"].Result["0"].Url + "'>"+data.ResultSet["0"].Result["0"].Url+"</a>";
            str += "<br /><br />";
        }
        if(data.ResultSet["0"].Result["0"].Image && data.ResultSet["0"].Result["0"].Image.Medium){
            str += "<img src='" + data.ResultSet["0"].Result["0"].Image.Medium + "'>";
        }
        if (str == "") {
            str = "見つかりませんでした。";
        }

        _textField.htmlText = str;
        Utils.dump(data);
    }

    private function onCompleteISBN13JSON(event:Event):void {
        var data:Object = JSON.decode(URLLoader(event.target).data);
        if (data.value.items.length > 0) {
            _textField.text = Utils.dump(data.value.items["0"].publisher);
        }else {
            _textField.text = "見つかりませんでした。";
        }
    }
}

    import flash.utils.getQualifiedClassName;

    class Utils {
        public function Utils():void { };
        //shuffle
        static public function shuffle(num:int):Array {
            var _array:Array = new Array();
            for (var i:int = 0; i < num; i++) {
                _array[i] = Math.random();
            }
            return _array.sort(Array.RETURNINDEXEDARRAY);
        }
        //Dump
        static public function dump(obj:Object, isTrace:Boolean = true):String {
            var str:String = returnDump(obj)
            if (isTrace) {
                trace(str);
            }
            return str;
        }
        static public function returnDump(obj:Object):String {
            var str:String = _dump(obj);
            if (str.length == 0) {
                str = String(obj);
            }else if (getQualifiedClassName(obj) == "Array") {
                str = "[\n" + str.slice( 0, -2 ) + "\n]";
            }else {
                str = "{\n" + str.slice( 0, -2 ) + "\n}";
            }
            return str;
        }

        static public function traceDump(obj:Object):void {
            trace(returnDump(obj));
        }

        static private function _dump(obj:Object, indent:int = 0):String {
            var result:String = "";

            var da:String = (getQualifiedClassName(obj) == "Array")?'':'"';

            var tab:String = "";
            for ( var i:int = 0; i < indent; ++i ) {
                tab += "    ";
            }

            for (var key:String in obj) {
                if (typeof obj[key] == "object") {
                    var type:String = getQualifiedClassName(obj[key]);
                    if (type == "Object" || type == "Array") {
                        result += tab + da + key + da + ":"+((type == "Array")?"[":"{");
                        var dump_str:String = _dump(obj[key], indent + 1);
                        if (dump_str.length > 0) {
                            result += "\n" + dump_str.slice(0, -2) + "\n";
                            result += tab;
                        }
                        result += (type == "Array")?"],\n":"},\n";
                    }else {
                        result += tab + '"' + key + '":<' + type + ">,\n";
                    }
                }else if (typeof obj[key] == "function") {
                    result += tab + '"' + key + '":<Function>,\n';
                }else {
                    var dd:String = (typeof obj[key] == "string")?"'":"";
                    result += tab + da + key + da + ":" + dd + obj[key] +dd + ",\n";
                }
            }
            return result;
        }
    }

関連記事:

Comments are closed.