2017-09-24 26 views
0

您好我正在寫一個小任務來學習,查詢計算器API 我想達到以下 ●在所有問題 ●鮮明(即沒有重複在該日期 問●總瀏覽量問題數)在該日期的所有問題中使用的逗號分隔列表,按字母順序排列。調用StackAPI端點

我在下面的API調用做,但這不是我有expected.First的事情我沒有找到API終點獲得節數從stackexchange API的日期問題。 任何建議都非常讚賞

static void Main() 
    { 
     Console.WriteLine("Making stackoverflow API Call..."); 
     using (var client = new HttpClient(new HttpClientHandler { AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate })) 
     { 
      client.BaseAddress = new Uri("https://api.stackexchange.com/docs"); 
      // Int32 unixTimestamp = (Int32) (DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1,0,0,0,0))).TotalSeconds; 
      var unixStamp = Helper.ConvertToDateTime("2017, 09, 23, 0, 0, 0"); 
      var response = client.GetAsync("questions?fromdate="+ unixStamp + "&todate="+ unixStamp + "&site=stackoverflow").Result; 
      response.EnsureSuccessStatusCode(); 
      var s = response.Content.ReadAsStringAsync().Result; 
      var result = response.Content.ReadAsStringAsync().Result.Count(); 
      Console.WriteLine("Total no.of questions asked: " + result); 
     } 
     Console.ReadLine(); 
    } 

回答

1

首先你的基地地址應該是https://api.stackexchange.com/2.2。 要得到你需要修改默認的文件管理器,以包括total場單日創建的問題數量。 運行以下請求:

/2.2/questions?fromdate=1506211200&todate=1506297600&order=desc&sort=creation&site=stackoverflow&filter=!)5IW-5QudQH7_nJ7d.eBuocQb(B)

將返回:

{ 
    "items": [], 
    "has_more": false, 
    "quota_max": 10000, 
    "quota_remaining": 9978, 
    "total": 3666 
} 

對於其他兩個要求,你應該創建一個新的過濾器,其中包括所需的字段(如果你想與恢復工作您可能希望在過濾器中包含更多字段以避免重複請求的問題)。爲了創建一看:filter/createCustom Filters

後你得到你必須解析返回的JSON字符串(如果你想返回XML,你必須解析XML)的結果。您可以使用Newtonsoft或建立DataContractJsonSerializer(詳細信息,請參閱here)。

以下是在串行器使用構建的例子:

using System.Runtime.Serialization; 
using System.Runtime.Serialization.Json; 
using System.Threading.Tasks; 
using System.Net; 
using System.Net.Http; 
using System.IO; 

[DataContract] 
public class Question 
{ 
    // Question members... 
} 

[DataContract] 
public class TotalQuestionsResult 
{ 
    [DataMember(Name = "items")] 
    public Question[] Items { get; set; } 
    [DataMember(Name = "has_more")] 
    public bool HasMore { get; set; } 
    [DataMember(Name = "quota_max")] 
    public int QuotaMax { get; set; } 
    [DataMember(Name = "quota_remaining")] 
    public int QuotaRemaining { get; set; } 
    [DataMember(Name = "total")] 
    public int Total { get; set; } 
} 

public async Task<int> GetTotalNumberOfQuestions() 
{ 
    // Get the data. 
    using (var client = new HttpClient(new HttpClientHandler { AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate })) 
    { 
     client.BaseAddress = new Uri("https://api.stackexchange.com/2.2"); 
     var response = await client.GetAsync("questions?fromdate=1506211200&todate=1506297600&order=desc&sort=creation&site=stackoverflow&filter=!)5IW-5QudQH7_nJ7d.eBuocQb(B)"); 
     var responseStream = new MemoryStream(await response.Content.ReadAsByteArrayAsync()); 
     var serializer = new DataContractJsonSerializer(typeof(TotalQuestionsResult)); 
     var result = (TotalQuestionsResult)serializer.ReadObject(responseStream); 

     return result.Total; 
    } 
}