Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 7d87886

Browse files
author
Hariharan Subramanian
committed
Completed All Badges API's
1 parent 6c21417 commit 7d87886

File tree

10 files changed

+256
-83
lines changed

10 files changed

+256
-83
lines changed

‎Sample/StackExchange.NET_Example/Program.cs

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ class Program
1111
static void Main(string[] args)
1212
{
1313
var client = new StackExchangeClient("U4DMV*8nvpm3EOpvf69Rxw((");
14-
var queryString = new QueryFilters()
14+
var queryString = new AnswerFilters()
1515
{
1616
PageSize = 1,
1717
Page = 1,
18-
Sort = Sort.Votes
18+
Sort = AnswerSort.Votes
1919
};
2020
//var answers = client.Answers.GetAllAnswers(queryString);
2121
var ids = new List<string>()
@@ -24,8 +24,26 @@ static void Main(string[] args)
2424
};
2525
//var answers = client.Answers.GetAnswerByIds(ids, queryString);
2626
//var answers = client.Answers.GetCommentsByIds(ids, queryString);
27-
var answers = client.Answers.GetQuestionByAnswerIds(ids, queryString);
28-
Console.WriteLine(JsonConvert.SerializeObject(answers));
27+
//var answers = client.Answers.GetQuestionByAnswerIds(ids, queryString);
28+
29+
var badgeFilter = new BadgeFilters()
30+
{
31+
Sort = BadgeSort.Name
32+
};
33+
//var badges = client.Badges.GetAllBadges(badgeFilter);
34+
35+
var batchIds = new List<string>()
36+
{
37+
"4600","2600","26"
38+
};
39+
40+
//var getBadgesByIds = client.Badges.GetBadgesByIds(batchIds, badgeFilter);
41+
//var getBadgesByIds = client.Badges.GetRecentlyAwardedBadges(badgeFilter);
42+
43+
//var getBadgesByIds = client.Badges.GetRecentlyAwardedBadgesByIds(batchIds, badgeFilter);
44+
45+
var getBadgesByIds = client.Badges.GetAllTaggedBadges(badgeFilter);
46+
Console.WriteLine(JsonConvert.SerializeObject(getBadgesByIds));
2947
Console.ReadKey();
3048
}
3149
}

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

Lines changed: 19 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
using System;
44
using System.Collections.Generic;
5-
using System.Net;
6-
using System.Net.Http;
75
using System.Web;
86
using Newtonsoft.Json;
97
using StackExchange.NET.Interfaces;
@@ -13,113 +11,99 @@
1311

1412
namespace StackExchange.NET.Clients
1513
{
16-
public class StackExchangeClient : IAnswers
14+
public partialclass StackExchangeClient : IAnswers
1715
{
1816
public IAnswers Answers => this;
19-
private readonly string _baseApiUrl;
20-
private readonly HttpClient _httpClient;
21-
private readonly string _apiKey;
22-
public StackExchangeClient(string apiKey)
23-
{
24-
_apiKey = apiKey;
25-
_baseApiUrl = $"https://api.stackexchange.com/2.2/answers";
26-
var httpClientHandler = new HttpClientHandler()
27-
{
28-
AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip
29-
};
30-
_httpClient = new HttpClient(httpClientHandler);
31-
32-
}
33-
Answers IAnswers.GetAllAnswers(QueryFilters filters)
17+
Answers IAnswers.GetAllAnswers(AnswerFilters filters)
3418
{
3519
if (filters == null)
3620
throw new ArgumentNullException($"Null is not a valid parameter");
3721
var apiParams = filters.GetQueryParams();
38-
var url = $"{_baseApiUrl}?key={_apiKey}&{apiParams}";
22+
var url = $"{_baseApiUrl}/answers?key={_apiKey}&{apiParams}";
3923
var response = _httpClient.GetAsync(url).Result.Content.ReadAsStringAsync().Result;
4024
var answers = JsonConvert.DeserializeObject<Answers>(response);
4125
return answers;
4226
}
4327

44-
Answers IAnswers.GetAnswerByIds(List<string> ids, QueryFilters filters)
28+
Answers IAnswers.GetAnswerByIds(List<string> ids, AnswerFilters filters)
4529
{
4630
var apiParams = filters.GetQueryParams();
47-
var url = $"{_baseApiUrl}/";
31+
var url = $"{_baseApiUrl}/answers/";
4832
var idsToEncode = string.Join(";", ids.ToArray());
4933
url = url + $"{HttpUtility.UrlEncode(idsToEncode)}" + $"?key={_apiKey}&{apiParams}";
5034
var response = _httpClient.GetAsync(url).Result.Content.ReadAsStringAsync().Result;
5135
var answers = JsonConvert.DeserializeObject<Answers>(response);
5236
return answers;
5337
}
5438

55-
public Answers GetCommentsByIds(List<string> ids, QueryFilters filters)
39+
public Answers GetCommentsByIds(List<string> ids, AnswerFilters filters)
5640
{
5741
var apiParams = filters.GetQueryParams();
58-
var url = $"{_baseApiUrl}/";
42+
var url = $"{_baseApiUrl}/answers/";
5943
var idsToEncode = string.Join(";", ids.ToArray());
6044
url = url + $"{HttpUtility.UrlEncode(idsToEncode)}" + $"/comments?key={_apiKey}&{apiParams}";
6145
var response = _httpClient.GetAsync(url).Result.Content.ReadAsStringAsync().Result;
6246
var answers = JsonConvert.DeserializeObject<Answers>(response);
6347
return answers;
6448
}
6549

66-
public Questions GetQuestionByAnswerIds(List<string> ids, QueryFilters filters)
50+
public Questions GetQuestionByAnswerIds(List<string> ids, AnswerFilters filters)
6751
{
6852
var apiParams = filters.GetQueryParams();
69-
var url = $"{_baseApiUrl}/";
53+
var url = $"{_baseApiUrl}/answers/";
7054
var idsToEncode = string.Join(";", ids.ToArray());
7155
url = url + $"{HttpUtility.UrlEncode(idsToEncode)}" + $"/questions?key={_apiKey}&{apiParams}";
7256
var response = _httpClient.GetAsync(url).Result.Content.ReadAsStringAsync().Result;
7357
var questions = JsonConvert.DeserializeObject<Questions>(response);
7458
return questions;
7559
}
7660

77-
void IAnswers.AcceptAnAnswer(string id, QueryFilters filters)
61+
void IAnswers.AcceptAnAnswer(string id, AnswerFilters filters)
7862
{
7963
throw new NotImplementedException();
8064
}
8165

82-
void IAnswers.UndoAcceptedAnswer(string id, QueryFilters filters)
66+
void IAnswers.UndoAcceptedAnswer(string id, AnswerFilters filters)
8367
{
8468
throw new NotImplementedException();
8569
}
8670

87-
void IAnswers.DeleteAnswer(string id, QueryFilters filters)
71+
void IAnswers.DeleteAnswer(string id, AnswerFilters filters)
8872
{
8973
throw new NotImplementedException();
9074
}
9175

92-
void IAnswers.DownVoteAnswer(string id, QueryFilters filters)
76+
void IAnswers.DownVoteAnswer(string id, AnswerFilters filters)
9377
{
9478
throw new NotImplementedException();
9579
}
9680

97-
void IAnswers.UndoDownVotedAnswer(string id, QueryFilters filters)
81+
void IAnswers.UndoDownVotedAnswer(string id, AnswerFilters filters)
9882
{
9983
throw new NotImplementedException();
10084
}
10185

102-
void IAnswers.EditAnswer(string id, QueryFilters filters)
86+
void IAnswers.EditAnswer(string id, AnswerFilters filters)
10387
{
10488
throw new NotImplementedException();
10589
}
10690

107-
void IAnswers.GetOptionsOfAnswer(string id, QueryFilters filters)
91+
void IAnswers.GetOptionsOfAnswer(string id, AnswerFilters filters)
10892
{
10993
throw new NotImplementedException();
11094
}
11195

112-
void IAnswers.FlagAnswer(string id, QueryFilters filters)
96+
void IAnswers.FlagAnswer(string id, AnswerFilters filters)
11397
{
11498
throw new NotImplementedException();
11599
}
116100

117-
void IAnswers.UpVoteAnswer(string id, QueryFilters filters)
101+
void IAnswers.UpVoteAnswer(string id, AnswerFilters filters)
118102
{
119103
throw new NotImplementedException();
120104
}
121105

122-
void IAnswers.UndoUpVotedAnswer(string id, QueryFilters filters)
106+
void IAnswers.UndoUpVotedAnswer(string id, AnswerFilters filters)
123107
{
124108
throw new NotImplementedException();
125109
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
#region Using Directives
2+
3+
using System.Collections.Generic;
4+
using System.Web;
5+
using Newtonsoft.Json;
6+
using StackExchange.NET.Interfaces;
7+
using StackExchange.NET.Models;
8+
9+
#endregion
10+
11+
namespace StackExchange.NET.Clients
12+
{
13+
public partial class StackExchangeClient : IBadges
14+
{
15+
public IBadges Badges => this;
16+
17+
public Badges GetAllBadges(BadgeFilters filters, string inName = null)
18+
{
19+
var apiParams = filters.GetQueryParams();
20+
var url = $"{_baseApiUrl}/badges?key={_apiKey}&{apiParams}&inname={inName}";
21+
var response = _httpClient.GetAsync(url).Result.Content.ReadAsStringAsync().Result;
22+
var badges = JsonConvert.DeserializeObject<Badges>(response);
23+
return badges;
24+
}
25+
26+
public Badges GetBadgesByIds(List<string> ids, BadgeFilters filters)
27+
{
28+
var apiParams = filters.GetQueryParams();
29+
var url = $"{_baseApiUrl}/badges/";
30+
var idsToEncode = string.Join(";", ids.ToArray());
31+
url = url + $"{HttpUtility.UrlEncode(idsToEncode)}" + $"?key={_apiKey}&{apiParams}";
32+
var response = _httpClient.GetAsync(url).Result.Content.ReadAsStringAsync().Result;
33+
var badges = JsonConvert.DeserializeObject<Badges>(response);
34+
return badges;
35+
}
36+
37+
public Badges GetNonTaggedBadges(List<string> ids, BadgeFilters filters)
38+
{
39+
var apiParams = filters.GetQueryParams();
40+
var url = $"{_baseApiUrl}/badges/name";
41+
var idsToEncode = string.Join(";", ids.ToArray());
42+
url = url + $"{HttpUtility.UrlEncode(idsToEncode)}" + $"?key={_apiKey}&{apiParams}";
43+
var response = _httpClient.GetAsync(url).Result.Content.ReadAsStringAsync().Result;
44+
var badges = JsonConvert.DeserializeObject<Badges>(response);
45+
return badges;
46+
}
47+
48+
public Badges GetRecentlyAwardedBadges(BadgeFilters filters)
49+
{
50+
var apiParams = filters.GetQueryParams();
51+
var url = $"{_baseApiUrl}/badges/recipients"+ $"?key={_apiKey}&{apiParams}";
52+
var response = _httpClient.GetAsync(url).Result.Content.ReadAsStringAsync().Result;
53+
var badges = JsonConvert.DeserializeObject<Badges>(response);
54+
return badges;
55+
}
56+
57+
public Badges GetRecentlyAwardedBadgesByIds(List<string> ids, BadgeFilters filters)
58+
{
59+
var apiParams = filters.GetQueryParams();
60+
var url = $"{_baseApiUrl}/badges/";
61+
var idsToEncode = string.Join(";", ids.ToArray());
62+
url = url + $"{HttpUtility.UrlEncode(idsToEncode)}/recipients" + $"?key={_apiKey}&{apiParams}";
63+
var response = _httpClient.GetAsync(url).Result.Content.ReadAsStringAsync().Result;
64+
var badges = JsonConvert.DeserializeObject<Badges>(response);
65+
return badges;
66+
}
67+
68+
public Badges GetAllTaggedBadges(BadgeFilters filters, string inName = null)
69+
{
70+
var apiParams = filters.GetQueryParams();
71+
var url = $"{_baseApiUrl}/badges/tags"+ $"?key={_apiKey}&{apiParams}";
72+
var response = _httpClient.GetAsync(url).Result.Content.ReadAsStringAsync().Result;
73+
var badges = JsonConvert.DeserializeObject<Badges>(response);
74+
return badges;
75+
}
76+
}
77+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using System.Net;
2+
using System.Net.Http;
3+
4+
namespace StackExchange.NET.Clients
5+
{
6+
public partial class StackExchangeClient
7+
{
8+
private readonly string _baseApiUrl;
9+
private readonly HttpClient _httpClient;
10+
private readonly string _apiKey;
11+
12+
public StackExchangeClient(string apiKey)
13+
{
14+
_apiKey = apiKey;
15+
_baseApiUrl = $"https://api.stackexchange.com/2.2";
16+
var httpClientHandler = new HttpClientHandler()
17+
{
18+
AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip
19+
};
20+
_httpClient = new HttpClient(httpClientHandler);
21+
}
22+
}
23+
}

‎StackExchange.NET/StackExchange.NET/ExtensionMethods.cs

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,10 @@ where p.GetValue(obj, null) != null
2020
private static string ToQueryString(this IDictionary<string, object> parameters) =>
2121
string.Join("&", parameters.Select(x => $"{x.Key.ToLower()}={ x.Value}"));
2222

23-
internal static string GetQueryParams(this QueryFilters filters)
23+
internal static string GetQueryParams(this Filter filters)
2424
{
2525
if (filters == null)
2626
return string.Empty;
27-
2827
var dictionary = new Dictionary<string, dynamic>()
2928
{
3029
{"fromdate",filters.FromDate.ToUnixTime() },
@@ -40,11 +39,6 @@ internal static string GetQueryParams(this QueryFilters filters)
4039

4140
return dictionary.ToQueryString();
4241
}
43-
44-
//internal static string GetEncodedUrl(this string url)
45-
//{
46-
47-
//}
4842
}
4943

5044
internal static class DateTimeExtensions

‎StackExchange.NET/StackExchange.NET/Interfaces/IAnswers.cs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,19 @@ namespace StackExchange.NET.Interfaces
55
{
66
public interface IAnswers
77
{
8-
Answers GetAllAnswers(QueryFilters filters);
9-
Answers GetAnswerByIds(List<string> ids, QueryFilters filters);
10-
Answers GetCommentsByIds(List<string> ids, QueryFilters filters);
11-
Questions GetQuestionByAnswerIds(List<string> ids, QueryFilters filters);
12-
void AcceptAnAnswer(string id, QueryFilters filters);
13-
void UndoAcceptedAnswer(string id, QueryFilters filters);
14-
void DeleteAnswer(string id, QueryFilters filters);
15-
void DownVoteAnswer(string id, QueryFilters filters);
16-
void UndoDownVotedAnswer(string id, QueryFilters filters);
17-
void EditAnswer(string id, QueryFilters filters);
18-
void GetOptionsOfAnswer(string id, QueryFilters filters);
19-
void FlagAnswer(string id, QueryFilters filters);
20-
void UpVoteAnswer(string id, QueryFilters filters);
21-
void UndoUpVotedAnswer(string id, QueryFilters filters);
8+
Answers GetAllAnswers(AnswerFilters filters);
9+
Answers GetAnswerByIds(List<string> ids, AnswerFilters filters);
10+
Answers GetCommentsByIds(List<string> ids, AnswerFilters filters);
11+
Questions GetQuestionByAnswerIds(List<string> ids, AnswerFilters filters);
12+
void AcceptAnAnswer(string id, AnswerFilters filters);
13+
void UndoAcceptedAnswer(string id, AnswerFilters filters);
14+
void DeleteAnswer(string id, AnswerFilters filters);
15+
void DownVoteAnswer(string id, AnswerFilters filters);
16+
void UndoDownVotedAnswer(string id, AnswerFilters filters);
17+
void EditAnswer(string id, AnswerFilters filters);
18+
void GetOptionsOfAnswer(string id, AnswerFilters filters);
19+
void FlagAnswer(string id, AnswerFilters filters);
20+
void UpVoteAnswer(string id, AnswerFilters filters);
21+
void UndoUpVotedAnswer(string id, AnswerFilters filters);
2222
}
2323
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using System.Collections.Generic;
2+
using StackExchange.NET.Models;
3+
4+
namespace StackExchange.NET.Interfaces
5+
{
6+
public interface IBadges
7+
{
8+
Badges GetAllBadges(BadgeFilters filters, string inName = null);
9+
Badges GetBadgesByIds(List<string> ids, BadgeFilters filters);
10+
Badges GetNonTaggedBadges(List<string> ids, BadgeFilters filters);
11+
Badges GetRecentlyAwardedBadges(BadgeFilters filters);
12+
Badges GetRecentlyAwardedBadgesByIds(List<string> ids, BadgeFilters filters);
13+
Badges GetAllTaggedBadges(BadgeFilters filters, string inName = null);
14+
}
15+
}

‎StackExchange.NET/StackExchange.NET/Models/Answers.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,21 @@ public class Answer
4444
[JsonProperty("question_id")]
4545
public long QuestionId { get; set; }
4646
}
47+
public enum AnswerSort
48+
{
49+
Activity,
50+
Votes,
51+
Creation
52+
}
4753

54+
public class AnswerFilters : Filter
55+
{
56+
public AnswerFilters()
57+
{
58+
Order = Models.Order.Desc;
59+
Sort = AnswerSort.Activity;
60+
Site = "stackoverflow";
61+
}
62+
}
4863
}
4964

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /