//was work2 before public async Task InfluencersFriendsSearch(IUser user, int index) { try { var timeline = await ProFeedTwitterModel.GetUserTimeline(user); var fullUser = await ProFeedTwitterModel.GetUserByID(user.Id); //need to test await taskSemaphore.WaitAsync(); SearchData.FinalList.Add(new TProfile()); var inBusiness = ProFeedAlgorithm.IsProfetional(timeline, SearchData.SearchKeys, SearchData.FinalList.Last()); //to here if (inBusiness > ProFeedApiParameters.ProFeedAppParameters.PRO_RANGE) { InsertDataToTProfile(user, index); SearchData.FinalList.Last().Profetional = true; ProFeedAlgorithm.RankingStage(fullUser, SearchData.FinalList.Last()); } else { SearchData.FinalList.Remove(SearchData.FinalList.Last()); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } finally { taskSemaphore.Release(); } }
//was work before public async Task InfluencersToProfile(IUser user, int index) { try { var timeline = await ProFeedTwitterModel.GetUserTimeline(user); var fullUser = await ProFeedTwitterModel.GetUserByID(user.Id); //need to test await taskSemaphore.WaitAsync(); SearchData.FinalList.Add(new TProfile()); var inBusiness = ProFeedAlgorithm.IsProfetional(timeline, SearchData.SearchKeys, SearchData.FinalList.Last()); //to here InsertDataToTProfile(user, index); if (inBusiness > ProFeedApiParameters.ProFeedAppParameters.MIN_RANGE) { SearchData.FinalList.Last().Profetional = true; if (!ProFeedAlgorithm.Profetionals.Equals(user)) { if (ProFeedAlgorithm.Profetionals.Count > 4) { ProFeedAlgorithm.Profetionals.RemoveAt(0); } ProFeedAlgorithm.Profetionals.Add(user); } } ProFeedAlgorithm.RankingStage(fullUser, SearchData.FinalList.Last()); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { taskSemaphore.Release(); } }
public async Task <TData> StartSearch(string query) { //step 1 - searchQuery = ProFeedAlgorithm.QuerySearchKeys(query); SearchData.SearchKeys.AddRange(searchQuery); string insertToAppStackTrace = "SearchQuery:" + query; SearchData.AppStackTrace.Add(insertToAppStackTrace); var tweets = await ProFeedTwitterModel.GetTwittsByQuery((string)SearchData.SearchKeys[(SearchData.SearchKeys.Count - 1)], ProFeedApiParameters.ProFeedAppParameters.MINIMUM_RETWEETS); insertToAppStackTrace = "Number of tweet in initial request:" + tweets.Length; SearchData.AppStackTrace.Add(insertToAppStackTrace); var influencers = ProFeedAlgorithm.PreliminaryFiltering(tweets); insertToAppStackTrace = "Number of Influencers after preliminary filtering:" + influencers.Count; SearchData.AppStackTrace.Add(insertToAppStackTrace); //step 2 - List <Task> threads = new List <Task>(); int influencerIndex = 0; foreach (IUser iUser in influencers) { //await TwitterModel.GetUserTimeline(iUser); influencerIndex = influencers.IndexOf(iUser); var newTaskToAdd = Task.Factory.StartNew(async() => await InfluencersToProfile(iUser, influencerIndex)); threads.Add(newTaskToAdd.Unwrap()); } try { await WaitAllTasks(threads); } catch (Exception ex) { Console.WriteLine(ex.Message); } //works to here 11-04-21 //step 3- insertToAppStackTrace = "Number of Influencers with potential influencers friends:" + ProFeedAlgorithm.Profetionals.Count; SearchData.AppStackTrace.Add(insertToAppStackTrace); ProFeedAlgorithm.ClearLists(); threads.Clear(); int influencerCount = SearchData.FinalList.Count; int potentialInfluencerIndex = 1; foreach (IUser user in ProFeedAlgorithm.Profetionals) { // TwitterModel.UpdateTwitterClient(); try { var userFriends = await ProFeedTwitterModel.GetUserFriends(user.Id); insertToAppStackTrace = "Number of friends for influencer" + potentialInfluencerIndex + ":" + userFriends.Length; SearchData.AppStackTrace.Add(insertToAppStackTrace); influencers = ProFeedAlgorithm.PreliminaryFiltering(userFriends); insertToAppStackTrace = "Number of potential influencers from Influencer" + potentialInfluencerIndex + " friends:" + influencers.Count; SearchData.AppStackTrace.Add(insertToAppStackTrace); } catch (Exception ex) { Console.WriteLine(ex.Message); } foreach (IUser iUser in influencers) { influencerIndex = influencers.IndexOf(iUser); var temp = Task.Factory.StartNew(async() => await InfluencersFriendsSearch(iUser, influencerIndex)); threads.Add(temp); } try { await WaitAllTasks(threads); ProFeedAlgorithm.ClearLists(); threads.Clear(); insertToAppStackTrace = "Number of new influencers from Influencer" + potentialInfluencerIndex + " friends:" + (SearchData.FinalList.Count - influencerCount); SearchData.AppStackTrace.Add(insertToAppStackTrace); potentialInfluencerIndex++; influencerCount = SearchData.FinalList.Count; } catch (Exception ex) { Console.WriteLine(ex.Message); } } insertToAppStackTrace = "Final number of influencers" + SearchData.FinalList.Count; SearchData.AppStackTrace.Add(insertToAppStackTrace); var result = SearchData.FinalList.OrderByDescending(OrderFunc).Take(10).ToList(); SearchData.FinalList = result; return(SearchData); }