PHPでSOAPクライアント

CentOS5.5でやってみました。

phpのインストール

# yum install --enablerepo=webtatic php php-soap
# rpm -qa | grep php
php-common-5.3.10-1.w5
php-5.3.10-1.w5
php-cli-5.3.10-1.w5
php-soap-5.3.10-1.w5

ネタ

ネタは、Google Apps Scriptのドキュメント内で、サンプルとされていたGEOサービスを利用します。
しかしながらGAS、良くできております。

Tutorial: Accessing a Soap Service - Google Apps Script ? Google Developers

function determineCountryFromIP(ipAddress) {
    var wsdl = SoapService.wsdl("http://www.webservicex.net/geoipservice.asmx?wsdl");
    var geoService = wsdl.getGeoIPService();

    var param = Xml.element("GetGeoIP", [
                  Xml.attribute("xmlns", "http://www.webservicex.net/"),
                  Xml.element("IPAddress", [
                    ipAddress
                  ])
                ]);

    var result = geoService.GetGeoIP(param);
    return result.Envelope.Body.GetGeoIPResponse.GetGeoIPResult.CountryCode.Text;
}

PHPで同じものを書いてみる

こんな感じになりました。

<?php
/*-- geo.php --*/
function determineCountryFromIP($ipAddress) {
        try {
                $client = new SoapClient("http://www.webservicex.net/geoipservice.asmx?wsdl",
                                array('cache_wsdl' => WSDL_CACHE_NONE, 'trace' => 1, 'exceptions' => true 
                                     )
                                );
/*
                foreach ($client->__getFunctions() as $func) {
                        print "$func \n";
                }
*/
                $params = array( "IPAddress" => "$ipAddress" );

                $res = $client->GetGeoIP($params);
                var_dump($res);
        } catch (SoapFault $soapFault) {
                echo $soapFault->getCode().":".$soapFault->getMessage();
        } catch (Exception $e) {
                echo 'Caught exception: ',  $e->getMessage(), "\n";
        }
}

determineCountryFromIP('124.83.187.140');
実行結果
# php -f geo.php 
object(stdClass)#2 (1) {
  ["GetGeoIPResult"]=>
  object(stdClass)#3 (5) {
    ["ReturnCode"]=>
    int(1)
    ["IP"]=>
    string(14) "124.83.187.140"
    ["ReturnCodeDetails"]=>
    string(7) "Success"
    ["CountryName"]=>
    string(5) "Japan"
    ["CountryCode"]=>
    string(3) "JPN"
  }
}

SOAPのメッセージをトレースするには

プロキシを介するようにして、そこで覗いた方が良さそうです。

私の場合はPCでBurp Suite(プロキシするソフト)を起動します。


SoapClientのコンストラクタに、プロキシ情報(例では192.168.100.111:8080)を渡します。

<?php
$client = new SoapClient("http://www.webservicex.net/geoipservice.asmx?wsdl",
    array('cache_wsdl' => WSDL_CACHE_NONE, 'trace' => 1, 'exceptions' => true, 
        'proxy_host' => '192.168.100.111',
        'proxy_port' => 8080
    )
);

こうして実行すると、Burp Suite側でリクエストとレスポンスのメッセージを見ることができます。

CentOSに最新のPHPをインストールする

CentOS向けのphpパッケージ、結構古かったり、拡張モジュールのrpmパッケージが無かったりしてハマってしまいました。
調べたところ、webtaticというサイトで配布しているようです。

PHP 5.3 on CentOS/RHEL 5.6 | Webtatic.com

# rpm -Uvh http://repo.webtatic.com/yum/centos/5/latest.rpm
# yum --enablerepo=webtatic install php

これでPHP5.3系の環境を簡単に作ることができます。

全角カナから半角カナへの変換

nkfにオプションに-Z4を付けることで、全角カナから半角カナへの変換ができます。
アドレス帳のインポート・変換に必要だったので助かりました。

# nkf --help
Z[0-4] Default/0: Convert JISX0208 Alphabet to ASCII
1: Kankaku to one space 2: to two spaces 3: HTML Entity
4: JISX0208 Katakana to JISX0201 Katakana

韓国出張レポ

忙しくってだいぶ日が経ってしまったのですが、今月上旬の韓国出張レポートを。

Wibro Egg(ワイブロエッグ)

最近は通信手段の確保に、Wibro Egg(ワイブロエッグ)というのをインチョン空港でレンタルするようにしています。
お値段は1日8000ウォン(600円くらい)。日本でいうWiMax端末です。
同時に3台までのPC・スマホが使えるので、同行者も一緒に使えちゃいます。

肝心のエリアなんですが、ソウル市内はほぼ完璧。日本のように地下がイマイチ..とかありません。
ホテルのWifiなんかよりも高速なので、これはオススメのアイテムです。

美味しいワイン漬けのサムギョプサル

この日は韓国で55年ぶりの寒さを記録したらしく、さらに日も暮れた時間だったので、逆に笑ってしまうくらいの寒さでした。

初日は同僚の案内で、「真真」という人気の焼肉屋さんへ。

店内には芸能人のサイン色紙がこれでもかというくらい飾られており、お肉は期待以上の旨さ。
どこのお店でもそうですが、お店の方が焼いてくれ、食べやすい大きさに切ってくれるのが嬉しいです。


サービスでキムチのチヂミも頂きました。

帰り道でのカフェでチョコレートドリンクを。移動の疲れを癒します。
OM N TOMS COFFEEは初入店です。
韓国は本当にカフェが多くて、しかもどの店もお洒落です。
いつも楽しませてもらっています。


とにかく食べる

軽食屋で朝ごはんなのですが、普通に韓国料理が楽しめます。
というわけで、朝からビビンバをチョイス。お昼ごはん食べれそうにありません。

といいながらも、ランチにご招待して頂き、ここでふぐとキムチの鍋を頂きました。

煮こまれたフグが入っているのですが、これを取り出して、わさび醤油またはコチュジャンをつけて食べるのだとか、、
でもその食べ方はイマイチ合わなかったので、やめておきましたw


夜はウギョプサルという牛肉の焼肉をご馳走に。

私がお肉好きという事を、しっかりとご理解頂いているので(笑)、いつも美味しいお肉をご馳走になっています。
写真には無いのですが、「ヒムチュル」という、コリコリの変わったお肉も印象的でした。

お次は先方の女性スタッフにチョイスしてもらったお店にて。


最近、チヂミの美味しさが分かってきたので、マッコリと共にしっかり堪能してきました。
今度は一軒目から来たいお店。

テジュン市へ移動

KTXという高速鉄道にのり、テジュン(大田)へ移動。

焼酎のポスターを撮影

前日はこれを飲み過ぎたなぁと....

大好物の参鶏湯(サムゲタン

テジュンの住宅街を横目に眺めつつ、

参鶏湯のお店へ。「韓国料理で何が一番好きですか?」と聞かれれば、必ずこれをいいます。

でも、韓国の人はそう頻繁には食べないみたいですね。私は毎日のように食べたいのに(笑))
鶏肉がすごく柔らかくて、ボリューム満点。美味しかった。

屋台でおやつを食す


ポンテギ...勧められて初めて口に入れてみました。
カリカリのものを想像していたのですが、口の中で「プチッ」とお汁が出た瞬間に断念です(苦)



こちらは屋台。
おでんは自由に取って食べた後、自己申告(?)で会計のようで、日本では見かけないシステムに驚きました。

ホットッっていう、揚げパンみたいな感じのもの。

これ、1つ70円くらいで買えるんですが、超美味しい。子供も大人もイケるおやつです。

インチョン空港のレストラン街

帰りは午前中のフライトなので、レストランも朝食メニューの時間帯です。
逆にお値段手頃なメニューになるので、時間に余裕があるときはシメの韓国料理を食べるようにしています。

これは「ウゴジカルビタン」。白菜や大根の葉の部分だけを入れた鍋料理です。
野菜がすごく美味しくて、ハマりそうな予感。


相変わらず、食べまくりの韓国出張でした。いじょ。

韓国に到着

今日は仙台も大変な雪でした。

さて、出張で韓国に来ました。

まだ仙台とソウルは週に三回だけの運行です。
早く毎日運行に戻って欲しいですね。

まあでも、そういう制約から何か楽しい事があったりするので、楽しんで来たいと思います。

というわけでまずは、最近になってハマってきたサムギョプサル行って来ます!
正確には連れていってもらいます。ハズレなしw

沢山食べて、明日からの仕事頑張ろ。
リムジンバスにて。

震災からもうすぐで11ヶ月

今年の冬は昨年以上に寒いです@仙台。

河北新報 東北のニュース/仮設住宅で水道管凍結続出 宮城県、緊急工事実施

1/31 気象庁によると、北日本の上空に氷点下42度以下の寒気が流れ込んでいる状況。
仮設住宅に住んでいる方には、本当に厳しい冬です。

寒気が北日本に流れ込んだ影響で厳しい冷え込みが続き、東日本大震災の被災地では、応急仮設住宅で水道管の凍結が相次いでいる。宮城県は今週後半にも、県が発注した全2万1572戸を対象に凍結防止のための緊急工事を始める。

河北新報 東北のニュース/宮城県、放射能被害対策の基本方針を決定 

1/31、福島第1原発事故対策本部会議の第2回会合

基本方針は除染の徹底を最優先事項に掲げ「今後5年以内に、追加被ばく線量を年間1ミリシーベルト以下にする」との目標を設定した。国から「汚染状況重点調査地域」に指定された県内8市町を中心に、対策を進めることを申し合わせた。

村井嘉浩知事は「県民の力を結集し、一歩ずつ進みながら安全な県土をつくりたい」と話した。

「汚染状況重点調査地域」は環境省から発表されています。
環境省 報道発表資料−平成23年12月19日−放射性物質汚染対処特措法に基づく汚染廃棄物対策地域、除染特別地域及び汚染状況重点調査地域の指定について(お知らせ)

宮城県の8市町は以下の通りで、放射線量が1時間当たり0.23マイクロシーベルト以上の地域を対象としているようです。

石巻市白石市角田市栗原市、七ヶ宿町、大河原町丸森町及び山元町の全域

この0.23マイクロシーベルト毎時の算出根拠は、追加被ばく線量が年間1ミリシーベルトにあたる放射線量との事。

出張多いです。

年明けてから、東京だけでなく福岡へも出張。
福岡へは人生、初上陸でした。それこそ、九州へは宮崎県以来、20年振り2度目という...
バタバタの1泊2日でしたが、博多駅界隈を案内して頂きました。とんこつラーメンも美味しかった。



今週は明日から韓国。1月の韓国は間違いなく寒いのですが、頑張ってきます。
毎回食事も楽しみで、出発前は食事をセーブしてから行く価値ありますよ(笑)