実体験から理由がわかります。
floatingdays: 電車の乗り換え案内のWebサービス API
流行らない理由は、単純に導入にかかる費用と改良、保守費用が半端なくかかるから。
費用が半端なくかかるので、Developerがちょっとした趣味でAPIをたたくことができない。
googleの各種APIのように、フリーで使えるようになれば、このジャンルもドンドン発展してくると思うんだけど。
RailGoにいたっては、Restful APIをサポートしおらずSOAP APIだから、PHPユーザーが参入しずらくなってしまっているし。
googleがトランジットをサポートした時に思ったのは、トランジットのAPIがでてきてほしいなーっと真っ先に思いました。
(と言っても、海外ではどうやらあるみたいなのですが。)
今後のことも考えて、やはりYahooかgoogleにRest APIかつフリーで提供してほしいなーっと。
2010/03/06
[SOAP]電車の乗り換え案内のWebサービス APIが流行らない理由
2008/08/29
[java][SOAP]DOSでクライアントのjavaバージョンの確認
axis2は、JDKのバージョンが1.4以上でないと動かないみたいです。
Java Development Kit (JDK)
via:System Requirements
1.4 or later
ということで、クライアントにインストールされているjavaのバージョンの確認方法を調べてみると、、、
コマンドラインを開いて、コマンド "java -version" を入力して Enter ボタンを押下してください。
via:Java 環境のセットアップ
と書いてありました。
さっそく試しました。

oh-、でたー♪
2008/07/19
[coldfusion][SOAP]駅情報を取得
一昨日の記事に続いて、今日は、RailGoの駅情報を取得するSearchStationのコール方法を書きたいと思います。
<cfsetting enableCFoutputOnly="yes"> <cfprocessingdirective pageEncoding="utf-8" /> <cfsetting showdebugoutput="no"> <cfscript> //webサービスのオブジェクトを生成(axis上でjavaオブジェクトを生成) ws = createobject("webservice","http://wstest.railgo.jp/Expservice06.asmx?WSDL"); //セッションの維持をする ws.setMaintainSession(true); //SOAPリクエスト時にヘッダーに情報を追加する addSOAPRequestHeader(ws,"http://expart.est.co.jp/ExpService","User","mctuser4"); addSOAPRequestHeader(ws,"http://expart.est.co.jp/ExpService","Password","hnnt4zt2"); //SearchStationの呼び出し Station_Info = ws.SearchStation(StationYomi="駅名前方一致", AreaType="Japan", StationType="RailRoad" ,Date=javacast("int",日付(数字型))); </cfscript> <cfoutput> var data = {}; data = { <cfloop index="i" from="1" to="#ArrayLen(Station_Info.Station)#"> <cfif i neq 1>,</cfif> #i#:[ "#Station_Info.Station[i].Name#" , "#Station_Info.Station[i].LongName#" , "#Station_Info.Station[i].Yomi#" , "#Station_Info.Station[i].Latitude.bearing#" , "#Station_Info.Station[i].Latitude.degree#" , "#Station_Info.Station[i].Latitude.minutes#" , "#Station_Info.Station[i].Latitude.second#" , "#Station_Info.Station[i].Longitude.bearing#" , "#Station_Info.Station[i].Longitude.degree#" , "#Station_Info.Station[i].Longitude.minutes#" , "#Station_Info.Station[i].Longitude.second#" ] </cfloop> } |
レスポンスは、JSON形式で表現
駅名に関して、前方一致なので、例えば「赤坂」という名前の付く駅名を検索したい場合、「?赤坂」と検索すればオッケー。
2008/07/17
[ColdFusion][SOAP]RailGoのポイント数を取得
RailGoというSOAPを使った経路検索サービスがあって、その中で、ポイントを取得するサービスがあるのですが、今日は、その呼び出し方を書きたいと思います。
ずばり、下のように実装しました。
<cfsetting enableCFoutputOnly="yes"> <cfprocessingdirective pageEncoding="utf-8" /> <cfsetting showdebugoutput="no"> <cfscript> //プロキシの設定を行う jo = createobject("java","java.lang.System"); jo.setProperty("http.proxyHost", "プロキシサーバーのURL"); jo.setProperty("http.proxyPort", "ポート番号"); //webサービスのオブジェクトを生成(axis上でjavaオブジェクトを生成) ws = createobject("webservice","http://wstest.railgo.jp/Expservice06.asmx?WSDL"); //セッションの維持をする ws.setMaintainSession(true); //SOAPリクエスト時にヘッダーに情報を追加する addSOAPRequestHeader(ws,"http://expart.est.co.jp/ExpService","User","取得したUserID"); addSOAPRequestHeader(ws,"http://expart.est.co.jp/ExpService","Password","取得したPassword"); //対象となる日付を生成 date = CreateDate("任意の年","任意の月","1"); //GetUserPointsの呼び出し ret = ws.GetUserPoints(Date=date); </cfscript> <!--- ポイント数の表示 ---> <cfoutput>#ret#</cfoutput> |
ここで、重要なのは、Headerにパスワードと、ユーザーIDを求めているので、リクエスト前に、addSOAPRequestHeaderを使ってパラメータを設定するところ。
後は、xmlから各パラメータの定義を見れば、ポイントを取得することが可能になります。
これさえ、あれば、一体どれだけ、ポイントを使ったのかがわかるので便利かなと。
2008/07/16
[coldfusion][soap]UnsignedByteに対応するには
GeOAPに記載されている、メソッドを使うのに、引数にunsignedByte型を必要とするものがありました。(StraightDistanceOfAdrToStationメソッドなど)
ここで問題になるのは、ColdFusionには、unsignedByteという型が存在しないということ。
なので、unsignedByte型を引数にとるメソッドは呼び出せないのかなと思うのですが、前にも書いたように、ColdFusionは、Javaで実装されているので、おそらくできるだろうと予想。
案の定、ぐぐってみると、UnsignedByte型は、javaのshort型変数に対応していると、ここに書かれていました。
上の記事は、internet.comの記事なのですが、axisのサイトを見てみると、UnsignedByte型は、javaのlong型に対応していると書かれていました。
というわけで、ColdFusionで、UnsignedByte型を引数に取るメソッドを呼び出したい場合、
<cfscript> //webserviceの呼び出しと共にオブジェクトを生成 ws = CreateObject("webservice","呼び出し先のurl"); //Longクラスをコール jo = createobject("java","java.lang.Long"); //引数をLong型にデコード jo = jo.decode("数字"); //UnsignedByteクラスをコール ju = createobject("java","org.apache.axis.types.UnsignedByte"); //Long型のjoをUnsignedByte型に変換しオブジェクト(ju)にセット ju.setValue(jo); //メソッドをコール ret = ws.メソッド(UnsignedByte型の引数 = ju); </cfscript> |
という流れでいけると思います。
これで、引数の型が、UnsignedByte型でも怖くないぞと。
うーん、時間があったら、ここのサービスの使い方とかも書いてもいいかもなー。
2008/07/09
[IT用語]Apache Axisって、そもそも何?
昨日、SOAPを使ってデータの取得ができたのですが、実は、SOAP自体を完璧に把握していなくて、調べていたらなにやら、Apache Axisというのがあるみたいです。
Apache Axisが何かなと思いぐぐってみると、
WebServices - Axis
Axis は本質的には SOAP エンジン -- クライアント、サーバ、ゲートウェイなどの SOAP 処理装置を構築するためのフレームワークです。
via:Axis とは何ですか?
というわけで、Javaでできたワークフレームだったんですね。
ワークフレームということは、共通ファンクションが備わっていたり、ツールがあったりと便利なわけで、ワークフレームを使えばもっと色々なことができそうかなーと思ったりしました。
2008/07/08
[coldfusion]SOAP通信できた!!
昨日、Bugle Diary: [coldfusion]ひょっとしたらという記事で、webサービスを使えるかもしれないということを書いたのですが、なんと、なんと、SOAP通信ができたのです。(マジ超うれしい♪)
geoapという、ある特定の住所(自宅住所や会社のある場所)の最寄り駅をSOAPを使って取得できるサービスがあるのですが、呼び出せるかどうか、チャレンジ。
まずは、体験認証キーをゲット!!
SOAPといっても、httpのgetリクエストをしていることと同じなので、CreateObjectを使って通信をすることにしました。
<cfscript> ws = CreateObject("webservice","http://dev.geoap.jp/geoap_trial/geoap_trial.asmx?wsdl"); ret = ws.UserCertification(UserKey="体験認証キー",Password="hoge"); writeouput(ret); //「正常終了」を返す。 ret = ws.MapOfAdrAndScale(Address="住所", Scale=2000); writeoutput(ret.StatusMsg); //「ユーザ認証を行ってください。」を返す。 </cfscript> |
ここまで難なく書けたのですが、MapOfAdrAndScaleが正常に終了しているかどうか、返り値を出力したところ、「ユーザ認証を行ってください。」というメッセージが登場して、異常終了してしまいました。
「う~ん、なぜだろー。。。 orz」
結論からいうと、毎回、毎回、メソッドのたびに違うセッションで取りに行ってしまうため、前に認証をしても認証情報が残っていないため意味がないということがわかりました。
で、どーすれば、セッションを確保できるのかなーとぐぐっていたら、ナイスな答えがありました。
ws.setMaintainSession(true); // required so axis will do cookies
via:How to set Cookies in ColdFusion SOAP requests
この記事によると、CreateObjectで、webserviceを使った場合、できたオブジェクトは、org.apache.axis.client.Stubクラスとして扱うことができるということなんですね。
なので、セッションを保持したい場合は、上のソースを追加すればオッケーということなんだなー。
以上を踏まえて、ソースはこのようになります。
<cfscript> ws = CreateObject("webservice","http://dev.geoap.jp/geoap_trial/geoap_trial.asmx?wsdl"); ws.setMaintainSession(true); ret = ws.UserCertification(UserKey="体験認証キー",Password="hoge"); ret = ws.MapOfAdrAndScale(Address="住所", Scale=2000); </cfscript> |
これを実行してみると、無事に、リターン値を取得することができました。
今回のポイントとしては、セッションを保持したい場合は、CreateObjectでwebserviceを使った後、セッションを保持する「オブジェクト名.setMaintainSession(true)」がいるということなんですね。
2008/07/07
[coldfusion]ひょっとしたら
今、ヘテムルで、cfhttpを使って、getリクエストを要求したら、200が返ってきたので、ひょっとしたら、getやpostはできるのかもしれません。
ということは、ということは、SOAP通信もできるのかもー。
webサービスが禁止事項となっていたのは、「webサービスを使った情報の取得」ではなくて、「webサービスを使ったデータの配信」なのかもしれません。
もうちょい深く検証する必要がありそうです。