예제 #1
0
 public string GetContestStandingsUrl(int contestId, bool showUnofficial = false, int from = -1, int count = -1, string handles = null, int room = -1)
 {
     try
     {
         var getParams = new Dictionary <string, string>();
         getParams.Add("contestId", contestId.ToString());
         if (showUnofficial)
         {
             getParams.Add("showUnofficial", "true");
         }
         if (from != -1)
         {
             getParams.Add("from", from.ToString());
         }
         if (count != -1)
         {
             getParams.Add("count", count.ToString());
         }
         if (handles != null)
         {
             getParams.Add("handles", handles);
         }
         if (room != -1)
         {
             getParams.Add("room", room.ToString());
         }
         return(HttpClientSingleton.DoGetUrl(CONTEST_STANDINGS_URL, getParams));
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
예제 #2
0
 public string GetContestStatusUrl(int contestId, string handle = null, int from = -1, int count = -1)
 {
     try
     {
         var getParams = new Dictionary <string, string>();
         getParams.Add("contestId", contestId.ToString());
         if (handle != null)
         {
             getParams.Add("handle", handle);
         }
         if (from != -1)
         {
             getParams.Add("from", from.ToString());
         }
         if (count != -1)
         {
             getParams.Add("count", count.ToString());
         }
         return(HttpClientSingleton.DoGetUrl(CONTEST_STATUS_URL, getParams));
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
예제 #3
0
        /// <summary>
        /// 返回指定比赛的提交(可以返回指定用户的提交)
        /// </summary>
        /// <param name="contestId">比赛 ID</param>
        /// <param name="handle">用户 ID</param>
        /// <param name="from">起始索引</param>
        /// <param name="count">返回条目</param>
        /// <returns>返回 JSON(JObject) 格式的提交列表,按提交 ID 递减顺序排序</returns>
        public async Task <JObject> GetContestStatusAsync(int contestId, string handle = null, int from = -1, int count = -1)
        {
            try
            {
                var jsonData = await HttpClientSingleton.DoGetAsync(GetContestStatusUrl(contestId, handle, from, count));

                return((JObject)JsonConvert.DeserializeObject(jsonData));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
예제 #4
0
        /// <summary>
        /// 查询比赛列表
        /// </summary>
        /// <param name="gym">是否显示 GYM 的比赛</param>
        /// <returns>返回 JSON(JObject) 格式的比赛列表</returns>
        public async Task <JObject> GetContestListAsync(bool gym = false)
        {
            try
            {
                var jsonData = await HttpClientSingleton.DoGetAsync(GetContestListUrl(gym));

                return((JObject)JsonConvert.DeserializeObject(jsonData));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
예제 #5
0
        /// <summary>
        /// 查询 Codeforces 指定比赛的榜单
        /// </summary>
        /// <param name="contestId">比赛 ID</param>
        /// <param name="showUnofficial">是否显示非官方数据</param>
        /// <param name="from">起始索引</param>
        /// <param name="count">返回条目</param>
        /// <param name="handles">查询的用户 ID,多个的话中间用分号分隔</param>
        /// <param name="room">房间号</param>
        /// <returns>返回 JSON(JObject) 格式的比赛榜单</returns>
        public async Task <JObject> GetContestStandingsAsync(int contestId, bool showUnofficial = false, int from = -1, int count = -1, string handles = null, int room = -1)
        {
            try
            {
                var jsonData = await HttpClientSingleton.DoGetAsync(GetContestStandingsUrl(contestId, showUnofficial, from, count, handles, room));

                return((JObject)JsonConvert.DeserializeObject(jsonData));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
예제 #6
0
 public string GetContestListUrl(bool gym = false)
 {
     try
     {
         var getParams = new Dictionary <string, string>();
         if (gym != false)
         {
             getParams.Add("gym", "true");
         }
         return(HttpClientSingleton.DoGetUrl(CONTEST_LIST_URL, getParams));
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
예제 #7
0
        /// <summary>
        /// 返回问题集中的所有问题,可以通过标签进行过滤。
        /// </summary>
        /// <param name="tags">标签</param>
        /// <returns>返回 JSON(JObject) 格式的问题列表</returns>
        public async Task <JObject> GetProblemSetProblemsAsync(string tags = null)
        {
            try
            {
                var getParams = new Dictionary <string, string>();
                if (tags != null)
                {
                    getParams.Add("tags", tags);
                }
                var jsonData = await HttpClientSingleton.DoGetAsync(PROBLEMSET_PROBLEMS_URL, getParams);

                return((JObject)JsonConvert.DeserializeObject(jsonData));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
예제 #8
0
        /// <summary>
        /// 根据竞赛 ID 以及提交 ID 查询代码内容
        /// </summary>
        /// <param name="contestId">竞赛 ID</param>
        /// <param name="submissionId">提交 ID</param>
        /// <param name="language">返回所使用的编程语言</param>
        /// <returns>返回指定 ID 的提交代码</returns>
        public async Task <Dictionary <string, string> > GetCodeBySubmissionIdAsync(int contestId, int submissionId)
        {
            try
            {
                var url  = string.Format(CONTEST_SUBMISSION_URL, contestId, submissionId);
                var html = await HttpClientSingleton.DoGetAsync(url);

                var parser   = new HtmlParser();
                var document = parser.Parse(html);
                var preCode  = document.QuerySelector("pre");
                var handle   = document.QuerySelector("#pageContent table td a").TextContent;

                var dictionary = new Dictionary <string, string>();
                dictionary.Add("code", document.QuerySelector("pre").TextContent);
                dictionary.Add("language", preCode.ClassName.Split()[1].Trim());
                dictionary.Add("handle", handle);
                return(dictionary);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }