-
Notifications
You must be signed in to change notification settings - Fork 0
/
KawaiiClient.cs
56 lines (50 loc) · 1.97 KB
/
KawaiiClient.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
using KawaiiAPI.NET.Enums;
using System.Security.Authentication;
using System.Text.Json;
namespace KawaiiAPI.NET
{
public class KawaiiClient
{
private readonly HttpClient _httpClient;
private const string _baseUrl = "https://kawaii.red/api/gif/";
private readonly string _token;
/// <summary>
/// Initializes a new instance of the <see cref="KawaiiClient"/> class.
/// If no token is provided, the client will use the anonymous token.
/// </summary>
public KawaiiClient(string token = "anonymous")
{
_httpClient = new HttpClient
{
BaseAddress = new Uri(_baseUrl)
};
_token = token;
}
/// <summary>
/// Returns a random GIF URL from the specified endpoint.
/// </summary>
/// <exception cref="AuthenticationException">Throws when a invalid Auth Token is provided.</exception>
public async Task<string> GetRandomGifAsync(KawaiiGifType type)
{
HttpResponseMessage? response = await _httpClient.GetAsync($"{type}?token={_token}");
response.EnsureSuccessStatusCode();
string jsonResponse = await response.Content.ReadAsStringAsync();
using JsonDocument document = JsonDocument.Parse(jsonResponse);
if (document.RootElement.TryGetProperty("error", out JsonElement errorResponse))
{
if (errorResponse.GetString().Contains("Invalid authentication token!"))
{
throw new AuthenticationException(errorResponse.GetString());
}
}
if (document.RootElement.TryGetProperty("response", out JsonElement responseElement))
{
return responseElement.GetString();
}
else
{
throw new JsonException("Invalid JSON response. Missing 'response' property.");
}
}
}
}