-
Notifications
You must be signed in to change notification settings - Fork 482
/
WBCategory.cs
116 lines (94 loc) · 4.1 KB
/
WBCategory.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
namespace CSharpExamples
{
class WBCategory
{
/// <summary>
/// Store the client key to be used through the program
/// </summary>
static string _clientKey = "guest:guest";
static void Main(string[] args)
{
// set the client key
Console.WriteLine("Provide a API key; otherwise, press ENTER to use the default test key...");
string k = Console.ReadLine();
if (!string.IsNullOrWhiteSpace(k))
_clientKey = k;
// get world bank categories
Console.WriteLine("\n**********Get world bank categories**********");
var getWB = GetWB().Result;
Console.WriteLine(getWB);
// Filtering by category
Console.WriteLine("\n**********Get WB by category**********");
var getWBCategory = GetWBCategory( "Education" ).Result;
Console.WriteLine(getWBCategory);
// Filtering by the category and page number
Console.WriteLine("\n**********Get WB by category and page number**********");
var getWBCategoryPage = GetWBCategoryPage("Education", 4).Result;
Console.WriteLine(getWBCategoryPage);
Console.ReadLine();
}
/// <summary>
/// get main categories
/// </summary>
/// <returns>A task that will be resolved in a string with the request result</returns>
public async static Task<string> GetWB()
{
return await HttpRequester("/worldBank/categories");
}
/// <summary>
/// Filter by category
/// </summary>
/// <param name="category">category</param>
/// <returns>A task that will be resolved in a string with the request result</returns>
public async static Task<string> GetWBCategory(string category)
{
return await HttpRequester($"/worldBank/category/{category}");
}
/// <summary>
/// Get WB by category and page number
/// </summary>
/// <param name="category">category</param>
/// <param name="page_number">pagination</param>
/// <returns>A task that will be resolved in a string with the request result</returns>
public async static Task<string> GetWBCategoryPage(string category, int page_number)
{
return await HttpRequester($"/worldBank/category/{category}/{page_number}");
}
/// <summary>
/// Method to make HTTP calls to TradingEconomics API
/// </summary>
/// <param name="url">The URL to fetch</param>
/// <param name="baseURL">The base path, the default is 'https://api.tradingeconomics.com/'</param>
/// <returns>A task tha will be resolved in a string with the content of the response</returns>
public async static Task<string> HttpRequester(string url, string baseURL = "https://api.tradingeconomics.com/")
{
try
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(baseURL);
client.DefaultRequestHeaders.Clear();
//ADD Acept Header to tell the server what data type you want
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));
//ADD Authorization
AuthenticationHeaderValue auth = new AuthenticationHeaderValue("Client", _clientKey);
client.DefaultRequestHeaders.Authorization = auth;
HttpResponseMessage response = await client.GetAsync(url);
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsStringAsync();
}
}
catch (Exception e)
{
return $"Error at HttpRequester with msg: {e}";
}
}
}
}