Skip to content

Commit 47764be

Browse files
author
Hariharan Subramanian
committed
Code base improvements
1 parent 6cfeb64 commit 47764be

14 files changed

+318
-143
lines changed

README.md

+28-2
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,10 @@
1414
Created by Hari Haran
1515
- [StackExchange.NET](#stackexchangenet)
1616
- [Overview](#overview)
17-
- [Contributers](#contributers)
17+
- [Contributors](#contributors)
1818
- [Usage](#usage)
1919
- [Parameter Filters](#parameter-filters)
20+
- [ChangeLogs](#changelogs)
2021

2122
## Overview
2223
StackExchange.NET is a .NET Standard managed library that provides easy access to the StackExchange APi's with virtually no boilerplate code required.
@@ -59,4 +60,29 @@ There are different types of parameter filter objects available. Each `Parent Me
5960
- CommentFilter
6061
- PostFilter
6162

62-
More to be added soon...
63+
## ChangeLogs
64+
## Verison 1.1
65+
- Improved overall code quality using Fluent API Url Builders
66+
- Removed all Hardcoded API URL's
67+
- More Clean code
68+
69+
# Before V.0 (Initial commit)
70+
71+
var apiParams = filters.GetQueryParams();
72+
var url = $"{_baseApiUrl}/answers?key={_apiKey}&{apiParams}";
73+
var response = _httpClient.GetAsync(url).Result.Content.ReadAsStringAsync().Result;
74+
var apiResult = response.DeserializeJson<Data<Answer>>().ValidateApiResponse();
75+
return apiResult;
76+
77+
# After V1.1
78+
79+
var url = ApiUrlBuilder
80+
.Initialize(_apiKey)
81+
.ForClient(ClientType.Answers)
82+
.WithFilter(filters)
83+
.GetApiUrl();
84+
var response = _httpClient.GetAsync(url).Result
85+
.ReadAsJsonAsync<Data<Answer>>()
86+
.ValidateApiResponse();
87+
return response;
88+

Sample/StackExchange.NET_Example/Program.cs

+12-12
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@ class Program
1010
{
1111
static void Main(string[] args)
1212
{
13-
var client = new StackExchangeClient("U4DMV*8nvpm3EOpvf69Rxw((");
13+
var client = new StackExchangeClient("yourApiKey");
1414
var queryString = new AnswerFilters()
1515
{
1616
PageSize = 1,
1717
Page = 1,
1818
Sort = Sort.Votes
1919
};
20-
//var answers = client.Answers.GetAllAnswers(queryString);
20+
// var answers = client.Answers.GetAllAnswers(queryString);
2121
var ids = new List<string>()
2222
{
2323
"44164379","6841479"
@@ -36,11 +36,11 @@ static void Main(string[] args)
3636
{
3737
"4600","2600","26"
3838
};
39-
39+
//var getBadgesByIds = client.Badges.GetNonTaggedBadges(batchIds, badgeFilter);
4040
//var getBadgesByIds = client.Badges.GetBadgesByIds(batchIds, badgeFilter);
4141
//var getBadgesByIds = client.Badges.GetRecentlyAwardedBadges(badgeFilter);
42-
43-
//var getBadgesByIds = client.Badges.GetRecentlyAwardedBadgesByIds(batchIds, badgeFilter);
42+
43+
// var getBadgesByIds = client.Badges.GetRecentlyAwardedBadgesByIds(batchIds, badgeFilter);
4444

4545
//var getBadgesByIds = client.Badges.GetAllTaggedBadges(badgeFilter);
4646
//Console.WriteLine(JsonConvert.SerializeObject(getBadgesByIds));
@@ -69,19 +69,19 @@ static void Main(string[] args)
6969
"57871119", "57698255"
7070
};
7171

72-
var postsByIds = client.Posts.GetAllPostsByIds(postIds, postFilter);
72+
//var postsByIds = client.Posts.GetAllPostsByIds(postIds, postFilter);
7373

7474

7575
//var postsByIds = client.Posts.GetCommentsOnPosts(postIds, postFilter);
7676

77-
//var revisionByIds = client.Posts.GetRevisionsByIds(postIds, postFilter);
77+
// var revisionByIds = client.Posts.GetRevisionsByIds(postIds, postFilter);
7878

79-
// var suggestedEdits = client.Posts.GetSuggestedEdits(postIds, new SuggestedEditFilter()
80-
// {
81-
// Sort = Sort.Activity
82-
// });
79+
var suggestedEdits = client.Posts.GetSuggestedEdits(postIds, new SuggestedEditFilter()
80+
{
81+
Sort = PostSort.Creation
82+
});
8383

84-
//Console.WriteLine(JsonConvert.SerializeObject(suggestedEdits));
84+
Console.WriteLine(JsonConvert.SerializeObject(suggestedEdits));
8585
Console.ReadKey();
8686
}
8787
}
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
2+
<s:Boolean x:Key="/Default/UserDictionary/Words/=apikey/@EntryIndexedValue">True</s:Boolean>
23
<s:Boolean x:Key="/Default/UserDictionary/Words/=stackoverflow/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>

StackExchange.NET/StackExchange.NET/Clients/Answers.cs

+29-29
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
using System;
44
using System.Collections.Generic;
5-
using System.Web;
5+
using StackExchange.NET.Helpers;
66
using StackExchange.NET.Interfaces;
77
using StackExchange.NET.Models;
88

@@ -15,46 +15,46 @@ public partial class StackExchangeClient : IAnswers
1515
public IAnswers Answers => this;
1616
BaseResponse<Answer> IAnswers.GetAllAnswers(AnswerFilters filters)
1717
{
18-
if (filters == null)
19-
throw new ArgumentNullException($"Null is not a valid parameter");
20-
var apiParams = filters.GetQueryParams();
21-
var url = $"{_baseApiUrl}/answers?key={_apiKey}&{apiParams}";
22-
var response = _httpClient.GetAsync(url).Result.Content.ReadAsStringAsync().Result;
23-
var apiResult = response.DeserializeJson<Data<Answer>>().ValidateApiResponse();
24-
return apiResult;
18+
var url = ApiUrlBuilder
19+
.Initialize(_apiKey)
20+
.ForClient(ClientType.Answers)
21+
.WithFilter(filters)
22+
.GetApiUrl();
23+
var response = _httpClient.GetAsync(url).Result.ReadAsJsonAsync<Data<Answer>>().ValidateApiResponse();
24+
return response;
2525
}
2626

2727
BaseResponse<Answer> IAnswers.GetAnswerByIds(List<string> ids, AnswerFilters filters)
2828
{
29-
var apiParams = filters.GetQueryParams();
30-
var url = $"{_baseApiUrl}/answers/";
31-
var idsToEncode = string.Join(";", ids.ToArray());
32-
url = url + $"{HttpUtility.UrlEncode(idsToEncode)}" + $"?key={_apiKey}&{apiParams}";
33-
var response = _httpClient.GetAsync(url).Result.Content.ReadAsStringAsync().Result;
34-
var apiResult = response.DeserializeJson<Data<Answer>>().ValidateApiResponse();
35-
return apiResult;
29+
var url = ApiUrlBuilder.Initialize(_apiKey)
30+
.ForClient(ClientType.Answers)
31+
.WithFilter(filters)
32+
.WithIds(ids)
33+
.GetApiUrl();
34+
var response = _httpClient.GetAsync(url).Result.ReadAsJsonAsync<Data<Answer>>().ValidateApiResponse();
35+
return response;
3636
}
3737

3838
BaseResponse<Answer> IAnswers.GetCommentsByIds(List<string> ids, AnswerFilters filters)
3939
{
40-
var apiParams = filters.GetQueryParams();
41-
var url = $"{_baseApiUrl}/answers/";
42-
var idsToEncode = string.Join(";", ids.ToArray());
43-
url = url + $"{HttpUtility.UrlEncode(idsToEncode)}" + $"/comments?key={_apiKey}&{apiParams}";
44-
var response = _httpClient.GetAsync(url).Result.Content.ReadAsStringAsync().Result;
45-
var apiResult = response.DeserializeJson<Data<Answer>>().ValidateApiResponse();
46-
return apiResult;
40+
var url = ApiUrlBuilder.Initialize(_apiKey)
41+
.ForClient(ClientType.Answers)
42+
.WithFilter(filters)
43+
.WithIds(ids)
44+
.GetApiUrl();
45+
var response = _httpClient.GetAsync(url).Result.ReadAsJsonAsync<Data<Answer>>().ValidateApiResponse();
46+
return response;
4747
}
4848

4949
BaseResponse<Question> IAnswers.GetQuestionByAnswerIds(List<string> ids, AnswerFilters filters)
5050
{
51-
var apiParams = filters.GetQueryParams();
52-
var url = $"{_baseApiUrl}/answers/";
53-
var idsToEncode = string.Join(";", ids.ToArray());
54-
url = url + $"{HttpUtility.UrlEncode(idsToEncode)}" + $"/questions?key={_apiKey}&{apiParams}";
55-
var response = _httpClient.GetAsync(url).Result.Content.ReadAsStringAsync().Result;
56-
var apiResult = response.DeserializeJson<Data<Question>>().ValidateApiResponse();
57-
return apiResult;
51+
var url = ApiUrlBuilder.Initialize(_apiKey)
52+
.ForClient(ClientType.Answers)
53+
.WithFilter(filters)
54+
.WithIds(ids)
55+
.GetApiUrl();
56+
var response = _httpClient.GetAsync(url).Result.ReadAsJsonAsync<Data<Question>>().ValidateApiResponse();
57+
return response;
5858
}
5959

6060
void IAnswers.AcceptAnAnswer(string id, AnswerFilters filters)
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#region Using Directives
22

33
using System.Collections.Generic;
4-
using System.Web;
4+
using StackExchange.NET.Helpers;
55
using StackExchange.NET.Interfaces;
66
using StackExchange.NET.Models;
77

@@ -15,62 +15,66 @@ public partial class StackExchangeClient : IBadges
1515

1616
BaseResponse<Badge> IBadges.GetAllBadges(BadgeFilters filters, string inName)
1717
{
18-
var apiParams = filters.GetQueryParams();
19-
var url = $"{_baseApiUrl}/badges?key={_apiKey}&{apiParams}&inname={inName}";
20-
var response = _httpClient.GetAsync(url).Result.Content.ReadAsStringAsync().Result;
21-
var apiResult = response.DeserializeJson<Data<Badge>>().ValidateApiResponse();
22-
return apiResult;
18+
MakeSure.ArgumentNotNullOrEmptyString(inName, nameof(inName));
19+
var url = ApiUrlBuilder
20+
.Initialize(_apiKey)
21+
.ForClient(ClientType.Badges)
22+
.WithFilter(filters, inName)
23+
.GetApiUrl();
24+
var response = _httpClient.GetAsync(url).Result.ReadAsJsonAsync<Data<Badge>>().ValidateApiResponse();
25+
return response;
2326
}
2427

2528
BaseResponse<Badge> IBadges.GetBadgesByIds(List<string> ids, BadgeFilters filters)
2629
{
27-
var apiParams = filters.GetQueryParams();
28-
var url = $"{_baseApiUrl}/badges/";
29-
var idsToEncode = string.Join(";", ids.ToArray());
30-
url = url + $"{HttpUtility.UrlEncode(idsToEncode)}" + $"?key={_apiKey}&{apiParams}";
31-
var response = _httpClient.GetAsync(url).Result.Content.ReadAsStringAsync().Result;
32-
var apiResult = response.DeserializeJson<Data<Badge>>().ValidateApiResponse();
33-
return apiResult;
30+
var url = ApiUrlBuilder.Initialize(_apiKey)
31+
.ForClient(ClientType.Badges)
32+
.WithFilter(filters)
33+
.WithIds(ids)
34+
.GetApiUrl();
35+
var response = _httpClient.GetAsync(url).Result.ReadAsJsonAsync<Data<Badge>>().ValidateApiResponse();
36+
return response;
3437
}
3538

3639
BaseResponse<Badge> IBadges.GetNonTaggedBadges(List<string> ids, BadgeFilters filters)
3740
{
38-
var apiParams = filters.GetQueryParams();
39-
var url = $"{_baseApiUrl}/badges/name";
40-
var idsToEncode = string.Join(";", ids.ToArray());
41-
url = url + $"{HttpUtility.UrlEncode(idsToEncode)}" + $"?key={_apiKey}&{apiParams}";
42-
var response = _httpClient.GetAsync(url).Result.Content.ReadAsStringAsync().Result;
43-
var apiResult = response.DeserializeJson<Data<Badge>>().ValidateApiResponse();
44-
return apiResult;
41+
var url = ApiUrlBuilder.Initialize(_apiKey)
42+
.ForClient(ClientType.Badges, "name")
43+
.WithFilter(filters)
44+
.GetApiUrl();
45+
var response = _httpClient.GetAsync(url).Result.ReadAsJsonAsync<Data<Badge>>().ValidateApiResponse();
46+
return response;
4547
}
4648

4749
BaseResponse<Badge> IBadges.GetRecentlyAwardedBadges(BadgeFilters filters)
4850
{
49-
var apiParams = filters.GetQueryParams();
50-
var url = $"{_baseApiUrl}/badges/recipients" + $"?key={_apiKey}&{apiParams}";
51-
var response = _httpClient.GetAsync(url).Result.Content.ReadAsStringAsync().Result;
52-
var apiResult = response.DeserializeJson<Data<Badge>>().ValidateApiResponse();
53-
return apiResult;
51+
var url = ApiUrlBuilder.Initialize(_apiKey)
52+
.ForClient(ClientType.Badges, "recipients")
53+
.WithFilter(filters)
54+
.GetApiUrl();
55+
var response = _httpClient.GetAsync(url).Result.ReadAsJsonAsync<Data<Badge>>().ValidateApiResponse();
56+
return response;
5457
}
5558

5659
BaseResponse<Badge> IBadges.GetRecentlyAwardedBadgesByIds(List<string> ids, BadgeFilters filters)
5760
{
58-
var apiParams = filters.GetQueryParams();
59-
var url = $"{_baseApiUrl}/badges/";
60-
var idsToEncode = string.Join(";", ids.ToArray());
61-
url = url + $"{HttpUtility.UrlEncode(idsToEncode)}/recipients" + $"?key={_apiKey}&{apiParams}";
62-
var response = _httpClient.GetAsync(url).Result.Content.ReadAsStringAsync().Result;
63-
var apiResult = response.DeserializeJson<Data<Badge>>().ValidateApiResponse();
64-
return apiResult;
61+
var url = ApiUrlBuilder.Initialize(_apiKey)
62+
.ForClient(ClientType.Badges)
63+
.WithFilter(filters)
64+
.WithIds(ids, "recipients")
65+
.GetApiUrl();
66+
var response = _httpClient.GetAsync(url).Result.ReadAsJsonAsync<Data<Badge>>().ValidateApiResponse();
67+
return response;
6568
}
6669

6770
BaseResponse<Badge> IBadges.GetAllTaggedBadges(BadgeFilters filters, string inName)
6871
{
69-
var apiParams = filters.GetQueryParams();
70-
var url = $"{_baseApiUrl}/badges/tags" + $"?key={_apiKey}&{apiParams}";
71-
var response = _httpClient.GetAsync(url).Result.Content.ReadAsStringAsync().Result;
72-
var apiResult = response.DeserializeJson<Data<Badge>>().ValidateApiResponse();
73-
return apiResult;
72+
var url = ApiUrlBuilder.Initialize(_apiKey)
73+
.ForClient(ClientType.Badges, "tags")
74+
.WithFilter(filters, inName)
75+
.GetApiUrl();
76+
var response = _httpClient.GetAsync(url).Result.ReadAsJsonAsync<Data<Badge>>().ValidateApiResponse();
77+
return response;
7478
}
7579
}
7680
}
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#region Using Directives
22

33
using System.Collections.Generic;
4-
using System.Web;
4+
using StackExchange.NET.Helpers;
55
using StackExchange.NET.Interfaces;
66
using StackExchange.NET.Models;
77

@@ -15,22 +15,23 @@ public partial class StackExchangeClient : IComments
1515

1616
BaseResponse<Comment> IComments.GetAllComments(CommentFilter filters)
1717
{
18-
var apiParams = filters.GetQueryParams();
19-
var url = $"{_baseApiUrl}/comments?key={_apiKey}&{apiParams}";
20-
var response = _httpClient.GetAsync(url).Result.Content.ReadAsStringAsync().Result;
21-
var apiResult = response.DeserializeJson<Data<Comment>>().ValidateApiResponse();
22-
return apiResult;
18+
var url = ApiUrlBuilder.Initialize(_apiKey)
19+
.ForClient(ClientType.Comments)
20+
.WithFilter(filters)
21+
.GetApiUrl();
22+
var response = _httpClient.GetAsync(url).Result.ReadAsJsonAsync<Data<Comment>>().ValidateApiResponse();
23+
return response;
2324
}
2425

2526
BaseResponse<Comment> IComments.GetCommentsByIds(List<string> commentIds, CommentFilter filters)
2627
{
27-
var apiParams = filters.GetQueryParams();
28-
var url = $"{_baseApiUrl}/comments/";
29-
var idsToEncode = string.Join(";", commentIds.ToArray());
30-
url = url + $"{HttpUtility.UrlEncode(idsToEncode)}" + $"?key={_apiKey}&{apiParams}";
31-
var response = _httpClient.GetAsync(url).Result.Content.ReadAsStringAsync().Result;
32-
var apiResult = response.DeserializeJson<Data<Comment>>().ValidateApiResponse();
33-
return apiResult;
28+
var url = ApiUrlBuilder.Initialize(_apiKey)
29+
.ForClient(ClientType.Comments)
30+
.WithFilter(filters)
31+
.WithIds(commentIds)
32+
.GetApiUrl();
33+
var response = _httpClient.GetAsync(url).Result.ReadAsJsonAsync<Data<Comment>>().ValidateApiResponse();
34+
return response;
3435
}
3536
}
3637
}

0 commit comments

Comments
 (0)