2017-09-24 6 views
0

안녕 나는 모든 질문에 고유 ● (즉, 중복 불가능에 걸쳐 총 조회수 ● 날짜 에 묻는 질문 ● 번호 아래에 달성하고자 유래 API를 를 쿼리, 배울 수있는 작은 작업을 쓰고을 엔드 포인트) 쉼표로 구분 된 해당 날짜의 모든 질문에 사용 된 태그 목록으로 사전 순으로 정렬됩니다.

나는 아래 api 호출을했는데 이것은 예상치 못한 일이었습니다. stackexchange api에서 date에 대한 질문을 얻기 위해 API 끝점을 찾지 못했습니다. 어떤 제안이 훨씬 https://api.stackexchange.com/2.2해야 모든 기본 주소의

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

먼저 감사합니다. 하루에 작성된 질문의 수를 얻으려면 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; 
    } 
} 
: 여기

는 직렬로 빌드 사용 예는