API для работы с ВКонтакте. Выступает в качестве фабрики для различных категорий API (например, для работы с пользователями, группами и т.п.).
예제 #1
1
        static void Main(string[] args)
        {
            int appID = 5293954;  //id приложения, который выдается при регистрации приложения в ВК
            string login = "******";// логин и пороль пользователя
            string password = "******";  // в целях безопасности моей страницы в ВК, пороль не настоящий
            Settings scope = Settings.Groups;
            var vk = new VkApi();
            vk.Authorize(appID, login, password, scope); // авторизация --> documentation https://vknet.github.io/vk/authorize/

            int outCount;
            Group embassyUSA = vk.Groups.Search("Посольство США в Беларуси", out outCount).First();// получаем данные о группе

            PhotoGetAlbumsParams param = new PhotoGetAlbumsParams();
            param.OwnerId = embassyUSA.Id * (-1); // индентификатор группы, для полуния ее альбомов (умножен на -1, так как cказано в документации API -> https://vknet.github.io/vk/photos/getAlbums/)
            param.Count = 7;
            int count = 0;
            var albums = vk.Photo.GetAlbums(out count, param);// получаем все альбомы

            var selfieAlbum = albums.Where(x => x.Title == "Selfie Contest").First(); // выбираем альбом по названию, в котором фото учасников

            PhotoGetParams photoParam = new PhotoGetParams();
            photoParam.OwnerId = embassyUSA.Id * (-1); // индентификатор группы, для полуния ее альбомов (умножен на -1, так как cказано в документации API -> https://vknet.github.io/vk/photos/get/)
            photoParam.AlbumId = PhotoAlbumType.Id(selfieAlbum.Id); // тут указываем, индентификатор альбома, фотографии которого нам нужны
            photoParam.Extended = true;
            photoParam.Count = 82;
            var selfiePhotos = vk.Photo.Get(out count, photoParam);// получаем список фотографий

            int number = 1;// счетчик номера фотографии
            foreach (var photo in selfiePhotos)//перебираем фотографии по одной, начиная с первой
            {
                LikesGetListParams listParam = new LikesGetListParams();
                listParam.Count = 500;
                listParam.ItemId = photo.Id.Value; //берем индентификатор текущей фотографии
                listParam.Type = LikeObjectType.Photo;
                listParam.Filter = LikesFilter.Likes; // говорим, что хотим получить информацию о лайках пользователей
                listParam.OwnerId = embassyUSA.Id * (-1); // указываем индентификатор владельца фотографи, т. е. вашей группы
                var users = vk.Likes.GetList(listParam); // получаем список пользователей лайкнувших данную фотографию --> documentation https://vknet.github.io/vk/likes/getList/

                int inGroup = 0; // счетчик для количества, лайкнувших текущую фотографию, пользователей, которые состоят в группе.
                foreach (var id in users)//перебираем пользователей, лайкнувших текущую фотографию, по одному, начиная с первого
                {
                    Thread.Sleep(400);// приостанавливаем программу на 0.4 секунды, так как есть ограничение на количество запросов к Вконтакте в секунду.
                    if (vk.Groups.IsMember(embassyUSA.Id, id))//проверяем состоит ли текущий пользователь в группе --> documentation https://vknet.github.io/vk/groups/isMember/
                    {
                        inGroup = inGroup + 1; // если состоит, увеличиваем счетчик на 1
                    }
                }

                Console.WriteLine(String.Format("{0}    Likes - {1}      InGroup - {2} ", number, users.Count, inGroup)); // Отображаем информациию на консоль.
                number++;
            }
            Console.ReadLine();// Ждем нажатия клавиши интер, после чего приложение(консоль) закрывается.
        }
        private void authButton_Click(object sender, RoutedEventArgs e)
        {
            if (tbLogin.Text == "" || tbPassword.Password == "")
                MessageBox.Show("Please, fill all the fields!", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
            else
            {
                var vkApi = new VkApi();
                try
                {
                    vkApi.Authorize(Convert.ToInt32(Properties.Settings.Default.appId), tbLogin.Text, tbPassword.Password.ToString(), VkNet.Enums.Filters.Settings.All);
                    Properties.Settings.Default.token = vkApi.AccessToken;
                    Properties.Settings.Default.id = vkApi.UserId.ToString();
                    Properties.Settings.Default.auth = true;
                    Properties.Settings.Default.Save();
                    this.Close();
                }

                catch (Exception ex) 
                {
                    MessageBox.Show(ex.ToString());
                }
            }
        }
예제 #3
0
        ////   private VkApi api;
        //   public VkNetAddition(VkApi vkApi) {
        //       now = DateTime.Now;
        //       api = vkApi;
        //   }
        public List<User> Search(VkApi api, out int itemsCount, string query = null, int count = 1000, int offset = 0, Dictionary<string, string> parameters = null)
        {
            List<User> users = new List<User>();
            StringBuilder sb = new StringBuilder("https://api.vk.com/method/users.search?");
            if (query != null)
                sb.AppendFormat("{0}={1}&", "q", query);
            if (parameters != null) {
                foreach (var parameter in parameters) {
                    sb.AppendFormat("{0}={1}&", parameter.Key, parameter.Value);
                }
            }

            sb.AppendFormat("v=5.37&access_token={0}", api.AccessToken);
            itemsCount = int.Parse(request(String.Format("{2}&{0}={1}", "count", count, sb.ToString()))["response"]["count"].ToString());

            JObject jUsers = request(String.Format("{2}&{0}={1}&{3}={4}", "count", count > 1000 ? 1000 : count, sb.ToString(), "offset", offset));
            Members[] members = JsonConvert.DeserializeObject<Members[]>(jUsers["response"]["items"].ToString());
            foreach (var member in members) {
                User user = new User();
                user.Id = member.id;
                user.FirstName = member.first_name;
                user.LastName = member.last_name;
                users.Add(user);

            }

            return users;
        }
예제 #4
0
 public VKController(VkApi api = null)
 {
     if (api == null)
         API = new VkApi();
     else
         API = api;
 }
예제 #5
0
        public TelegramSender(IConfiguration configuration, ILogger <VkApi> logger)
        {
            var tokens = configuration.GetSection("Tokens").Get <TokenConfig>();

            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
            _userId                    = tokens.TelegramId;
            _telegram                  = new TelegramBotClient(tokens.Telegram);
            _telegram.OnMessage       += _telegram_OnMessage;
            _telegram.OnMessageEdited += _telegram_OnMessageEdited;
            _telegram.OnCallbackQuery += _telegram_OnCallbackQuery;
            _telegram.StartReceiving();
            _vkNet = new VkApi(logger);
            _vk    = new Vkontakte(0)
            {
                AccessToken = new VkLibrary.Core.Auth.AccessToken
                {
                    Token     = tokens.Vk,
                    ExpiresIn = 0
                }
            };
            _vkNet.Authorize(new VkNet.Model.ApiAuthParams {
                AccessToken = tokens.Vk
            });

            var poolServer = _vkNet.Messages.GetLongPollServer();

            _vkPool = _vk.StartLongPollClient(poolServer.Server, poolServer.Key, (int)poolServer.Ts).GetAwaiter().GetResult();
            _vkPool.AddMessageEvent += _vkPool_AddMessageEvent;
            _httpClient.DefaultRequestHeaders.Add("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36");
        }
예제 #6
0
 public VkAuthorizer(VkApi api, int appId, string userName, string password)
 {
     this.api = api;
     this.appId = appId;
     this.userName = userName;
     this.password = password;
 }
예제 #7
0
        public Home()
        {
            vk = Vk_Api.getAPI();

            InitializeComponent();
            getRemember();
        }
예제 #8
0
파일: Form1.cs 프로젝트: cancelledbit/vkd
 private void bSave_Click(object sender, EventArgs e)
 {
     WebClient webc = new WebClient();
     pb1.Visible = true;
     pb1.Maximum = mList.Items.Count;
     pb1.Minimum = 1;
     pb1.Step = 1;
     pb1.Value = 1;
     int appID = 5272595;                      // ID приложения
     string email = "your email";         // email или телефон
     string pass = "******";               // пароль для авторизации
     Settings scope = Settings.All;  
     var vks = new VkApi();
     vks.Authorize(appID, email, pass, scope);
     int totalCount;
     for(int i = 0;i <= mList.Items.Count;i++)
     {
         try
         {
             var audios = vks.Audio.Search(mList.Items[i].ToString(), out totalCount);
             Uri u = new Uri(audios[0].Url.OriginalString);
             webc.DownloadFile(u, @"E:\music\" + audios[0].Title + ".mp3");
             pb1.PerformStep();
         }
         catch(Exception exc)
         {
             MessageBox.Show(exc.Message);
         }
     }
     
 }
예제 #9
0
 public static void Save(VkApi api, User user)
 {
     saveData = new SaveData();
     saveData.Api = new VkApi();
     saveData.User = new User();
     saveData.Api = api;
     saveData.User = user;
 }
예제 #10
0
 private VkApiFactory()
 {
     vk = new VkApi();
     vk.isDefaultVkApi = true;
     vk.email = email;
     vk.Authorize(appID, email, pass, scope);
     timer = new Timer(relogin, null, interval1day, interval1day);
 }
예제 #11
0
파일: Crawler.cs 프로젝트: Dozer74/Crawler
 public Crawler(VkApi api, IConnectionChecker checker, IAuthorizer authorizer, IUrlConverter converter, IDatabaseProvider databaseDbProvider, IGroupInfoProvider groupInfoProvider)
 {
     this.api = api;
     this.checker = checker;
     this.converter = converter;
     this.authorizer = authorizer;
     this.dbProvider = databaseDbProvider;
     this.groupInfoProvider = groupInfoProvider;
 }
예제 #12
0
        public static VkApi getAPI()
        {
            if (API == null)
            {
                API = new VkApi();

            }

            return API;
        }
예제 #13
0
 public List<VkApi> botAutorization(StreamReader sr, int count, int appId)
 {
     List<VkApi> result = new List<VkApi>();
     for (int i = 0; i < count; i++) {
         string[] login_pass = sr.ReadLine().Split(';');
         VkApi api = new VkApi();
         try {
             api.Authorize(appId, login_pass[0], login_pass[1], VkNet.Enums.Filters.Settings.All); // авторизуемся
         }
         catch (VkNet.Exception.VkApiAuthorizationException) {
             MessageBox.Show(string.Format("Проблема с авторизацией у {0};{1}", login_pass[0], login_pass[1]));
             break;
         }
         result.Add(api);
     }
     return result;
 }
예제 #14
0
        private void authorizationBeta()
        {
            try
            {
                int appID = 12345;                      // ID приложения
                string email = "+380931296865";         // email или телефон
                string pass = "******";               // пароль для авторизации
                Settings scope = Settings.All;

                vk = new VkApi();
                vk.Authorize(appID, email, pass, scope);
                
                MessageBox.Show("Авторизация прошла успешно");
            }
            catch (VkApiAuthorizationException e) {MessageBox.Show(e.Message); }
            catch (VkApiException e) { MessageBox.Show(e.Message); }
            catch (Exception e) { MessageBox.Show(e.Message); }
        }
예제 #15
0
 public VkApi getVkApi(string email, string pass, Settings settings)
 {
     if(timersPool.ContainsKey(email))
     {
         return timersPool[email].vk;
     } else
     {
         vk = new VkApi();
         vk.isDefaultVkApi = false;
         vk.email = email;
         vk.Authorize(appID, email, pass, settings);
         VkApiWrapper wrap = new VkApiWrapper();
         wrap.vk = vk;
         wrap.password = pass;
         wrap.settings = settings;
         timersPool[email] = wrap;
         return vk;
     }
 }
예제 #16
0
        public MusicLoader(string syncDir, string token, long userId)
        {
            DependencyUtility.BuildUp(this);

            syncDirectory = syncDir;
            this.userId = userId;

            api = new VkApi();
            api.Authorize(token, userId);
            api.Invoke("stats.trackVisitor", new Dictionary<string, string>(), true); // статистика посещаемости приложения

            remoteAudioSizeHelper = new RemoteAudioSizeHelper(Path.Combine(AppPaths.SettingsPath, "sizes.dat"));

            tracks = new ConcurrentSortedList<int, Track>();

            int key = 0;
            foreach (var track in TrackRepository.GetTracks())
                tracks.Add(key++, track);
        }
예제 #17
0
        public WallWatcher(VkApi api, long gid)
        {
            API = api;
            OwnerId = gid;

            Active = false;
            LastPostId = -1;
            FixedPostId = -1;

            TooManyRequestsDelay = 150;
        }
예제 #18
0
파일: Account.cs 프로젝트: Se11eR/Puckevich
        private void InitProviders(IWebDownloader downloader, VkApi api, long user)
        {
            PlayingStateChangedEventHandler handler;
            var factory = GetFactory(downloader, out handler);

            __InfoProvider =
                new AudioInfoProvider((userId, count, offset) => api.Audio.Get(userId, null, null, count, offset),
                    userId => api.Audio.GetCount(userId),
                    factory,
                    user,
                    handler);

            __InfoCacheOnlyProvider = new AudioInfoCacheOnlyProvider(factory, __AudioStorage, user, handler);
        }
예제 #19
0
        private void downloadProfiles_Click(object sender, EventArgs e)
        {
            fromFile = radioButton2.Checked;
            int appId = 4736419; // указываем id приложения
            string email = getLogin(0);//"*****@*****.**"; // email для авторизации
            string password = getPass(0);//"qwerty123"; // пароль
            Settings settings = Settings.All; // уровень доступа к данным
            int oldGRM = gRM;
            int oldGRF = gRF;
            var api = new VkApi();
            try
            {
                api.Authorize(appId, email, password, settings); // авторизуемся
            }
            catch (VkNet.Exception.VkApiAuthorizationException)
            {
                MessageBox.Show("Проблема с авторизацией");
                return;
            }
            var group = api.Utils.ResolveScreenName(getGroup()); // получаем id сущности с коротким именем habr

            // получаем id пользователей из группы, макс. кол-во записей = 1000
            int totalCountMembers; // общее кол-во участников
            ReadOnlyCollection<long> userId;
            StreamWriter sw = new StreamWriter("ids.txt");
            int tmp = getOffset();
            while (tmp < (getCount() + getOffset()))
            {
                try
                {
                    userId = api.Groups.GetMembers(group.Id.Value, out totalCountMembers, getCount(), getOffset());
                    tmp += 1000;
                }
                catch (NullReferenceException)
                {
                    MessageBox.Show("Группа указана не верно");
                    return;
                }

                foreach (long id in userId)
                {
                    sw.WriteLine(id);
                }
            }
            sw.Close();
            gRF = oldGRF;
            gRM = oldGRM;
            MessageBox.Show("Complete");
        }
예제 #20
0
 public VkSocialApi(VkApi vkApi)
 {
     _vkApi = vkApi;
 }
예제 #21
0
 //Methods
 public SignInViewModel()
 {
     scope = Settings.All;
     User = new User();
     authInformation = new AuthInformation();
     api = new VkApi();
     MainWindow.messageManager = new MessageManager();
 }
예제 #22
0
 private void Form1_Load(object sender, EventArgs e)
 {
     vkapi = new VkApi();
     vkapi.Authorize(appId, myTel, myPass, Settings.Groups | Settings.Wall);
     token = vkapi.AccessToken;
 }
예제 #23
0
 private Vk_Api()
 {
     VkApi api = new VkApi();
 }
예제 #24
0
 public CrawlerStatistic(VkApi api)
 {
     vkapi = api;
 }
예제 #25
0
 private void LongPool_NewMessages(VkApi owner, ReadOnlyCollection<Message> messages)
 {
     if (NewMessages != null)
         NewMessages(owner, messages);
 }
예제 #26
0
파일: Account.cs 프로젝트: Se11eR/Puckevich
        private long GetUserIdFromString(VkApi api, string id)
        {
            long longId;
            if (id.StartsWith("id"))
            {
                id = id.Substring(2);
                if (Int64.TryParse(id, out longId))
                    return longId;
            }
            
            var dict = new Dictionary<string, string>();
            dict.Add("user_ids", id);
            try
            {
                var res = api.Invoke("users.get", dict, true);

                var serializer = new JsonSerializer();
                dynamic resDict =
                    serializer.Deserialize(new JsonTextReader(new StringReader(res)));

                id = resDict["response"][0]["uid"];
                if (!Int64.TryParse(id, out longId))
                    throw new AuthIDException("Invalid id!");
                return longId;
            }
            catch
            {
                throw new AuthIDException("Invalid id!");
            }
        }
예제 #27
0
파일: MainForm.cs 프로젝트: G-IT-ED/vk
        private void btnRun_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(tbMethodName.Text))
            {
                MessageBox.Show("Не указано имя метода!");
                return;
            }

            // get authorization values from app.config
            int appId;
            try
            {
                string appIdValue = ConfigurationManager.AppSettings["appId"];
                appId = Convert.ToInt32(appIdValue);
            }
            catch (FormatException)
            {
                MessageBox.Show("Ошибка в разборе appId из app.config", "Ошибка приложения", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            string login = ConfigurationManager.AppSettings["login"];
            string password = ConfigurationManager.AppSettings["password"];

            btnRun.Enabled = btnGetTest.Enabled = false;

            // Authorize on vk server
            var api = new VkApi();
            try
            {
                api.Authorize(appId, login, password, Settings.All);
            }
            catch (VkApiException)
            {
                MessageBox.Show("Ошибка авторизации. Проверьте данные в app.config.", "Ошибка приложения", MessageBoxButtons.OK, MessageBoxIcon.Error);
                btnRun.Enabled = btnGetTest.Enabled = true;
                return;
            }

            // Combine parameters
            var parameters = new VkParameters();
            for (int i = 1; i < 11; i++)
            {
                var name = (TextBox) pnlParams.Controls.Find(string.Format("tbParamName{0}", i), false)[0];
                var value = (TextBox)pnlParams.Controls.Find(string.Format("tbParamValue{0}", i), false)[0];

                string paramName = name.Text.Trim();
                string paramValue = value.Text.Trim();

                if (string.IsNullOrEmpty(paramName)) continue;

                parameters.Add(paramName, paramValue);
            }

            string methodName = tbMethodName.Text.Trim();

            VkResponse response;
            try
            {
                response = api.Call(methodName, parameters);
            }
            catch (VkApiException ex)
            {
                MessageBox.Show(ex.InnerException != null ? ex.InnerException.Message : ex.Message, "Ошибка приложения",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
                btnRun.Enabled = btnGetTest.Enabled = true;
                return;
            }

            tbJson.Text = response.RawJson;

            _apiUrl = api.GetApiUrl(methodName, parameters);
            llVkApiUrl.Text = _apiUrl.Length > 80 ? _apiUrl.Substring(0, 80) + "..." : _apiUrl;

            btnRun.Enabled = btnGetTest.Enabled = true;
        }
예제 #28
0
        void start(int nOfBot)
        {
            int appId = 4736419; // указываем id приложения
            string email = getLogin(nOfBot);//"*****@*****.**"; // email для авторизации
            string password = getPass(nOfBot);//"qwerty123"; // пароль
            Settings settings = Settings.All; // уровень доступа к данным

            var api = new VkApi();
            try
            {
                api.Authorize(appId, email, password, settings); // авторизуемся
            }
            catch (VkNet.Exception.VkApiAuthorizationException)
            {
                MessageBox.Show("Проблема с авторизацией");
                return;
            }
            var group = api.Utils.ResolveScreenName(getGroup()); // получаем id сущности с коротким именем habr
            var userIds = new List<long>();
            StreamReader sr = new StreamReader("ids.txt");
            while (!sr.EndOfStream)
                userIds.Add(long.Parse(sr.ReadLine()));
            sr.Close();
            StreamWriter sw = new StreamWriter("ids.txt");
            foreach (long id in userIds)
            {
                if (getRequiredMessages() == 0 && getRequiredFriends() == 0)
                {
                    sw.WriteLine(id);
                    break;
                }
                if (!api.Users.Get(id).CanWritePrivateMessage && getRequiredMessages() > 0)
                {
                    sendMessage(api, id);
                    gRM--;
                }
                else if (getRequiredFriends() > 0)
                {
                    if (id == api.UserId)
                        break;
                    api.Friends.Add(id);
                    gRF--;
                }
                else
                    sw.WriteLine(id);

            }
            getRequiredFriends();
            getRequiredMessages();

            sw.Close();
        }
예제 #29
0
 void sendMessage(VkApi api, long id)
 {
     string tmp = "";
     if (srMes.EndOfStream)
     {
         srMes.Close();
         srMes = new StreamReader(openFileDialog2.FileName);
     }
     tmp = srMes.ReadLine();
     while (tmp[tmp.Length - 1] != '*')
     {
         if (srMes.EndOfStream)
         {
             srMes.Close();
             srMes = new StreamReader(openFileDialog2.FileName);
         }
         api.Messages.Send(id, false, tmp); // посылаем сообщение пользователю
         tmp = srMes.ReadLine();
     }
 }
예제 #30
0
파일: Account.cs 프로젝트: Se11eR/Puckevich
        private void InitInternal(string email, string password, IWebDownloader downloader, 
            string userId = null)
        {
            var api = new VkApi();
            try
            {
                api.Authorize(APP_ID, email, password, Settings.Audio);
            }
            catch (Exception e)
            {
                throw new AuthException("Authorization error! Original exception:\n" + e.ToString());
            }

            var id = userId != null ? GetUserIdFromString(api, userId) : api.UserId.Value;
            UserFirstName = api.Users.Get(id).FirstName;
            InitProviders(downloader, api, id);
            __AudioStorage.StoreLastUserId(userId);
            if (userId != null)
                __AudioStorage.StoreUserAlias(userId, id, UserFirstName);
            __IsInit = true;
        }
예제 #31
0
        public string GenerateUnitTest(string categoryName, string accessToken)
        {
            // 1. read assembly
            // 2. find methods in particular category
            // 3. find methods with not input parameters (it's the most simple case)
            // 4. invoke a method
            // 5. construct unit-test
            // 6. return it

            Assembly dll = Assembly.LoadFrom("VkNet.dll");

            // todo refactor it later
            List<Type> classes = dll.GetTypes().Where(t => t.Name.Contains("Category") && t.Name.Contains(categoryName)).ToList();

            Type category = classes.FirstOrDefault();

            MethodInfo[] methods = category.GetMethods(BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.Public);

            var genMethods = new List<VkMethodGenInfo>();
            foreach (var methodInfo in methods)
            {
                var genInfo = GetMethodData(methodInfo);

                if (string.IsNullOrEmpty(genInfo.ApiMethod)) continue;

                Debug.WriteLine(genInfo.ToString());

                genMethods.Add(genInfo);

            }

            // invoke and get json and url
            var api = new VkApi();

            api.Authorize(accessToken);
            // TODO must be authorized

            var unittests = new List<UnitTestInfo>();

            var testCategory = new StringBuilder();
            foreach (var m in genMethods)
            {
                if (m.Skip) continue;

                var test = new UnitTestInfo
                {
                    Name = string.Format("{0}_", m.Name),
                    Url = Utilities.PreetyPrintApiUrl(api.GetApiUrl(m.ApiMethod, m.Params))
                };

                // TODO refactor this shit
                int index = test.Url.IndexOf("access_token", StringComparison.InvariantCulture);
                if (index != -1)
                {
                    test.Url = test.Url.Substring(0, index) + "access_token=token\";";
                }

                test.Json = Utilities.PreetyPrintJson(api.Invoke(m.ApiMethod, m.Params));

                unittests.Add(test);

                testCategory.Append(test);
            }

            File.WriteAllText(@"d:\vk.txt", testCategory.ToString());

            return string.Empty;

            //throw new NotImplementedException();
        }