private void ButtonUpdateDB(object sender, RoutedEventArgs e) { Console.WriteLine(sender.ToString() + ": Обновить бд"); SaveFileDialog save_file_dialog = new SaveFileDialog(); save_file_dialog.Filter = "Database files (*.ldb)|*.ldb|All files (*.*)|*.*"; save_file_dialog.ShowDialog(); if (save_file_dialog.FileName.Count() != 0) { List <string> users_ids = new List <string>(); // Получаем id пользователей из исходной бд Console.WriteLine("Before : " + MainWindow.db_users.Count()); foreach (Human user in MainWindow.db_users) { users_ids.Add(user.vk_id.ToString()); } Console.WriteLine("After : " + users_ids.Count()); // Получаем новую информацию через vk api JArray users_data = VkApiMulti.UsersGet(users_ids, VkApiUtils.fields, "Update"); // Парсим json в Human List <Human> users = new List <Human>(); Parallel.ForEach(users_data, user_data => { lock (users) { users.Add(new Human(user_data, "vk")); } }); // Сохраняем данные в бд MainWindow.db = new DatabaseAPI(); MainWindow.db.saveDB(save_file_dialog.FileName); MainWindow.db.addUsers(users); MainWindow.db_users = MainWindow.db.getAllUsers(); MessageBox.Show("Обновление базы данных завершено!", "Info", MessageBoxButton.OK, MessageBoxImage.Asterisk); Console.WriteLine(sender.ToString() + ": Обнавлена бд: " + save_file_dialog.FileName); this.Close(); } else { Console.WriteLine(sender.ToString() + ": Отмена обновления бд"); } }
/* Метод для сбора данных друзей по списку пользователей * Возвращает массив json */ // TODO Долго работает, много мусора public JArray VkUsersFriendsSearch(List <string> users) { Console.WriteLine("FriendsGet"); timer.Restart(); /* ???? | ???? */ HashSet <string> unique_ids = new HashSet <string>(users); foreach (string user_id in users) { HashSet <string> friends_ids = new HashSet <string>(VkApi.FriendsGet(user_id)); // int trusted_friends = 0; /* * foreach (string check_friend_id in friends_ids) * { * if (users.Contains(check_friend_id)) * { * trusted_friends++; * * } * }*/ if (users.Count(friends_ids.Contains) > friends_ids.Count() * (50.0 / 100.0)) { foreach (string friend_id in friends_ids) { unique_ids.Add(friend_id); } } } timer.Stop(); Console.WriteLine("Найдено " + unique_ids.Count() + " друзей " + timer.Elapsed); Console.WriteLine("UsersGet"); timer.Restart(); /* ???? | ???? */ JArray users_friends_data = VkApiMulti.UsersGet(unique_ids.ToList(), VkApiUtils.fields, "search"); timer.Stop(); Console.WriteLine("Получена информация о " + users_friends_data.Count() + " пользователях и друзьях " + timer.Elapsed); return(users_friends_data); }
/* Метод для сбора данных пользователей с обычного поиска * Возвращает массив json */ private JArray VkDefaultUsersSearch() { Console.WriteLine("UsersSearch"); timer.Restart(); /* 4129 | 1 min 37.36 s */ List <string> search_users_ids = VkApiMulti.UsersSearch(); timer.Stop(); Console.WriteLine("Найдено " + search_users_ids.Count() + " пользователей из миэта по поиску " + timer.Elapsed); Console.WriteLine("UsersGet"); timer.Restart(); /* 4129 | 3.87 s */ JArray search_users_data = VkApiMulti.UsersGet(search_users_ids, VkApiUtils.fields, "search"); timer.Stop(); Console.WriteLine("Получена информация о " + search_users_data.Count() + " пользователях из миэта по поиску " + timer.Elapsed); return(search_users_data); }