/// <summary> /// Inserts GitHub Users to the database. /// </summary> /// <param name="objUsers">Object List of Users</param> public void InsertUsersToDB(GitHubUsers objUsers) { mobjSqlConnection.ConnectionString = mobjSqlConnectionStringBuilder.ConnectionString; mobjSqlConnection.Credential = mobjCredential; try { mobjSqlConnection.Open(); mobjDataAdapters[USERS].FillSchema(mobjDTUsers, SchemaType.Source); mobjDataAdapters[USERS].FillLoadOption = LoadOption.OverwriteChanges; mobjDataAdapters[USERS].Fill(mobjDTUsers); foreach (User objUser in objUsers.Items) { InsertNewUser(objUser); } mobjDataAdapters[USERS].Update(mobjDTUsers); mobjDTUsers.Clear(); mobjDataAdapters[USERS].Fill(mobjDTUsers); mobjSqlConnection.Close(); } catch (Exception Ex) { throw new Exception("Failed Insert Users to the database.", Ex); } }
/// <summary> /// Return up to 1000 Users From github Search. /// </summary> /// <param name="strQueryPrameter">User Login name to search</param> /// <returns></returns> public static async Task <GitHubUsers> GetUsersAsync(string strQueryPrameter) { string strSearchPath; string strResponseData; GitHubUsers objGitHubUsers = null; int intNumberOfPages = 10; try { for (int intPageNumber = 1; intPageNumber <= intNumberOfPages; intPageNumber++) { System.Threading.Thread.Sleep(200); strSearchPath = string.Format(@"search/users?q={0}+type:user&page={1}&per_page=100", strQueryPrameter, intPageNumber); HttpResponseMessage objResponse = mobjClient.GetAsync(strSearchPath).Result; objResponse.EnsureSuccessStatusCode(); if (objResponse.IsSuccessStatusCode) { strResponseData = await objResponse.Content.ReadAsStringAsync(); if (objGitHubUsers == null) { objGitHubUsers = JsonConvert.DeserializeObject <GitHubUsers>(strResponseData); } else { objGitHubUsers.Items.AddRange( JsonConvert.DeserializeObject <GitHubUsers>(strResponseData).Items); } if (objGitHubUsers.Total_Count < 1000) { intNumberOfPages = (objGitHubUsers.Total_Count / 100) + 1; } } } return(objGitHubUsers); } catch (HttpRequestException HttpEx) { Console.WriteLine(HttpEx.Message); throw new Exception("Failed on request Search Users", HttpEx); } catch (Exception Ex) { Console.WriteLine(Ex.Message); throw new Exception("Failed to get Users Async.", Ex); } }
/// <summary> /// Updates Extra Users Data from GitHub. /// GitHub requests Limit to 5000. /// </summary> /// <param name="objGitHubUsers">List of GitHub users from the search result</param> /// <returns></returns> public static async Task <GitHubUsers> GetUsersDataAsync(GitHubUsers objGitHubUsers) { string strSearchPath; string strResponseData; User objUserData = null; try { foreach (User objUser in objGitHubUsers.Items) { try { strSearchPath = string.Format(@"users/{0}", objUser.Login); System.Threading.Thread.Sleep(200); HttpResponseMessage objResponse = mobjClient.GetAsync(strSearchPath).Result; objResponse.EnsureSuccessStatusCode(); if (objResponse.IsSuccessStatusCode) { strResponseData = await objResponse.Content.ReadAsStringAsync(); objUserData = JsonConvert.DeserializeObject <User>(strResponseData); objUser.Update(objUserData); } } catch (HttpRequestException HttpEx) { Console.WriteLine(string.Format("Not all User Data Updated for user: {0}", objUser.Login)); } } return(objGitHubUsers); } catch (Exception Ex) { Console.WriteLine(Ex.Message); throw new Exception("Failed to get User's Data Async.", Ex); } }