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); }
/* Метод для сбора данных пользователей с публичных групп * Возвращает массив json */ private JArray VkPublicGroupsSearch() { Console.WriteLine("GroupsSearch"); timer.Restart(); /* 335 | 16.42 s */ List <int> public_groups_ids = VkApiMulti.GroupsSearch(new List <string>() { "miet", "миэт" }); timer.Stop(); Console.WriteLine("Найдено " + public_groups_ids.Count() + " публичных миэтовских групп " + timer.Elapsed); Console.WriteLine("GroupsGetMembers"); timer.Restart(); /* 20330 | 54.46 s */ JArray public_groups_members_data = VkApiMulti.GroupsGetMembers(public_groups_ids.Select(x => x.ToString()).ToList()); timer.Stop(); Console.WriteLine("Получена информация о " + public_groups_members_data.Count() + " пользователях в публичных миэтовских группах " + timer.Elapsed); return(public_groups_members_data); }
/* Метод для сбора данных пользователей с локальных групп * Возвращает массив json */ private JArray VkLocalGroupsSearch() { List <string> words = new List <string>() { "миэт", "miet", "бмс", "bms", "bmc", "мпитк", "мп", "mp", "mpitk", "вт", "vt", "экт", "ekt", "ect", "иняз", "inyas", "inyaz", "прит", "prit", "итс", "its", "мэ", "me", "инэуп", "ineup", "иэмс", "iems", "оиг", "oig", "вм", "vm", "иб", "ib", "мпв", "mpv", "мртус", "mrtus", "игд", "ipovs", "мфэ", "mfe", "оф", "of", "китис", "kitis", "п", "пэ", "саук", "sauk", "sayk", "кфн", "kfn", "эим", "eim", "эу", "eu", "миуп", "miup", "эув", "euv", "ius", "пкимс", "pkims", "сск", "ssk", "cck", "ткс", "tks", "фсип", "fcip", "иус", "ато", "ato", "итуутс", "ituuts" }; Console.WriteLine("GroupsSearch"); timer.Restart(); /* 18954 | 1 min 0.40 s */ List <int> local_not_checked_groups_ids = VkApiMulti.GroupsSearch(words); timer.Stop(); Console.WriteLine("Найдено " + local_not_checked_groups_ids.Count() + " локальных групп " + timer.Elapsed); Console.WriteLine("LocalMietGroupCheck"); timer.Restart(); /* 7517 | 8 min 59.31 s */ JArray local_groups_members_data = VkApiMulti.LocalMietGroupCheck(local_not_checked_groups_ids.Select(x => x.ToString()).ToList()); timer.Stop(); Console.WriteLine("Получена информация о " + local_groups_members_data.Count() + " пользователях в локальных миэтовских группах " + timer.Elapsed); return(local_groups_members_data); }