現在のページの位置: くろねこスクエア Labs > 2009年 > 9月

くろねこスクエア Labs

KakakuFeed Ver1.0仕様へアップデート

キーワードに合った価格.comの情報を、使いやすい形で取得するためのWebサービス「KakakuFeed」をアップデートしました。これまで同様、価格.comの商品をキーワードやジャンルで絞り込み、RSS/ATOMなどのデータとして取得することができます。

アップデートの詳細

2009年8月末をもって、従来のVer1およびVer1.1のAPI提供が終了したため、このたび価格.com ウェブサービス Ver1.0(1ではなく1.0)の仕様に準拠いたしました。

従来から使用させていただいているPEAR::Services_KakakuComを価格.com ウェブサービス Ver1.0に(適当に)対応させたものを置いておきます。

  • ApiKeyパラメータを追加
  • リクエストURL変更

ブログパーツを作ってみました

Roonys Paradiseのブログパーツを作ってみました。

Adobe Flex SDKで作ったのですが、サンプル通りに進めると簡単にFlashファイルができあがりました。いわゆるAdobe Flashという(高価で)わかりにくいソフトのことなど全く考えなくていいのですね。ActionScriptを書くだけなので、タイムラインとも無縁。ちなみに、Flex SDKはオープンソースです。

以下はbp_roony_news.mxmlの例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" initialize="init();" width="160" height="240" horizontalScrollPolicy="off" verticalScrollPolicy="off">
    <mx:Style>
        Application
        {
        padding-top: 0;
        padding-bottom: 0;
        padding-left: 0;
        padding-right: 0;
        border-style: solid;
        background-color: #d0c2a8;
        }
        .links{
        textDecoration: underline;
        }
    </mx:Style>
    <!--mx:Panel-->
        <mx:VBox styleName="logo">
        <mx:Image source="bp_01.png" click="openUrl()" buttonMode="true" />
        </mx:VBox>
        <mx:VBox styleName="links">
            <mx:LinkButton id="link0" label="" click="openNews(event)" />
            <mx:LinkButton id="link1" label="" click="openNews(event)" />
            <mx:LinkButton id="link2" label="" click="openNews(event)" />
            <mx:LinkButton id="link3" label="" click="openNews(event)" />
            <mx:LinkButton id="link4" label="" click="openNews(event)" />
        </mx:VBox>
        <mx:Image source="bp_03.png" />
    <!--/mx:Panel-->
    <mx:Script>
    <![CDATA[
        import flash.net.URLLoader;
        import flash.net.URLRequest;
        import flash.net.URLVariables;
            import flash.net.navigateToURL;
        import flash.events.Event;
           
        public var links:Array = new Array();
       
        public function init():void {
            var request:URLRequest = new URLRequest("http://roony.kuroneko-square.net/feed/rss2");
            var loader:URLLoader = new URLLoader();
            loader.addEventListener(Event.COMPLETE, setNews);
            loader.load(request);
        }
        private function setNews(event:Event):void {
            var loader:URLLoader = event.target as URLLoader;
            var xml:XML = XML(loader.data);
            var itemNode:XMLList = xml.child("item");
            link0.label = "◆"+xml.channel.item[0].title;
            link1.label = "◆"+xml.channel.item[1].title;
            link2.label = "◆"+xml.channel.item[2].title;
            link3.label = "◆"+xml.channel.item[3].title;
            link4.label = "◆"+xml.channel.item[4].title;
            for (var i:int = 0; i < 5; i++) {
                links[i] = xml.channel.item[i].link;
            }
        }
        private function openNews(event:Event):void {
            var id:String = event.target.id;
            id = id.replace("link", "");
            navigateToURL(new URLRequest(links[id]));
        }
        private function openUrl():void {
            navigateToURL(new URLRequest("http://roony.kuroneko-square.net/"));
        }
        ]]>
    </mx:Script>
</mx:Application>

むしろ、Flashを表示するための実装がブラウザによってまちまちなので、結局JavaScriptに頼らざるを得ない点が問題だと感じました。

バーコード作成 リリース

バーコードを作成するためのWebサービス「バーコード作成」と「QRコード作成」をリリースしました。各種バーコードに対応しています。

バーコードの作成」を参考にさせていただきました。

今回対応したバーコード

  • JAN-13/EAN-13/ISBN-13
  • UPC-A
  • CODE 39
  • Code 25 Interleaved 2 of 5(ITF)
  • CODE 128
  • PostNet
  • 日本郵便 カスタマバーコード

ところで「日本郵便 カスタマバーコード」は需要がないのかライブラリがないのでバーコードに必要な文字情報の抜き出し法を参考にして書いてみたのが以下のPHPコード。漢数字は面倒なので対応していません。もう少しスマートなやり方はないだろうか?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<?php
function validator_imbjp($text){
    $text = trim($text);
    $text = strtoupper($text);
    $rep_pat= array("&","/","・",".");
    $text = str_replace($rep_pat,'',$text);
    $text = preg_replace('/[A-Z]{2,}/','',$text);

    // /[0-9]F/ -> [0-9]-, 2-3-$ => 2-3
    if(preg_match_all('/[0-9]F/',$text, $matches)){
        foreach($matches[0] as $key => $value){
            $mat[$key] = str_replace('F','-',$value);
        }
        $text = str_replace($matches[0],$mat,$text);
        $text = preg_replace('/-$/','',$text);
    }

    if(preg_match_all('/[A-Z0-9\-]+/', $text, $matches)){
        $text = implode('-', $matches[0]);
    } else {
        return;
    }

    // A-2 => A2, L-B => LB
    if(preg_match_all('/-*[A-Z]-*/',$text, $matches)){
        foreach($matches[0] as $key => $value){
            $mat[$key] = str_replace('-','',$value);
        }
        $text = str_replace($matches[0],$mat,$text);
    }

    $text = str_replace('--','-',$text);
    if(substr($text,3,1)=='-'){
        $text = substr_replace($text,'',3,1);
    }
    if(substr($text,7,1)=='-'){
        $text = substr_replace($text,'',7,1);
    }

    //numstring
    for ($idx = 0; $idx < strlen($text); $idx++) {
        $char  = substr($text, $idx, 1);
        for ($baridx = 0; $baridx < strlen($this->_coding_map[$char]);) {
            $numstring[] = substr($this->_coding_map[$char], $baridx, 3);
            $baridx = $baridx+3;
        }
    }

    //numstring length check(add and remove)
    if(count($numstring) < 20){
        for($idx = count($numstring); $idx < 20; $idx++){
            $numstring[] = '432';
        }
    }
    $numstring = array_slice($numstring,0,20);
   
    //Check digit
    foreach($numstring as $value) {
        $checksum = $checksum + $this->_checkdg_map[$value];
    }
    if(($checksum % 19) == 0) {
        $checkdigit = 0;
    } else {
        $checkdigit = (19 - ($checksum % 19));
    }

    //leader + number + checkdigit + trailer
    $numstring = $this->_coding_map['leader'].implode('',$numstring).$this->_coding_map[$checkdigit].$this->_coding_map['trailer'];
    return $numstring;
}

最終的な出力はPEAR::Image_Barcodeにおまかせ。参考までに、Image_Barcodeで使える「日本郵便 カスタマバーコード」クラスを置いておきます。

カテゴリー

Feed

メタ情報