C++Builderで使うCloud API「駅情報」「路線情報」「会社情報」(駅すぱあとWebサービス) [JAPAN]

Posted by on in Programming

C++Builder を使い、駅すぱあとWebサービス(クラウド型API)を利用し

「駅情報」「路線情報」「会社情報」などの情報をRESTで取得する事が可能です。

今回テストしたデバイスはWindows(64Bit)とiOS10.1です。

 

[駅すぱあとWebサービス]

駅すぱあとWebサービスAPIを利用するには、ユーザー登録が必要です。

「駅情報」や「路線情報」のサービスに関しては無料のフリープランで商用利用可能ですので

まずフリープランの登録を行いました。

https://ekiworld.net/

上記サイトにアクセスし登録を行うとメールが送られてきます。

メールにはアクセスキー、ご登録ドメイン、ドキュメント(リファレンスマニュアル)が書かれています。

その中のアクセスキーが重要で このアクセスキーを使い各APIにアクセスできるようになります。

 

[駅すぱあとWebサービスフリープランで利用できるサービス]

上記のようなサービスです。

std::mapを使い エンドポイント一覧情報をもたせました。

////
enum TEki_apis_ {info, corporation, search_course_light, rail, line, station, station_light};
	std::map FEndPoint{
		{TEki_apis_::info, 					"/station/info"},
		{TEki_apis_::corporation, 			"/corporation"},
		{TEki_apis_::search_course_light, 	"/search/course/light"},
		{TEki_apis_::rail, 					"/rail"},
		{TEki_apis_::line, 					"/line"},
		{TEki_apis_::station, 				"/station"},
		{TEki_apis_::station_light, 	   	"/station/light"}};

 [TRESTClientを使いクラウドAPI接続](code example)

TRESTClient、TRESTRequestを使い駅すぱあとWebサービスの各APIに接続しJSONを取得します

////
void __fastcall TEki_Api::UpdateExcect()
{

	UnicodeString sUrl = FstBaseURL + FstEndPoint + "?key=" + FstEkiKey + CreateParameters(FEkiApis);
	TThread::CreateAnonymousThread([this, sUrl](){
		std::unique_ptr cl1{/*std::make_unique(*/new TRESTClient(nullptr)};		// TRESTClient* cl1 	= new TRESTClient(nullptr);
		std::unique_ptr re1{/*std::make_unique(*/new TRESTRequest(nullptr)};	//TRESTRequest* re1 	= new TRESTRequest(nullptr);
		re1->Client = cl1.get();
		TJSONValue* jo{nullptr};
		cl1->BaseURL = sUrl;

		try{
			re1->Execute();
			jo = re1->Response->JSONValue;
		}
		catch(Exception& e1){}

		TThread::Synchronize(TThread::CurrentThread, [&](){
			http_json_out(jo);
		});

	})->Start();
}

 

[駅すぱあとWebサービス JSON](code example)

各API仕様を元にJSON情報を取得します

void __fastcall TForm1::DoEditStation(TObject *Sender)
{
	UnicodeString s_js_function_;
	unsigned int iMaxRecord{0};
	if (!(Sender == nullptr)) {
		TJSONObject* jv 	= static_cast(Sender);
		String a = (static_cast( jv->GetValue("ResultSet") ))->ToString();
		TJSONObject* jv2 	= static_cast( jv->GetValue("ResultSet") );
		Memo1->Lines->Append("max=" + static_cast(jv2->GetValue("max") )->Value());
		iMaxRecord          = StrToIntDef(static_cast(jv2->GetValue("max") )->Value(), 0);
		TJSONArray*  jv3    = static_cast( jv2->GetValue("Point") );
		TJSONObject*  jv4;
		TJSONObject*  jv5;
		TJSONObject*  jvGeoPoint_;
		ListView1->BeginUpdate();
		switch (iMaxRecord) {
		case 0:
			break;
		case 1:
			jv4 = static_cast( jv2->GetValue("Point") );
			jv5 = static_cast( jv4->GetValue("Station") );
			jvGeoPoint_ = static_cast( jv4->GetValue("GeoPoint") );
			s_js_function_ = Format("toNearest(%s, %s)", ARRAYOFCONST((
				jvGeoPoint_->GetValue("lati_d")->ToString(),
				jvGeoPoint_->GetValue("longi_d")->ToString() )));
			StationItemAdd(jv5, s_js_function_);
			break;
		default:
			for (int i=0; i Count; i++){
				jv4 = static_cast(jv3->Get(i));
				jv5 = static_cast( jv4->GetValue("Station") );
				jvGeoPoint_ = static_cast( jv4->GetValue("GeoPoint") );
				s_js_function_ = Format("toNearest(%s, %s)", ARRAYOFCONST((
					jvGeoPoint_->GetValue("lati_d")->ToString(),
					jvGeoPoint_->GetValue("longi_d")->ToString())));
				StationItemAdd(jv5, s_js_function_);
			}
		}
		ListView1->EndUpdate();
		ListView1->Visible      = true;
		ListView1->Width        = FselEdit->Width;
		ListView1->Position->X 	= FselEdit->Position->X;
		ListView1->Position->Y 	= FselEdit->Position->Y + FselEdit->Height;
		if (iMaxRecord > 0)
		{
			ListView1->ScrollTo(0);
		}
	}
}

 

[駅すぱあと路線図フリープラン]

駅すぱあと路線図を使うにはまた別の申し込みが必要です

これも同じく申し込み後メールでアクセスキーが送られてきます。

「Rosen JS」 と言うJavaScriptで作られた地図機能APIが提供されます。

C++Builder iOSのTLocationSensorを用いて緯度経度を取得しその情報を使い、

TWebBrowser(ブラウザ)からJSの関数EvaluateJavaScript()でキックすることにしました。

 

 

[docomo Developer]

docomoサービスでも「交通検索API【Powered by 駅すぱあと】」が追加されました。

https://dev.smt.docomo.ne.jp/?p=docs.api.page&api_name=transportation_search&p_name=api_usage_scenario

利用ユーザーはdocomo idが必要ですが 駅すぱあとのサービスAPIを利用できます

 

 

 



About
Gold User, No rank,
Delphi / C++Builder blogger

Comments

Check out more tips and tricks in this development video: