using Newtonsoft.Json.Linq;
using System.Collections.Generic;
public ApiClient(string myToken, bool debugFlag = false) {
baseUrl = "http://91.240.86.250:8000/";
public ApiResult call(string method, Dictionary<string, dynamic> paramList) {
var builder = new UriBuilder(this.baseUrl);
builder.Path = "/api/" + this.version + "/" + method;
var query = HttpUtility.ParseQueryString(builder.Query);
query["token"] = this.token;
foreach(KeyValuePair<string, dynamic> pair in paramList) {
if(pair.Value.GetType() == typeof(System.Collections.Generic.List<string>)) {
for(multiValIndex = 0; multiValIndex < pair.Value.Count; multiValIndex ++) {
query.Add( pair.Key + "[]", pair.Value[multiValIndex]);
query[ pair.Key ] = pair.Value;
builder.Query = query.ToString();
string url = builder.ToString();
using (var webClient = new System.Net.WebClient()) {
webClient.Encoding = System.Text.Encoding.UTF8;
jsonString = webClient.DownloadString(url);
var debugJsonString = jsonString;
Console.WriteLine(debugJsonString);
JsonTextReader reader = new JsonTextReader(new StringReader(debugJsonString));
if (reader.Value != null)
Console.WriteLine("Token: {0}, Value: {1}", reader.TokenType, reader.Value);
Console.WriteLine("Token: {0}", reader.TokenType);
ApiResult result = new ApiResult( jsonString, method );
ApiResult errorResult = new ApiResult("", method);
errorResult.ErrorMessage = e.ToString();
public string ErrorMessage {
public ApiResult(string jsonString, string method) {
string arrayKey = method + "_result";
if(jsonString.Length > 0) {
JObject result = JObject.Parse(jsonString);
Console.WriteLine(result[arrayKey]["ErrorMessage"]);
this.Data = result[arrayKey]["Data"];
this.ErrorMessage = "Empty result returned from API";
public static void Main()
string myToken = "tutorial_token";
ApiClient client = new ApiClient( myToken , false );
Dictionary<string, dynamic> paramList = new Dictionary<string, dynamic>()
{"region" , new List<string> {"16","17","18","22","28"} },
{"company" , new List<string> {"17","18","19"}},
{"departure_port" , new List<string> {"1624","1614","57"}},
{"ship" , new List<string> {"54","192"}},
{"date_start_from","2016-09-04"},
{"date_start_to","2018-01-01"},
ApiResult result = client.call( "get_cruise_list", paramList );
if(result.ErrorMessage.Length > 0) {
Console.WriteLine("Error occured: " + result.ErrorMessage);
Console.WriteLine("Cruise list:");
JArray items = (JArray)data;
for(var i=0; i<items.Count; i++ ) {
ports = (string) items[i]["ports"];
cruise_id = (int) items[i]["cruise_id"];
Console.WriteLine(ports+", cruise_id=" + cruise_id);
JArray prices = (JArray) items[i]["prices"];
for(var j=0; j<prices.Count; j++ ){
date_start = (string)prices[j]["date_start"];
ship_cabin_type_id = (int)prices[j]["ship_cabin_type_id"];
price_rub = (double)prices[j]["price_rub"];
Console.WriteLine(date_start +", ship_cabin_type_id=" + ship_cabin_type_id + ", price in rub=" + price_rub);
paramList = new Dictionary<string, dynamic>()
result = client.call( "get_dict_list", paramList );
if(result.ErrorMessage.Length > 0) {
Console.WriteLine("Error occured: " + result.ErrorMessage);
Console.WriteLine("Available dictionary list:");
JArray items = (JArray)data;
for(var i=0; i<items.Count; i++ ) {
dict_name = (string) items[i];
Console.WriteLine(dict_name);
paramList = new Dictionary<string, dynamic>()
result = client.call( "get_dict", paramList );
if(result.ErrorMessage.Length > 0) {
Console.WriteLine("Error occured: " + result.ErrorMessage);
Console.WriteLine("Dict port:");
JArray items = (JArray)data;
for(var i=0; i<items.Count; i++ ) {
port_name = (string) items[i]["name"];
port_id = (int) items[i]["port_id"];
country_id = (int) items[i]["country_id"];
Console.WriteLine(port_name+", id=" + port_id + ", country=" + country_id);