Skip to content

Commit 7a26f58

Browse files
committed
Add Company Ratings endpoint
1 parent 6f4cede commit 7a26f58

File tree

4 files changed

+124
-0
lines changed

4 files changed

+124
-0
lines changed

FinancialModelingPrepApi/Abstractions/CompanyValuation/ICompanyValuation.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,8 @@ public interface ICompanyValuation
2020
public Task<ApiResponse<List<IncomeStatementResponse>>> GetIncomeStatementAsync(string symbol, Period period = Period.Quarter, int limit = 40);
2121

2222
public Task<ApiResponse<List<StockNewsResponse>>> GetStockNewsAsync(string symbol, int limit = 50);
23+
24+
public Task<ApiResponse<CompanyRatingResponse>> GetCompanyRatingAsync(string symbol);
25+
public Task<ApiResponse<List<CompanyRatingResponse>>> GetHistoricalCompanyRatingAsync(string symbol, int limit = 140);
2326
}
2427
}

FinancialModelingPrepApi/Core/CompanyValuation/CompanyValuation.cs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,5 +178,42 @@ public Task<ApiResponse<List<StockNewsResponse>>> GetStockNewsAsync(string symbo
178178

179179
return client.GetAsync<List<StockNewsResponse>>(url, pathParams, queryString);
180180
}
181+
182+
public async Task<ApiResponse<CompanyRatingResponse>> GetCompanyRatingAsync(string symbol)
183+
{
184+
const string url = "[version]/rating/[symbol]";
185+
186+
var pathParams = new NameValueCollection()
187+
{
188+
{ "version", ApiVersion.v3.ToString() },
189+
{ "symbol", symbol }
190+
};
191+
192+
var result = await client.GetAsync<List<CompanyRatingResponse>>(url, pathParams, null);
193+
194+
if (result.HasError)
195+
{
196+
return ApiResponse.FromError<CompanyRatingResponse>(result.Error);
197+
}
198+
199+
return ApiResponse.FromSucces(result.Data.First());
200+
}
201+
202+
public Task<ApiResponse<List<CompanyRatingResponse>>> GetHistoricalCompanyRatingAsync(string symbol, int limit = 140)
203+
{
204+
const string url = "[version]/historical-rating/[symbol]";
205+
206+
var pathParams = new NameValueCollection()
207+
{
208+
{ "version", ApiVersion.v3.ToString() },
209+
{ "symbol", symbol }
210+
};
211+
212+
var queryString = new QueryStringBuilder();
213+
214+
queryString.Add("limit", limit);
215+
216+
return client.GetAsync<List<CompanyRatingResponse>>(url, pathParams, queryString);
217+
}
181218
}
182219
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
using System.Text.Json.Serialization;
2+
3+
namespace MatthiWare.FinancialModelingPrepApi.Model.CompanyValuation
4+
{
5+
public class CompanyRatingResponse
6+
{
7+
[JsonPropertyName("symbol")]
8+
public string Symbol { get; set; }
9+
10+
[JsonPropertyName("date")]
11+
public string Date { get; set; }
12+
13+
[JsonPropertyName("rating")]
14+
public string Rating { get; set; }
15+
16+
[JsonPropertyName("ratingScore")]
17+
public int RatingScore { get; set; }
18+
19+
[JsonPropertyName("ratingRecommendation")]
20+
public string RatingRecommendation { get; set; }
21+
22+
[JsonPropertyName("ratingDetailsDCFScore")]
23+
public int RatingDetailsDCFScore { get; set; }
24+
25+
[JsonPropertyName("ratingDetailsDCFRecommendation")]
26+
public string RatingDetailsDCFRecommendation { get; set; }
27+
28+
[JsonPropertyName("ratingDetailsROEScore")]
29+
public int RatingDetailsROEScore { get; set; }
30+
31+
[JsonPropertyName("ratingDetailsROERecommendation")]
32+
public string RatingDetailsROERecommendation { get; set; }
33+
34+
[JsonPropertyName("ratingDetailsROAScore")]
35+
public int RatingDetailsROAScore { get; set; }
36+
37+
[JsonPropertyName("ratingDetailsROARecommendation")]
38+
public string RatingDetailsROARecommendation { get; set; }
39+
40+
[JsonPropertyName("ratingDetailsDEScore")]
41+
public int RatingDetailsDEScore { get; set; }
42+
43+
[JsonPropertyName("ratingDetailsDERecommendation")]
44+
public string RatingDetailsDERecommendation { get; set; }
45+
46+
[JsonPropertyName("ratingDetailsPEScore")]
47+
public int RatingDetailsPEScore { get; set; }
48+
49+
[JsonPropertyName("ratingDetailsPERecommendation")]
50+
public string RatingDetailsPERecommendation { get; set; }
51+
52+
[JsonPropertyName("ratingDetailsPBScore")]
53+
public int RatingDetailsPBScore { get; set; }
54+
55+
[JsonPropertyName("ratingDetailsPBRecommendation")]
56+
public string RatingDetailsPBRecommendation { get; set; }
57+
}
58+
}

Tests/CompanyValuation/CompanyValuationTests.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,5 +142,31 @@ public async Task GetStockNewsAsync()
142142
Assert.Equal(5, result.Data.Count);
143143
Assert.All(result.Data, data => Assert.Equal("AAPL", data.Symbol));
144144
}
145+
146+
[Fact]
147+
public async Task GetCompanyRatingAsync()
148+
{
149+
var api = ServiceProvider.GetRequiredService<IFinancialModelingPrepApiClient>();
150+
151+
var result = await api.CompanyValuation.GetCompanyRatingAsync("AAPL");
152+
153+
Assert.NotNull(result);
154+
Assert.False(result.HasError);
155+
Assert.Equal("AAPL", result.Data.Symbol);
156+
}
157+
158+
[Fact]
159+
public async Task GetHistoricalCompanyRatingAsync()
160+
{
161+
var api = ServiceProvider.GetRequiredService<IFinancialModelingPrepApiClient>();
162+
163+
var result = await api.CompanyValuation.GetHistoricalCompanyRatingAsync("AAPL", 5);
164+
165+
Assert.NotNull(result);
166+
Assert.False(result.HasError);
167+
Assert.NotEmpty(result.Data);
168+
Assert.Equal(5, result.Data.Count);
169+
Assert.All(result.Data, data => Assert.Equal("AAPL", data.Symbol));
170+
}
145171
}
146172
}

0 commit comments

Comments
 (0)