// Асинхронная загрузка элементов домашней страницы. private async void GetAsyncMyPage() { var taskMe = Task.Run(() => GetIUser()); User me = await taskMe; User GetIUser() { // Получаю адрес собственной аватарки. iAm.Image = service.GetUserProfile(new GetUserProfileOptions()).ProfileImageUrl; // Получение моего ника. iAm.FIO = service.GetUserProfile(new GetUserProfileOptions()).Name; // Получение ника, который через @ пишется. iAm.DogName = "@" + service.GetUserProfile(new GetUserProfileOptions()).ScreenName; // Получение количества друзей. iAm.Follow = service.GetUserProfile(new GetUserProfileOptions()).FriendsCount; // Получение количества подписчиков. iAm.Followers = service.GetUserProfile(new GetUserProfileOptions()).FollowersCount; // Получение первых семи твитов со стены. // Непонятно почему, но иногда твитов для отображения семи нужно требовать 8, 9 или 10. // Поэтому { Count = tweetsCount + 1(или +2, или +3)}. iAm.ListOfTweets = GetTweets (service.ListTweetsOnHomeTimeline(new ListTweetsOnHomeTimelineOptions() { Count = tweetsCount + magic }).ToList()); return(iAm); } // В элементах отображения показываю полученные выше свойства. lstBoxTweetText.ItemsSource = me.ListOfTweets; imgMy.Source = new BitmapImage(new Uri(me.Image)); txtBoxName.Text = me.FIO; txtBoxScreenName.Text = me.DogName; txtBoxUserFriends.Text = me.Follow.ToString(); txtBoxFollowers.Text = me.Followers.ToString(); //Получение списка десяти трендов Москвы. Неинтересно смотреть за трендами мира. trendsList.ItemsSource = service.ListLocalTrendsFor(new ListLocalTrendsForOptions() { Id = 1 }) //trendsList.ItemsSource = service.ListLocalTrendsFor(new ListLocalTrendsForOptions() { Id = 2122265 }) .Where(x => x.Name.StartsWith("#")).OrderBy(y => y.Name).Take(10).ToList(); // Очищаю и заполняю таблицы с данными пользователя и трендами. using (var db = new DiplomContext()) { // Очистка таблицы с данными пользователя. if (db.Users.Count() != 0) { db.Users.Remove(db.Users.First()); } // Очистка таблицы с трендами. var currentTags = db.Hashtags; Hashtag iTag; if (currentTags.Count() != 0) { int numberTags = currentTags.First().Id; for (int i = numberTags; i < currentTags.Count() + numberTags; i++) { iTag = currentTags.Where(x => x.Id == i).First(); currentTags.Remove(iTag); } } db.SaveChanges(); // Заполнение таблицы трендами. int j = 1; foreach (var x in service.ListLocalTrendsFor(new ListLocalTrendsForOptions() { Id = 2122265 })) { db.Hashtags.Add(new Hashtag { Name = x.Name }); j++; } db.SaveChanges(); // Заполнение таблицы данными пользователя. db.Users.Add (new User { DogName = me.DogName, FIO = me.FIO, Followers = me.Followers, Follow = me.Follow, Image = me.Image }); db.SaveChanges(); } }
// Метод для получения твитов. private List <Tweet> GetTweets(List <TwitterStatus> tweets) { var listTweets = new List <Tweet>(); // Создаю семь объектов класса Твит и заполняю ими List. for (int i = 0; i < tweets.Count; i++) { Tweet tw = new Tweet (tweets[i].User.Name, tweets[i].Author.ScreenName, tweets[i].CreatedDate, tweets[i].Text, tweets[i].Author.ProfileImageUrl, tweets[i].Id); // Беру Id седьмого твита и перезаписываю maxId для постраничной загрузки. if (i == tweets.Count - 1) { maxId = tw.Identifier; } listTweets.Add(tw); } // Удаляю последний твит, так как он будет отображаться на следующей странице Твитов. if (tweets.Count != tweetsCount) { listTweets.RemoveAt(tweets.Count - 1); } // Заполняю таблицу с твитами в базе данных. using (var db = new DiplomContext()) { // Очистка данных из таблицы с твитами. var currentTweets = db.Tweets; Tweet iTweet; if (currentTweets.Count() != 0) { int numberTweets = currentTweets.First().Id; for (int i = numberTweets; i < currentTweets.Count() + numberTweets; i++) { iTweet = currentTweets.Where(x => x.Id == i).First(); currentTweets.Remove(iTweet); } } db.SaveChanges(); // Заполнение таблицы твитами. for (int i = 0; i < listTweets.Count; i++) { Tweet tw = listTweets.ElementAt(i); db.Tweets.Add(new Tweet { Identifier = tw.Identifier, Name = tw.Name, DogName = tw.DogName, ImageUrl = tw.ImageUrl, DataInfo = tw.DataInfo, Data = tw.Data, Text = tw.Text }); } try { db.SaveChanges(); } // Здесь я отлавливал исключения при сохранении БД и читал описание ошибок. catch (DbEntityValidationException ex) { foreach (DbEntityValidationResult validationError in ex.EntityValidationErrors) { string x = "Object: " + validationError.Entry.Entity.ToString(); foreach (DbValidationError err in validationError.ValidationErrors) { string y = err.ErrorMessage; } } } } // Сохраняю аватарки только разных авторов твитов. Необязательно разных, т.к. аватарки "лёгкие", но уж сделал. var diffAuthors = listTweets.Select(x => x.DogName).Distinct(); foreach (var x in diffAuthors) { Tweet y = (from tw in listTweets where tw.DogName == x select tw).First(); using (var webClient = new WebClient()) { var url = y.ImageUrl; webClient.DownloadFile(url, y.DogName.Remove(0, 1) + System.IO.Path.GetExtension(url)); } } return(listTweets); }