為替レートをJSON-RPCで取得するサンプル
jijiで収集された為替レートを再利用するには、CSVファイルに保存されたデータを利用するほか、jijiが提供するJSON-RPCインターフェイスを利用して取得することもできます。
具体的には、以下のような本文を、「http://
{"method":"list", "params":["<通貨ペア>","<4本値>",<開始日時>,<終了日時>]}
- 通貨ペアは「EURJPY」「AUGJPY」などの文字列で指定します。
- 4本値は「"1m", "5m", "10m", "30m", "1h", "6h", "1d", "2d", "5d"」のいずれかが指定可能。
- 期間(開始日時,終了日時)は、1970-01-01からの経過秒数で指定します。(ミリ秒ではないのでご注意)
レスポンスとして、レートデータを配列で含むjsonデータが返されてきます。※実際には改行されていません。
[{"error":null, "result":[ [127.28,127.6,127.63,127.04,1238421600,1238425200], [127.58,128.07,128.08,127.31,1238425200,1238428800], [127.99,128.23,128.3,127.9,1238428800,1238432400], [128.24,127.63,128.29,127.55,1238432400,1238436000], [127.64,127.76,127.89,127.58,1238436000,1238439600], [127.75,128.29,128.29,127.75,1238439600,1238443200], [128.33,128.34,128.35,128.15,1238443200,1238446800], .. 省略 ]}]
rubyで取得するサンプル
rubyで接続してデータを取得するサンプルを書いてみました。デモサイトに接続して、2009-4-1の1時間足を取得します。
#!/usr/bin/ruby -- require "rubygems" require "cgi" require 'httpclient' require "json/lexer" require "json/objects" # クライアント class JsonRpcRequestor def initialize( name, host="http://localhost:8080", proxy=nil ) @client = HTTPClient.new( proxy, "JsonClientLib") @client.set_cookie_store("cookie.dat") @name = name @host = host end def method_missing( name, *args ) body = CGI.escape("{\"method\":#{name.to_s},\"params\":#{args.to_json}}") result = @client.post("#{@host}/json/#{@name}", body ) json = JSON::Lexer.new(result.content).nextvalue[0] if json["error"] raise json["error"] else json["result"] end end end time = Time.local(2009, 4, 1).to_i client = JsonRpcRequestor.new("rate", "http://unageanu.homeip.net/jiji-demo") client.list( "EURJPY", "1h", time-24*60*60, time ).each {|rate| p rate }
実行結果です。
[127.28, 127.6, 127.63, 127.04, 1238421600, 1238425200] [127.58, 128.07, 128.08, 127.31, 1238425200, 1238428800] [127.99, 128.23, 128.3, 127.9, 1238428800, 1238432400] [128.24, 127.63, 128.29, 127.55, 1238432400, 1238436000] [127.64, 127.76, 127.89, 127.58, 1238436000, 1238439600] [127.75, 128.29, 128.29, 127.75, 1238439600, 1238443200] [128.33, 128.34, 128.35, 128.15, 1238443200, 1238446800] [128.34, 128.64, 128.66, 128.34, 1238446800, 1238450400] [128.64, 128.45, 128.91, 128.34, 1238450400, 1238454000] [128.46, 128.45, 128.57, 128.23, 1238454000, 1238457600] [128.48, 129.42, 129.71, 128.4, 1238457600, 1238461200] [129.39, 129.97, 130.03, 129.39, 1238461200, 1238464800] [129.95, 129.95, 130.1, 129.75, 1238464800, 1238468400] [129.95, 130.33, 130.63, 129.77, 1238468400, 1238472000] [130.33, 130.01, 130.33, 129.72, 1238472000, 1238475600] [130.0, 129.52, 130.06, 129.36, 1238475600, 1238479200] [129.5, 130.11, 130.53, 129.45, 1238479200, 1238482800] [130.11, 130.48, 130.53, 129.79, 1238482800, 1238486400] [130.48, 130.43, 130.77, 130.36, 1238486400, 1238490000] [130.42, 130.73, 130.84, 130.35, 1238490000, 1238493600] [130.72, 131.18, 131.26, 130.6, 1238493600, 1238497200] [131.18, 130.96, 131.55, 130.9, 1238497200, 1238500800] [131.01, 131.34, 131.34, 131.0, 1238500800, 1238504400] [131.34, 131.34, 131.34, 131.34, 1238504400, 1238508000] [131.34, 131.07, 131.34, 130.69, 1238508000, 1238511600]
ちなみに
jijiでは、このインターフェイスを利用してレートデータを取得し、ローソク足チャートの表示を行っています。というか、サーバーのすべての機能はJSON-RPCで呼び出せるWebサービスになっていて、UIではJavaScriptなどでそれを呼び出しています。
サーバーサイドの実装は、RubyクラスをJSONでアクセスできるWebサービス化するで書いたやつです。また、JavaScriptとActionScript版のクライアントは、JSONBrokerのJavaScriptクライアントを書いたとJSONBrokerのActionScript版クライアントを書いたにあります。