郵便番号APIを使った住所自動入力フォーム
メールフォーム等でよく使う、郵便番号から住所を自動入力してくれるように組んでいきます。
今回作成したソースはダウンロードできます。
ダウンロード:sample.zip
下記に、メイン関数の処理を記述します。
function main(){
// 初期処理
$inputData = getData();
// 検索ボタン押された場合
if(isset($inputData['search'])){
//入力情報GET
$inputData = getData();
//入力内容チェック
$error = check ($inputData);
if ($error['flg']){
//エラー表示
disp($inputData,$error);
return;
}
//郵便番号APIのURLを設定
$url = 'http://zip.cgis.biz/xml/zip.php?zn='.$inputData['zipnum1'].$inputData['zipnum2'];
//郵便番号APIから入力された郵便番号の情報を取得
$xmlData =file_get_contents($url);
$xmlParser = xml_parser_create();
xml_parse_into_struct($xmlParser,$xmlData,$addressData);
xml_parser_free($xmlParser);
//取得データをセット
$setData = setData($addressData,$inputData);
//セットされたデータをチェック
$error = check($setData);
if ($error['flg']){
//エラー表示
disp($setData,$error);
return;
}
disp($setData);
}else{
disp($inputData);
}
}
【ブラウザ表示】
使用方法を説明させて頂きます。
入力項目の住所検索ボタンを押すと郵便番号APIを呼び出し、
取得したxmlファイルのデータを各入力項目に代入させています。
ブラウザ表示の処理はdisp関数で行っております。
disp関数の引数は郵便番号APIから取得したデータの配列で、htmlを生成させて表示しています。
また、郵便番号APIを使用する際の規約について、
画面のどこかにリンクを貼り付けることになっていますので、
今回は画面の下方に「利用しているAPI 郵便番号API」と表示させています。
郵便番号APIを呼び出す時は以下のようにしています。
//郵便番号APIのURLを設定 $url = "http://zip.cgis.biz/xml/zip.php?zn=".$inputData["zipnum1"].$inputData["zipnum2"]; //郵便番号APIから入力された郵便番号の情報を取得 $xmlData =file_get_contents($url);変数の「$inputData["zipnum1"]」や「$inputData["zipnum2"]」においては、getData関数で指定していります。
getData関数ではサーバーにpostで送信した郵便番号と各入力項目を配列で設定しています。
getData関数の配列のキーは以下の通りです。
設定フラグ:flg
郵便番号1:zipnum1
郵便番号2:zipnum2
都道府県:state
都道府県カナ:state_kana
市区町村:city
市区町村カナ:city_kana
住所:address
住所カナ:address_kana
番地:company
番地カナ:company_kana
取得したxmlファイルのデータを配列に置き換えている処理は以下のソースで処理しています。
$xmlParser = xml_parser_create(); xml_parse_into_struct($xmlParser,$xmlData,$addressData); xml_parser_free($xmlParser); //取得データをセット $setData = setData($addressData);上記のsetData関数で取得したxmlファイルを各データに配列でセットしています。
入力された郵便番号のデータがない場合、setData関数で設定フラグを「false」にし、check関数でエラーを表示するように設定しています。
郵便番号setData関数の内訳は以下の通りになります。
設定フラグ:flg
郵便番号1:zipnum1
郵便番号2:zipnum2
都道府県:state
都道府県カナ:state_kana
市区町村:city
市区町村カナ:city_kana
住所:address
住所カナ:address_kana
番地:company
番地カナ:company_kana
check関数では、以下のチェック処理をしております。
データの有無:入力された郵便番号のデータチェック
郵便番号1:郵便番号桁数チェック(3桁)+数字チェック
郵便番号2:郵便番号桁数チェック(4桁)+数字チェック
上記チェック処理に当てはまった場合はエラーメッセージを表示するようにしております。
ダウンロードして頂いて、試しに使っていただいたら非常に嬉しい限りです。
参照URL
郵便番号API:郵便番号APIのページへ
XML処理:WEBシステム開発の情報サイト
(kozo)
PHPでmt_randを使用して乱数を作ってみる
PHPで乱数を生成するときに、mt_rand()関数で乱数を作る場面があると思いますが、
連続で同じ数字が出てきて何か嫌だ!
でも綺麗に乱数が生成されてるから、まっいっか!
って事はないでしょうか?
筆者はたまに思ったりします!
しかし、乱数生成時に同じ数字の重複は避けたい!っていう場面が出てくると思います。
そこで、かんたんに同じ数字が重複しない乱数の生成方法を紹介したいと思います。
まず単純に0から9の数字で10桁の乱数を作るスクリプトです。
for($i = 0; $i < 10; ++$i){
$num = mt_rand(0,9);
$ransu .= $num;
}
結果:9838260512
8と2が重複してしまいました。
下記の様にすると、同じ数字が重複しない乱数の生成ができます。
$suji = '0123456789';
for ($i = 0; $i < 10; ++$i) {
$len = mb_strlen($suji);
$j = mt_rand(0,$len-1);
$num = $suji[$j];
$ransu .= $num;
//1度で出た数字は対象外にする
$suji = str_replace($num,"",$suji);
}
結果:5673108942
1つも同じ重複する数字がでてこないですね(b^-゜)
ポイントは1度出た数字は次のループでは使わない。
という所です。
この考えを元に上手く利用すれば、精度の高いランダム処理が実現できると思います。
例えば複数のバナー画像をランダム表示させる仕組みで、
偏りなく全ての画像を平均的になるように表示したい場合、
1度表示した画像は、他の画像が表示されるまで表示させない!
という方法をとれば実現できると思います。
ちなみに、同じ数字を使用しない乱数を生成したい場合は、 「shuffle」関数でも実現が可能です。
$array = range(0,9); shuffle($array); 結果:4093752186
この記事がみなさんの制作するプログラミングのヒントにでもなれば幸いです。
(hirohito)
Flash CS4でフォントを変更してコードを見やすくする方法
Flash CS4 でデフォルトのスクリプトフォントは、「MS UI Gothic」となっています(Windows)。
このフォントは等幅ではないので、コードが見づらくなります。
例えば、エディタで綺麗に記述していたコードをCS4に貼り付けた場合、
整列がばらばらになったりします。
そこで、環境設定でフォントを変えるとこのような問題はなくなります。
1.メニューバーの「編集」=>「環境設定」を選択

2.カテゴリ「ActionScript」のフォントを「_等幅」に変更

これで、整列されたコードを記述できます。
デフォルトの「MS UI Gothic」フォントの場合

「_等幅」に変更した場合

デフォルトのままだと、カンマやドットといった文字を見落としてしまう場合があるので、
変更しておくことをオススメします。
(tsubasa)
JavaScriptを使ってサイトにQRコードを貼ってみる
PCサイトからモバイル向けサイトへ誘導したい事がよくありますが、そんな時はやはりQRコードが利便性が高いですね。
(※QRコードは(株)デンソーウェーブの登録商標です)
今回はQRコードのAPIをJavaScriptを使って使用する方法を紹介します。
今回作ったものはこちらからダウンロードできます。
サンプルダウンロード:sample5.zip
普通QRコードをサイトに貼りたい時、「QRコード作成サイト」などでQRコード画像を作成してサイトに貼りますが、ページ数が多いととても面倒です。
そんな面倒なことはJavaScriptにやらせてしまいましょう!!
QRコードのAPIは Google Chart Tools を使用します。(Google Chart Toolsの詳しい使い方)
このAPIはgoogleのAPIサーバーにリクエストをおこなうとQRコード画像を作成してくれる仕組みになっています。
動的にQRコードを生成するには タグのsrcにAPIリクエストをを設置して使います。
それでは試しに「WebシステムのツボURL」のQRコードを生成してみましょう。
APIリクエストの変数chl に"Webシステムのツボ"のURL(http://lab.gpol.co.jp/tsubo/)を設定してみます。
↓ このHTMLは下のように表示されます
ケータイのQRリーダー機能で確認してみましょう。
うまく表示されました!
それではこのchl の部分をJavaScriptを使って、自動で現在のURL になるように変更します。
<script type="text/javascript">
//<![CDATA[
(function(text, width, height)
{
document.write('<img src="https://chart.googleapis.com/chart?cht=qr&amp;chs=' + width + 'x' + height + '&chl=' + text.split('&').join('%26') + '" width="' + width + '" height="' + height + '" alt="QR" />');
})(document.URL, 150, 150);
//]]>
</script>
実際にこのコードを使用してみました。 ↓
これでモバイル向けサイトへのリンクが簡単におこなえますね。
(teruhisa)
AS3 ランダムに配置したSpriteオブジェクトを整列させる
なお、Tweenライブラリの「Tweener」を利用しているため、Tweenerについても簡単に紹介します。
今回使用するソースコード(flaファイル)はこちらからダウンロードできます。→sample_sprite.zip
【サンプル】
import caurina.transitions.Tweener;
//画面に表示する矩形の数
var N:int = 300;
//矩形にTween処理を割当て
for (var i = 0 ; i < N ; i++ ){
Tweener.addTween(
createSprite(),
{
x: (i + 1) * 25 - (500 * int(i/20)),
y: ( int(i/20) + 1 ) * 25,
rotation: 180,
time: 5,
transition: 'easeInOutQuint'
}
);
}
//矩形を生成して画面に配置
function createSprite():Sprite{
var size:int = 25; //矩形の1辺の長さ
var mySprite:Sprite = new Sprite();
mySprite.graphics.beginFill( Math.floor( Math.random() * 0xFFFFFF ) + 1 );
mySprite.graphics.drawRect(-size/2, -size/2, size, size);
addChild(mySprite);
//ステージサイズ 550x400
mySprite.x = Math.floor( Math.random() * 1100 ) + 1 -275;
mySprite.y = Math.floor( Math.random() * 800 ) + 1 -200;
return mySprite;
}
【解説】
1.Tweenerについて
Tweenerとは、ムービークリップなどに簡単にトゥイーン処理を割り当てられる、
オープンソースのライブラリです。
以下のサイトでライブラリが配布されていますので、そちらからダウンロードします。
http://code.google.com/p/tweener/
※「Downloads」から、使用するASのバージョンに合ったものをダウンロードして下さい。
AS2版とAS3版があります。
ダウンロードしたzipフォルダを解凍して出てきたcaurinaフォルダを
そのままflaファイルと同じディレクトリに配置します。
これで、Tweenerを使用する準備は完了です。
スクリプトに、
import caurina.transitions.Tweener;を記載すれば使うことが出来ます。
なお、TweenerはMITライセンスなので、無償で使用できます。
MITライセンスについては、以下をご参照ください。
http://code.google.com/p/tweener/wiki/License(Tweenerのライセンスについての記述)
http://www.opensource.org/licenses/mit-license.php(MITライセンスの原文)
http://sourceforge.jp/projects/opensource/wiki/licenses%2FMIT_license(日本語参考訳)
2.ソースコードの解説
矩形を生成する関数を作り、Spriteを返すようにしています。
この関数をTweener.addTweenの第一引数で呼び出すことで、 生成した矩形にTween処理を割り当てることができます。
addTweenメソッドで、トゥイーン後の座標を指定することで、 ランダムに配置した矩形を、指定の位置に整列させています。
※通常、Spriteオブジェクトを動的に生成する場合、以下のようなコードになると思います。
//オブジェクトを生成 var mySprite:Sprite = new Sprite(); //矩形の色 mySprite.graphics.beginFill( Math.floor( Math.random() * 0xFFFFFF ) + 1 ); //矩形の範囲 mySprite.graphics.drawRect(-25/2, -25/2, 25, 25); //矩形の座標(ランダムに配置) mySprite.x = Math.floor( Math.random() * 1100 ) + 1 -275; mySprite.y = Math.floor( Math.random() * 800 ) + 1 -200; //ステージに配置 addChild(mySprite);
ただし大量にSpriteを生成したい場合、上記のコードをSpriteの数だけ書いてしまうと
とても長いスクリプトになってしまいます。
そのため、関数としてまとめて記述しています。
関数内でaddChildしただけでは、インスタンス名が無い状態なので、
Tweener.addTweenメソッドで指定することができません。
そのため、インスタンス名をつけなくてもSpriteオブジェクトを指定できるよう、
関数の戻り値をSpriteオブジェクトにしています。
(kenta)
郵便番号検索APIの紹介
郵便番号検索API:http://zip.cgis.biz/
APIの機能について
・日本郵政社に登録されている住所情報を検索。
・検索方法は郵便番号をGET方式でサーバーに送信し、当てはまった情報をCSVファイルかXMLファイルで出力。
・データベースの情報は、毎月10日のAM3:00に日本郵政社からダウンロード出来るデータを基に更新されています。
使い方
下記のように「zn=」の後に検索したい郵便番号を入力してアクセスするとXMLデータ・CSVデータで扱えます。
URL(XML)
http://zip.cgis.biz/xml/zip.php?zn=○○
URL(CSV)
http://zip.cgis.biz/csv/zip.php?zn=○○
但し、このAPIは無料ですがリンクウェアである為、必ず利用規約を守ってご使用ください。
利用規約につきましては、このページの最後にございますリンクをクリックして参照してください。
例として、大阪駅の郵便番号「5300001」を入力してみます。
入力方法は以下のとおりです。
・XMLデータ
http://zip.cgis.biz/xml/zip.php?zn=5300001
・CSVデータ
http://zip.cgis.biz/csv/zip.php?zn=5300001
取り扱えるXMLデータは下記になります。
・state_kana(都道府県カナ)
・city_kana(市区町村カナ)
・address_kana(住所カナ)
・company_kana(事業所名カナ)
・state(都道府県)
・city(市区町村)
・address(住所)
・company(事業所名)
次回には実際に郵便番号検索APIを使ったサンプルソースを紹介します。
利用規約についてはこちら:利用規約ページへ
PHPの画像リサイズを、配布されているクラスで実現してみよう(PHP5+GDライブラリ必須)
ブログ等でよく紹介されているクラスですが、
細かい解説サイトなどがなかったので、こちらで紹介してみようと思います。
(誤りや訂正等ございましたら情報をお寄せ下さい)
今回使用してみるクラスはこちらです。
【PHP Image Resezer Class】
http://www.milaju.com/post/php-image-resizer-class
PHP+GDライブラリを使用し、画像変換の処理をかんたんに行ってくれるクラスです。
上記サイトから圧縮ファイルをダウンロードし、
解凍をすると下記のようなディレクトリ構成になっています。

index.phpを開いてみましょう。
下記のPHPスクリプトに注目です。

上から順に見てみますと、
最初にクラスファイルを読み込み、
その後に「$imgSizer->」で画像リサイズの詳細設定をしています。
各項目設定の内容を下記に簡単にご紹介します。
$imgSizer->type = "width";
画像をリサイズする縦横の基本設定を行います。
設定できるタイプは、「width」と「height」です。
$imgSizer->max = 100;
リサイズするピクセルサイズを指定します。
$imgSizer->type = "width"の場合、幅が100ピクセル
"height"の場合は高さが100ピクセルになります。
$imgSizer->quality = 8;
画質の調整が行えます。
1〜10までの設定が可能です。
数字が高ければ画質が高くなります。
$imgSizer->square = true;
画像のリサイズ方法に関する設定です。
設定できる値は、「true」と「false」です。
true:画像の中心を基本とし、正方形で画像をリサイズする。
false:縦横の比率を維持してリサイズする。
$imgSizer->prefix = "sml_";
リサイズした画像名の先頭に付加する名称を指定できます。
例:元画像が「test.jpg」→リサイズ後「sml_test.jpg」
$imgSizer->folder = "_sized/";
リサイズした画像を保存するディレクトリを指定します。
デフォルトでは、リサイズ元の画像と同階層のディレクトリにフォルダが作成されます。
以上が基本の設定になります。
そして、最後にリサイズ元の画像を設定します。
$imgSizer->image = "/PHP_ImageSizer/images/test.jpg";
デフォルトの状態では画像のパス指定は、ルートパス指定になります。
各設定が完了しましたら、
「$imgSizer->resize()」を実行します。
実行後は、リサイズされた画像のパスが返ってきます。
この値を、「<img>」タグに設定すると画像が表示できます。
PHPの記述最後の部分は、画像を配列変数に登録し、
それぞれ画像のリサイズ処理をして出力している。
というスクリプトになります。
次にclassファイルの方も少し見てみましょう。
下記の部分ですが、

この記述により「index.php」で設定した項目を、
分解・結合等を行い、最後に画像リサイズ処理を行っています。
$_SERVER['DOCUMENT_ROOT']で、パス指定を行っていますので、
ドキュメントルートの指定を外したい場合は、
この部分を修正し、カスタマイズ等を行うと、
自分の仕様で画像処理スクリプトを作成する事が可能です。
簡単な説明になりましたが以上になります。
今回紹介させて頂きましたクラス以外にも、
画像リサイズ処理は数多く配布されていると思いますので、
いろいろ試してみて、自分にあったスクリプトを見つけるのもいいかもしれないです。
その他のライブラリ
・Image Resizing Made Easy with PHP
・target="_blank"Icebeat | class.image
(hirohito)
【AS3】 addEventListenerに引数を渡す
どのオブジェクトか識別したい場合があります。
例えば、多数あるボタンにクリックイベントを纏めて登録する場合、
【一括でイベントを登録するサンプル】
// ボタン格納配列 var btn_array:Array = new Array(btn1_mc, btn2_mc, btn3_mc, ...); for(var i:int=0; i<btn_array.length; i++){ // マウスイベント登録 btn_array[i].addEventListener(MouseEvent.CLICK, onMouseClickHandler); } /** * マウスイベント */ function onMouseClickHandler(e:MouseEvent):void { var btn_mc:MovieClip = MovieClip(e.target); // "btn_mc"って、btn_array配列のどのボタンが押された? }
登録イベント発生時に、どのボタン押されたのか判別できません。
nameプロパティで出来なくはないですが、出来れば配列で回したいですよね。
この場合は、ムービークリップに対してイベントを張っているので、
予め識別できるidなどプロパティを追加しておけば楽に判別できます。
【ムービークリップに識別idを追加するサンプル】
for(var i:int=0; i<btn_array.length; i++){
// 識別id追加
btn_array[i]._id = i;
// マウスイベント登録
btn_array[i].addEventListener(MouseEvent.CLICK, onMouseClickHandler);
}
/**
* マウスイベント
*/
function onMouseClickHandler(e:MouseEvent):void
{
// btn_array[e.target._id] が押されました!
}
というように、予め識別できるidなどを追加しておけば判別出来ます。
ただ、全てこのような形で出来るわけではなく、例えば画像読み込みに使用するloaderには、
プロパティを追加できません。
【プロパティを追加できないサンプル】
// 画像ファイル名格納配列 var img_array:Array = new Array('img1.jpg', 'img2.jpg', 'img3.jpg', ...); for(var i:int=0; i<img_array.length; i++){ var myLoader:Loader = new Loader(); myLoader._id = i; // プロパティを追加できない、※エラー myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler ); // 読み込み開始 myLoader.load(new URLRequest(img_array[i])); } /** * 読み込み完了イベント */ function onCompleteHandler(e:Event):void { // どの画像が読み込み完了した? }
そこで、loaderなどのイベント発生時に引数を渡す方法をご紹介します。
そもそもaddEventListenerの構文は、addEventListener(イベント名、リスナー関数);
となっています。
一番簡単な方法は、このリスナー関数にループで使用しているカウンタ(i)を渡してあげれば
済む話なのですが、リスナー関数の引数はリファレンスにも書かれている通り、
この関数は、次の例のように、Event オブジェクトを唯一のパラメータとして受け取り、引用:ActionScript 3.0 コンポーネントリファレンスガイド
何も返さないものである必要があります。
function(evt:Event):void
http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/flash/events/EventDispatcher.html
となっています。つまり、
/**
* リスナー関数
*/
function(e:Event):void
{
}という形でないといけないのです。これではループカウンタを渡すことが出来ません。
そこで、リスナー関数の構文を守り、かつループカウンタを渡す方法はこのようになります。
【AddEventListenerに引数を渡すサンプル】
for(var i:int=0; i<img_array.length; i++){
var myLoader:Loader = new Loader();
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler(i));
// 読み込み開始
myLoader.load(new URLRequest(img_array[i]));
}
/**
* 読み込み完了イベント
*/
function onCompleteHandler(_num:int):Function
{
// img_array[_num] 画像が読み込み完了しました!
return function(e:Event):void;
}
パラメータを受け取る関数(onCompleteHandler)を間に挟み、且つ構文を守る為
Event型を唯一の引数とした戻り値なしの関数をリターンしてあげれば完了です。
(tsubasa)
【フィッシングサイト】ドメイン利用料金の架空請求にご注意ください
送信者:Registration Expiring <reginastauffer@domainregistservices.com>
(本文は以下の画像)

※「ぼかし」の箇所には弊社で利用しているドメイン名が入っています
一見、「ドメイン利用期限切れのお知らせ」メールのようですが・・・
メールの送信者はうちで利用している事業者ではなく"domainregistservices.com"というところでした。
(※メール送信者は簡単に偽装できるので当てになりません)
メールの本文には「支払いサイトへのリンク」があり、"domainregistrat.com"という知らないサイトへリンクが貼られていました。
実際、リンク先にいってみると(※メール中のリンクをむやみにクリックしないでください)、以下のようなページで下部はクレジットカード番号を入力するフォームになっていました。
もちろん、弊社で利用している事業者ではないのでカード番号は入力しませんでしたが、事情に詳しくない担当者だったら間違って入れてしまうかもしれません。

※画像はイメージです
ドメインの登録情報はWhoisなどを利用すると簡単に取得できるので、架空請求メールは誰でも簡単に作ることができます。
ドメインの期間更新をおこなうときは"本当に自分が利用している事業者かどうか"しっかり確認するようにしましょう。
(teruhisa)
PCを快適に使う為に
使い続けることでだんだんと遅くなってしまいます。
そこで、PCを快適に使い続ける為の方法をご紹介します。
■デフラグ
Windowsに標準装備されている機能で、Windowsを使っていれば誰でも行うことが出来ます。
もしPCが遅いと感じた場合は、デフラグを行ってみてください。
・デフラグとは・・
「デフラグメント(非断片化)」の略で、日頃使っているデータの書き込み・削除を繰り返していくうちに、
HDD上のデータの位置が蜂の巣のように穴だらけの状態になっていきます。
そこで、データの位置を並べ替えて整理し、データへのアクセスを効率よくすることです。
・デフラグの方法
1.[スタート]ボタンをクリックし、[すべてのプログラム]->[アクセサリ]->[システムツール]->
[ディスク デフラグ]をクリックします。

2.デフラグツールウィンドウが立ち上がるので、分析をしたい場合は「ディスクの分析」をクリック、
デフラグを実行する場合は「ディスクの最適化」を選択します。

これだけです。すごく簡単ですね。
ただ、気をつけなければならない点も幾つかあります。
・デフラグには時間が掛かります。
→HDDの領域を整理するため、HDD容量・データ使用量によって時間が掛かります。
・PCに負荷が掛かる為、他の作業を行っていないときに実行する。
→データの整理を行うので、出来るだけ常駐アプリケーションを切るようにしましょう。
・デフラグ中に電源を落とさないようにする。
→これはデフラグに限らず、全てにおいて当てはまりますね。HDDの寿命を縮めるのでやめましょう。
時間が掛かり途中で止めたい場合は、「一時停止」や「停止」ボタンを押すことで
停止することが出来ます。
PCの動きが遅く感じたら、是非やってみてください。
(tsubasa)




