public void Adding_multiple_items_should_separate_them_with_ampersand() { // Arrange var builder = new QueryStringBuilder(); builder.Add("foo", "bar"); // Act builder.Add("haha", "lala"); // Assert builder.ToString().ShouldBe("?foo=bar&haha=lala"); }
public void Value_should_be_url_encoded() { // Arrange var builder = new QueryStringBuilder(); // Act builder.Add("foo", "% "); // Assert builder.ToString().ShouldEndWith("foo=%25%20"); }
public void Adding_first_item_should_prepend_question_mark() { // Arrange var builder = new QueryStringBuilder(); // Act builder.Add("foo", "bar"); // Assert builder.ToString().ShouldBe("?foo=bar"); }
public async Task <string> IncomeStatementFieldAsync(string symbol, string field, Period period = Period.Quarter, int last = 1) { const string urlPattern = "stock/[symbol]/income/[last]/[field]"; var qsb = new QueryStringBuilder(); qsb.Add("token", pk); var pathNvc = new NameValueCollection { { "symbol", symbol }, { "last", last.ToString() }, { "field", field } }; return(await executor.ExecuteAsyncLegacy <string>(urlPattern, pathNvc, qsb)); }
public async Task <IEnumerable <DividendResponse> > DividendAsync(string symbol, DividendRange range) { const string urlPattern = "stock/[symbol]/dividends/[range]"; var qsb = new QueryStringBuilder(); qsb.Add("token", pk); var pathNvc = new NameValueCollection { { "symbol", symbol }, { "range", range.ToString().ToLower().Replace("_", string.Empty) } }; return(await executor.ExecuteAsyncLegacy <IEnumerable <DividendResponse> >(urlPattern, pathNvc, qsb)); }
public async ValueTask <MessariResponse <IEnumerable <AssetResponse> > > GetAllAssetsAsync( int page = 1, string sort = "id", int limit = 20, bool withMetrics = false, bool withProfiles = false ) { const string urlPattern = "v2/assets"; var qsb = new QueryStringBuilder(); qsb.Add("page", page); qsb.Add("sort", sort); qsb.Add("limit", limit); if (withMetrics) { qsb.Add("with-metrics", true); } if (withProfiles) { qsb.Add("with-profiles", true); } return(await _executor.ExecuteAsync <IEnumerable <AssetResponse> >(urlPattern, qsb).ConfigureAwait(false)); }
public async Task <IEXResponse <string> > CashFlowFieldAsync(string symbol, string field, Period period = Period.Quarter, int last = 1) { const string urlPattern = "stock/[symbol]/cash-flow/[last]/[field]"; var qsb = new QueryStringBuilder(); qsb.Add("period", period.GetDescriptionFromEnum()); var pathNvc = new NameValueCollection { { "symbol", symbol }, { "last", last.ToString() }, { "field", field } }; return(await executor.ExecuteAsync <string>(urlPattern, pathNvc, qsb)); }
public async Task <IEXResponse <Dictionary <string, BatchResponse> > > BatchByMarketAsync(IEnumerable <string> symbols, IEnumerable <BatchType> types, string range = "", int last = 1) { if (symbols?.Count() < 1) { throw new ArgumentNullException("symbols cannot be null"); } else if (types?.Count() < 1) { throw new ArgumentNullException("batchTypes cannot be null"); } const string urlPattern = "stock/market/batch"; var qsType = new List <string>(); foreach (var type in types) { qsType.Add(type.GetDescriptionFromEnum()); } var qsb = new QueryStringBuilder(); qsb.Add("symbols", string.Join(",", symbols)); qsb.Add("types", string.Join(",", qsType)); if (!string.IsNullOrWhiteSpace(range)) { qsb.Add("range", range); } qsb.Add("last", last); var pathNvc = new NameValueCollection(); return(await executor.ExecuteAsync <Dictionary <string, BatchResponse> >(urlPattern, pathNvc, qsb)); }
public async Task <IEnumerable <InternationalSymbolResponse> > InternationalRegionSymbolsAsync(string region) { const string urlPattern = "ref-data/region/[region]/symbols"; var qsb = new QueryStringBuilder(); qsb.Add("token", _pk); var pathNvc = new NameValueCollection { { "region", region } }; return(await _executor.ExecuteAsyncLegacy <IEnumerable <InternationalSymbolResponse> >(urlPattern, pathNvc, qsb)); }
public Task <ApiResponse <List <EnterpriseValueResponse> > > GetEnterpriseValueAsync(string symbol, Period period = Period.Quarter, int?limit = 40) { const string url = "[version]/enterprise-values/[symbol]"; var pathParams = new NameValueCollection() { { "version", ApiVersion.v3.ToString() }, { "symbol", symbol } }; var queryString = new QueryStringBuilder(); if (limit != null) { queryString.Add("limit", limit); } if (period == Period.Quarter) { queryString.Add("period", period.ToString().ToLower()); } return(client.GetJsonAsync <List <EnterpriseValueResponse> >(url, pathParams, queryString)); }
public async Task <IEXResponse <FinancialResponse> > FinancialAsync(string symbol, Period period = Period.Quarter) { const string urlPattern = "stock/[symbol]/financials"; var qsb = new QueryStringBuilder(); qsb.Add("period", period.ToString().ToLower()); var pathNvc = new NameValueCollection { { "symbol", symbol } }; return(await _executor.ExecuteAsync <FinancialResponse>(urlPattern, pathNvc, qsb)); }
public Task <ApiResponse <List <KeyMetricsResponse> > > GetCompanyKeyMetricsAsync(string symbol, Period period = Period.Annual, int?limit = 130) { const string url = "[version]/key-metrics/[symbol]"; var pathParams = new NameValueCollection() { { "version", ApiVersion.v3.ToString() }, { "symbol", symbol } }; var queryString = new QueryStringBuilder(); if (limit != null) { queryString.Add("limit", limit); } if (period != Period.Annual) { queryString.Add("period", period.ToString().ToLower()); } return(client.GetJsonAsync <List <KeyMetricsResponse> >(url, pathParams, queryString)); }
private Task <ApiResponse <List <T> > > GetGenericCalendarAsync <T>(string urlTemplate, string from, string to) { if (string.IsNullOrEmpty(from)) { throw new ArgumentException($"'{nameof(from)}' cannot be null or empty.", nameof(from)); } if (string.IsNullOrEmpty(to)) { throw new ArgumentException($"'{nameof(to)}' cannot be null or empty.", nameof(to)); } var pathParams = new NameValueCollection() { { "version", ApiVersion.v3.ToString() } }; var queryString = new QueryStringBuilder(); queryString.Add("from", from); queryString.Add("to", to); return(client.GetJsonAsync <List <T> >(urlTemplate, pathParams, queryString)); }
public async Task <IEXResponse <IncomeStatementResponse> > IncomeStatementAsync(string symbol, Period period = Period.Quarter, int last = 1) { const string urlPattern = "stock/[symbol]/income/[last]"; var qsb = new QueryStringBuilder(); qsb.Add("period", period.GetDescriptionFromEnum()); var pathNvc = new NameValueCollection { { "symbol", symbol }, { "last", last.ToString() } }; return(await executor.ExecuteAsync <IncomeStatementResponse>(urlPattern, pathNvc, qsb)); }
public async Task <IEXResponse <string> > BalanceSheetFieldAsync(string symbol, string field, Period period = Period.Quarter, int last = 1) { const string urlPattern = "stock/[symbol]/balance-sheet/[last]/[field]"; var qsb = new QueryStringBuilder(); qsb.Add("period", period.ToString().ToLower()); var pathNvc = new NameValueCollection { { "symbol", symbol }, { "last", last.ToString() }, { "field", field } }; return(await executor.ExecuteAsync <string>(urlPattern, pathNvc, qsb)); }
/// <inheritdoc/> public Task <ApiResponse <List <Form13FResponse> > > GetForm13FAsync(string cik, string date) { const string url = "[version]/form-thirteen/[cik]"; var pathParams = new NameValueCollection() { { "version", ApiVersion.v3.ToString() }, { "cik", cik } }; var queryString = new QueryStringBuilder(); queryString.Add("date", date); return(client.GetJsonAsync <List <Form13FResponse> >(url, pathParams, queryString)); }
public async Task <SocialSentimentMinuteResponse> SocialSentimentMinuteAsync(string symbol, DateTime?date = null) { const string urlPattern = "stock/[symbol]/sentiment/minute/[date]"; var qsb = new QueryStringBuilder(); qsb.Add("token", _pk); var pathNvc = new NameValueCollection { { "symbol", symbol }, { "date", date == null?DateTime.Now.ToString("yyyyMMdd") : ((DateTime)date).ToString("yyyyMMdd") } }; return(await _executor.ExecuteAsyncLegacy <SocialSentimentMinuteResponse>(urlPattern, pathNvc, qsb)); }
/// <summary> /// Gets an access token from the provided authorization token /// </summary> /// <param name="authorizationToken">Authorization token</param> /// <param name="resourceIdentifier">Resource to request an access token for</param> /// <returns>Access token for OneDrive</returns> /// <exception cref="Exceptions.TokenRetrievalFailedException">Thrown when unable to retrieve a valid access token</exception> protected async Task <OneDriveAccessToken> GetAccessTokenFromAuthorizationToken(string authorizationToken, string resourceIdentifier) { var queryBuilder = new QueryStringBuilder(); queryBuilder.Add("client_id", ClientId); queryBuilder.Add("redirect_uri", AuthenticationRedirectUrl); queryBuilder.Add("client_secret", ClientSecret); queryBuilder.Add("code", authorizationToken); queryBuilder.Add("resource", resourceIdentifier); queryBuilder.Add("grant_type", "authorization_code"); return(await PostToTokenEndPoint(queryBuilder)); }
public QueryStringBuilder ToQueryStringBuilder() { var builder = new QueryStringBuilder(); if (Status != null) { builder.Add("status", Status); } if (Limit != null) { builder.Add("limit", Limit.Value); } if (SinceId != null) { builder.Add("since_id", SinceId.Value); } if (OrderBy != null) { builder.Add("order", OrderBy); } if (CreatedAtMinUtc != null) { builder.Add( "created_at_min", CreatedAtMinUtc.Value.ToIso8601Utc()); } if (CreatedAtMaxUtc != null) { builder.Add( "created_at_max", CreatedAtMaxUtc.Value.ToIso8601Utc()); } if (UpdatedAtMinUtc != null) { builder.Add( "updated_at_min", UpdatedAtMinUtc.Value.ToIso8601Utc()); } if (UpdatedAtMaxUtc != null) { builder.Add( "updated_at_max", UpdatedAtMaxUtc.Value.ToIso8601Utc()); } return(builder); }
public async Task <IEnumerable <USHolidaysAndTradingDatesResponse> > USHolidaysAndTradingDatesAsync(DateType type, DirectionType direction = DirectionType.Next, int last = 1, DateTime?startDate = null) { const string urlPattern = "ref-data/us/dates/[type]/[direction]/[last]/[startDate]"; var qsb = new QueryStringBuilder(); qsb.Add("token", _pk); var pathNvc = new NameValueCollection { { "type", type.ToString().ToLower() }, { "direction", direction.ToString().ToLower() }, { "last", last.ToString() }, { "startDate", startDate == null?DateTime.Now.ToString("yyyyMMdd") : ((DateTime)startDate).ToString("yyyyMMdd") } }; return(await _executor.ExecuteAsyncLegacy <IEnumerable <USHolidaysAndTradingDatesResponse> >(urlPattern, pathNvc, qsb)); }
public void QueryStringBuilderShouldCreateCorrectGetAllSubscriptionsUri() { // arrange var customerId = this.Fixture.Create <string>(); var page = this.Fixture.Create <ZsPage>(); // act var requestUri = new QueryStringBuilder(ApiResources.ZsGetSubscriptionsAll); requestUri.Add("customer_id", customerId); var uri = page.AppendTo(requestUri).ToString(); // assert var expected = string.Format("subscriptions?customer_id={0}&page={1}&per_page={2}", customerId, page.PageNumber, page.RecordsPerPage); Assert.AreEqual(expected, uri); }
public async Task <HistoricalPriceDynamicResponse> HistoricalPriceDynamicAsync(string symbol, QueryStringBuilder qsb = null) { const string urlPattern = "stock/[symbol]/chart/dynamic"; qsb = qsb ?? new QueryStringBuilder(); if (qsb.Exist("token")) { qsb.Add("token", pk); } var pathNvc = new NameValueCollection { { "symbol", symbol } }; return(await executor.ExecuteAsyncLegacy <HistoricalPriceDynamicResponse>(urlPattern, pathNvc, qsb)); }
public Task <ApiResponse <List <PressReleasesResponse> > > GetPressReleasesAsync(string symbol, int?limit = null) { const string url = "[version]/press-releases/[symbol]"; var pathParams = new NameValueCollection() { { "version", ApiVersion.v3.ToString() }, { "symbol", symbol }, }; var queryString = new QueryStringBuilder(); if (limit != null) { queryString.Add("limit", limit); } return(client.GetJsonAsync <List <PressReleasesResponse> >(url, pathParams, queryString)); }
public async Task <IEXResponse <IEnumerable <HistoricalPriceResponse> > > HistoricalPriceByDateAsync(string symbol, DateTime date, bool chartByDay, QueryStringBuilder qsb = null) { const string urlPattern = "stock/[symbol]/chart/date/[date]"; var pathNvc = new NameValueCollection { { "symbol", symbol }, { "date", date == null?DateTime.Now.ToString("yyyyMMdd") : date.ToString("yyyyMMdd") } }; qsb = qsb ?? new QueryStringBuilder(); if (chartByDay) { qsb.Add("chartByDay", "true"); } return(await executor.ExecuteAsync <IEnumerable <HistoricalPriceResponse> >(urlPattern, pathNvc, qsb : qsb)); }
/// <inheritdoc/> public Task <ApiResponse <List <EarningsCalendarResponse> > > GetHistoricalEarningsCalendarAsync(string symbol, int?limit = null) { const string url = "[version]/historical/earning_calendar/[symbol]"; var pathParams = new NameValueCollection() { { "version", ApiVersion.v3.ToString() }, { "symbol", symbol } }; var queryString = new QueryStringBuilder(); if (limit != null) { queryString.Add("limit", limit); } return(client.GetJsonAsync <List <EarningsCalendarResponse> >(url, pathParams, queryString)); }
public Task <ApiResponse <List <HistoricalDailyDCFResponse> > > GetHistoricalDiscountedCashFlowDailyAsync(string symbol, int?limit = 100) { const string url = "[version]/historical-discounted-cash-flow-statement/[symbol]"; var pathParams = new NameValueCollection() { { "version", ApiVersion.v3.ToString() }, { "symbol", symbol } }; var queryString = new QueryStringBuilder(); if (limit != null) { queryString.Add("limit", limit); } return(client.GetJsonAsync <List <HistoricalDailyDCFResponse> >(url, pathParams, queryString)); }
public Task <ApiResponse <List <HistoricalDCFResponse> > > GetHistoricalDiscountedCashFlowAsync(string symbol, Period period = Period.Annual) { const string url = "[version]/historical-discounted-cash-flow-statement/[symbol]"; var pathParams = new NameValueCollection() { { "version", ApiVersion.v3.ToString() }, { "symbol", symbol } }; var queryString = new QueryStringBuilder(); if (period != Period.Annual) { queryString.Add("period", period.ToString().ToLower()); } return(client.GetJsonAsync <List <HistoricalDCFResponse> >(url, pathParams, queryString)); }
public Task <ApiResponse <List <MarketCapResponse> > > GetHistoricalMarketCapitalizationAsync(string symbol, int?limit = 100) { const string url = "[version]/historical-market-capitalization/[symbol]"; var pathParams = new NameValueCollection() { { "version", ApiVersion.v3.ToString() }, { "symbol", symbol } }; var queryString = new QueryStringBuilder(); if (limit != null) { queryString.Add("limit", limit); } return(client.GetJsonAsync <List <MarketCapResponse> >(url, pathParams, queryString)); }
private async Task <IBeatmapInfo> LookupAsync(QueryStringBuilder query) { query.Add("limit", 1); try { var info = (await _client.GetJsonAsync <OsuBeatmapInfo[]>("/get_beatmaps", query)).FirstOrDefault(); if (info?.IsDownloadUnavailable ?? false) { return(null); } return(info); } catch { return(null); } }
public string RetrieveInventoryStatus(DateTime?lastModifiedAcuTz = null, int page = 1, int?pageSize = null) { var builder = new QueryStringBuilder().Add("$format", "json"); if (lastModifiedAcuTz.HasValue) { builder.Add("$filter", $"INSiteStatus_lastModifiedDateTime gt datetime'{lastModifiedAcuTz.Value.ToAcumaticaRestDate()}'"); } if (pageSize.HasValue) { builder.AddPaging(page, pageSize.Value); } var queryString = builder.ToString(); var response = _httpContext.Get($"/OData/InventoryStatus?{queryString}", excludeVersion: true); return(response.Body); }
private async Task <ApiResponse <StandardIndustrialClassificationResponse> > GetStandardIndustrialClassificationInternalAsync(string queryParamName, string queryParamValue) { const string url = "[version]/standard_industrial_classification"; var pathParams = new NameValueCollection() { { "version", ApiVersion.v4.ToString() } }; var queryString = new QueryStringBuilder(); queryString.Add(queryParamName, queryParamValue); var result = await client.GetJsonAsync <List <StandardIndustrialClassificationResponse> >(url, pathParams, queryString); if (result.HasError) { return(ApiResponse.FromError <StandardIndustrialClassificationResponse>(result.Error)); } return(ApiResponse.FromSucces(result.Data.First())); }
public async Task <ApiResponse <CompanyPeersResponse> > GetStockPeersAsync(string symbol) { const string url = "[version]/stock_peers"; var pathParams = new NameValueCollection() { { "version", ApiVersion.v4.ToString() } }; var queryString = new QueryStringBuilder(); queryString.Add("symbol", symbol); var result = await client.GetJsonAsync <List <CompanyPeersResponse> >(url, pathParams, queryString); if (result.HasError) { return(ApiResponse.FromError <CompanyPeersResponse>(result.Error)); } return(ApiResponse.FromSucces(result.Data.First())); }
public async Task <IApiResponse <IReadOnlyList <QuoteResult> > > SearchAsync(string search, CancellationToken cancellationToken = default) { const string url = "v1/finance/search"; var qsb = new QueryStringBuilder(); qsb.Add("q", search); var apiResult = await client.ExecuteJsonAsync <SearchResultResponse>(url, qsb, cancellationToken); logger.LogDebug("SearchService::SearchAsync completed in {ResponseTime} with status code {StatusCode} reason {ReasonPhrase}", apiResult.Metadata.ResponseTime, apiResult.Metadata.StatusCode, apiResult.Metadata.ReasonPhrase); if (apiResult.HasError) { return(ApiResponse.FromError <IReadOnlyList <QuoteResult> >(apiResult.Metadata, apiResult.Error)); } var results = (IReadOnlyList <QuoteResult>)(apiResult.Data.quotes.OrderByDescending(q => q.score).Select(r => mapper.Map <QuoteResult>(r)).ToList()); logger.LogInformation("SearchService::SearchAsync returns SUCCES - found {count} results", results.Count); return(ApiResponse.FromSucces(apiResult.Metadata, results)); }