예제 #1
0
        /// <inheritdoc />
        public WallGetObject GetById(IEnumerable <string> posts
                                     , bool?extended          = null
                                     , long?copyHistoryDepth  = null
                                     , ProfileFields fields   = null
                                     , bool skipAuthorization = false)
        {
            if (posts == null)
            {
                throw new ArgumentNullException(paramName: nameof(posts));
            }

            if (!posts.Any())
            {
                throw new ArgumentException(message: "Posts collection was empty.", paramName: nameof(posts));
            }

            var parameters = new VkParameters
            {
                { "posts", posts }
                , { "extended", extended }
                , { "copy_history_depth", copyHistoryDepth }
                , { "fields", fields }
            };

            return(_vk.Call(methodName: "wall.getById", parameters: parameters, skipAuthorization: skipAuthorization));
        }
예제 #2
0
        public VkCollection <User> GetFollowers(long?userId              = null
                                                , int?count              = null
                                                , int?offset             = null
                                                , ProfileFields fields   = null
                                                , NameCase nameCase      = null
                                                , bool skipAuthorization = false)
        {
            VkErrors.ThrowIfNumberIsNegative(expr: () => userId);
            VkErrors.ThrowIfNumberIsNegative(expr: () => count);
            VkErrors.ThrowIfNumberIsNegative(expr: () => offset);

            var parameters = new VkParameters
            {
                { "user_id", userId }
                , { "offset", offset }
                , { "count", count }
                , { "fields", fields }
                , { "name_case", nameCase }
            };

            return(_vk.Call(methodName: "users.getFollowers", parameters: parameters, skipAuthorization: skipAuthorization)
                   .ToVkCollectionOf(selector: x => x.ContainsKey(key: "id") ? x : new User {
                Id = x
            }));
        }
예제 #3
0
        public User Get(long userId, ProfileFields fields = null, NameCase nameCase = null, bool skipAuthorization = false)
        {
            VkErrors.ThrowIfNumberIsNegative(expr: () => userId);
            var users = Get(userIds: new[] { userId }, fields: fields, nameCase: nameCase, skipAuthorization: skipAuthorization);

            return(users.FirstOrDefault());
        }
예제 #4
0
        public SearchDialogsResponse SearchDialogs([NotNull] string query, ProfileFields fields = null)
        {
            if (string.IsNullOrEmpty(query))
            {
                throw new ArgumentException("Query can not be null or empty.", "query");
            }

            var parameters = new VkParameters {
                { "q", query }, { "fields", fields }
            };

            VkResponseArray response = _vk.Call("messages.searchDialogs", parameters);

            var result = new SearchDialogsResponse();

            foreach (var record in response)
            {
                string type = record["type"];
                if (type == "profile")
                {
                    result.Users.Add(record);
                }
                else if (type == "chat")
                {
                    result.Chats.Add(record);
                }
                // TODO: Add email support.
            }
            return(result);
        }
예제 #5
0
        public List <UserExtended> GetUsersByIds(List <long> userIds, ProfileFields profileFields = null)
        {
            if (profileFields == null)
            {
                profileFields = ProfileFields.All;
            }
            var       users = new List <UserExtended>();
            const int step  = 100;

            using (var api = _apiFactory.CreateVkApi())
            {
                var count = userIds.Count;
                for (var offset = 0; offset <= count; offset = offset + step)
                {
                    var idsChunk = userIds.Skip(offset).Take(step);
                    try
                    {
                        var chunk = api.Users.Get(idsChunk, profileFields).Select(x => x.ToExtendedModel());
                        users.AddRange(chunk);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.Message);
                        continue;
                    }
                    Console.Clear();
                    Console.WriteLine($"Users total count: {users.Count}");
                }
            }
            return(users);
        }
예제 #6
0
        public static FoundResult <User> TryGet(
            this IUsersCategory users,
            string screenName,
            ProfileFields fields   = null,
            NameCase nameCase      = null,
            bool skipAuthorization = false)
        {
            try
            {
                var result = users.Get(new List <string> {
                    screenName
                }, fields, nameCase, skipAuthorization)
                             .FirstOrDefault();

                return(result == null
                    ? FoundResult <User> .Error("Пользователь не найден.")
                    : FoundResult <User> .Success(result));
            }
            catch (InvalidUserIdException e)
            {
                return(FoundResult <User> .Error("Неверный ID пользователя", e));
            }
            catch (Exception e)
            {
                return(FoundResult <User> .Error($"Неизвестная ошибка. {e.Message}", e));
            }
        }
예제 #7
0
        public ReadOnlyCollection <Chat> GetChat(IEnumerable <long> chatIds, ProfileFields fields = null, NameCase nameCase = null)
        {
            var isNoEmpty = chatIds == null || !chatIds.Any();

            if (isNoEmpty)
            {
                throw new ArgumentException("At least one chat ID must be defined", "chatIds");
            }
            var parameters = new VkParameters {
                { "fields", fields }, { "name_case", nameCase }
            };

            if (chatIds.Count() > 1)
            {
                parameters.Add("chat_ids", chatIds);
            }
            else
            {
                parameters.Add("chat_id", chatIds.ElementAt(0));
            }
            var response = _vk.Call("messages.getChat", parameters);

            if (chatIds.Count() > 1)
            {
                return(response.ToReadOnlyCollectionOf <Chat>(c => c));
            }
            return(new ReadOnlyCollection <Chat>(new List <Chat> {
                response
            }));
        }
예제 #8
0
        public User Get(long userId, ProfileFields fields = null, NameCase nameCase = null)
        {
            VkErrors.ThrowIfNumberIsNegative(() => userId);
            var users = Get(new[] { userId }, fields, nameCase);

            return(users.FirstOrDefault());
        }
예제 #9
0
 /// <inheritdoc />
 public Task <ReadOnlyCollection <Chat> > GetChatAsync(IEnumerable <long> chatIds
                                                       , ProfileFields fields = null
                                                       , NameCase nameCase    = null)
 {
     return(TypeHelper.TryInvokeMethodAsync(func: () =>
                                            GetChat(chatIds: chatIds, fields: fields, nameCase: nameCase)));
 }
예제 #10
0
        /// <inheritdoc />
        public ReadOnlyCollection <Chat> GetChat(IEnumerable <long> chatIds, ProfileFields fields = null, NameCase nameCase = null)
        {
            var isNoEmpty = chatIds == null || !chatIds.Any();

            if (isNoEmpty)
            {
                throw new ArgumentException(message: "At least one chat ID must be defined", paramName: nameof(chatIds));
            }

            var parameters = new VkParameters
            {
                { "fields", fields },
                { "name_case", nameCase }
            };

            if (chatIds.Count() > 1)
            {
                parameters.Add(name: "chat_ids", collection: chatIds);
            }
            else
            {
                parameters.Add(name: "chat_id", value: chatIds.ElementAt(index: 0));
            }

            var response = _vk.Call(methodName: "messages.getChat", parameters: parameters);

            return(chatIds.Count() > 1
                                ? response.ToReadOnlyCollectionOf <Chat>(selector: c => c)
                                : new ReadOnlyCollection <Chat>(list: new List <Chat> {
                response
            }));
        }
예제 #11
0
 /// <inheritdoc />
 public Task <ReadOnlyCollection <User> > GetAsync(IEnumerable <string> screenNames
                                                   , ProfileFields fields   = null
                                                   , NameCase nameCase      = null
                                                   , bool skipAuthorization = false)
 {
     return(TypeHelper.TryInvokeMethodAsync(func: () =>
                                            _vk.Users.Get(screenNames: screenNames, fields: fields, nameCase: nameCase, skipAuthorization: skipAuthorization)));
 }
예제 #12
0
        public User Get([NotNull] string screenName, ProfileFields fields = null, NameCase nameCase = null, bool skipAuthorization = false)
        {
            VkErrors.ThrowIfNullOrEmpty(() => screenName);

            var users = Get(new[] { screenName }, fields, nameCase, skipAuthorization);

            return(users.Count > 0 ? users[0] : null);
        }
예제 #13
0
 /// <inheritdoc />
 public async Task <ReadOnlyCollection <User> > GetAsync(IEnumerable <long> userIds
                                                         , ProfileFields fields   = null
                                                         , NameCase nameCase      = null
                                                         , bool skipAuthorization = false)
 {
     return(await TypeHelper.TryInvokeMethodAsync(func : () =>
                                                  _vk.Users.Get(userIds: userIds, fields: fields, nameCase: nameCase, skipAuthorization: skipAuthorization)));
 }
예제 #14
0
파일: UsersCategory.cs 프로젝트: ddfx/vk
        public User Get([NotNull] string screenName, ProfileFields fields = null, NameCase nameCase = null)
        {
            VkErrors.ThrowIfNullOrEmpty(() => screenName);

            ReadOnlyCollection <User> users = Get(new[] { screenName }, fields, nameCase);

            return(users.Count > 0 ? users[0] : null);
        }
예제 #15
0
 /// <summary>
 /// Получает данные для превью чата с приглашением по ссылке.
 /// </summary>
 /// <param name="link">Ссылка-приглашение.</param>
 /// <param name="fields">Список полей профилей, данные о которых нужно получить.</param>
 /// <returns>Возвращает объект представляющий описание чата</returns>
 /// <remarks>
 /// Страница документации ВКонтакте https://vk.com/dev/messages.getChatPreview
 /// </remarks>
 public ChatPreview GetChatPreview(string link, ProfileFields fields)
 {
     return(_vk.Call("messages.getChatPreview", new VkParameters
     {
         { "link", link },
         { "fields", fields }
     }));
 }
예제 #16
0
        private void FriendsList_SelectedIndexChanged(object sender, EventArgs e)
        {
            ProfileFields pf = ProfileFields.FirstName | ProfileFields.LastName | ProfileFields.Photo100 | ProfileFields.Sex | ProfileFields.Nickname | ProfileFields.BirthDate | ProfileFields.City | ProfileFields.Country;

            var friends = vk.Friends.Get(new FriendsGetParams
            {
                UserId = vk.UserId.Value,
                Fields = pf
            });

            label3.Visible    = true;
            label4.Visible    = true;
            label5.Visible    = true;
            label6.Visible    = true;
            label7.Visible    = true;
            tbSex.Visible     = true;
            tbStatus.Visible  = true;
            tbDate.Visible    = true;
            tbCity.Visible    = true;
            tbCountry.Visible = true;

            pbFriend.Load(friends[FriendsList.SelectedIndex].Photo100.ToString());
            tbSex.Text = friends[FriendsList.SelectedIndex].Sex.ToString();
            if (friends[FriendsList.SelectedIndex].Nickname != null)
            {
                tbStatus.Text = friends[FriendsList.SelectedIndex].FirstName.ToString() + " " + friends[FriendsList.SelectedIndex].LastName.ToString();
            }
            else
            {
                tbStatus.Text = "None";
            }
            if (friends[FriendsList.SelectedIndex].BirthDate != null)
            {
                tbDate.Text = friends[FriendsList.SelectedIndex].BirthDate.ToString();
            }
            else
            {
                tbDate.Text = "Hidden";
            }

            if (friends[FriendsList.SelectedIndex].City != null)
            {
                tbCity.Text = friends[FriendsList.SelectedIndex].City.Title.ToString();
            }
            else
            {
                tbCity.Text = "Hidden";
            }

            if (friends[FriendsList.SelectedIndex].Country != null)
            {
                tbCountry.Text = friends[FriendsList.SelectedIndex].Country.Title.ToString();
            }
            else
            {
                tbCountry.Text = "Hidden";
            }
        }
예제 #17
0
        public ReadOnlyCollection <User> GetByPhones(IEnumerable <string> phones, ProfileFields fields)
        {
            var parameters = new VkParameters {
                { "phones", phones },
                { "fields", fields }
            };

            return(_vk.Call("friends.getByPhones", parameters).ToReadOnlyCollectionOf <User>(x => x));
        }
예제 #18
0
        public JsonResult RemoveRole(int[] RemoeRoles)
        {
            RoleListModel _model   = new RoleListModel();
            List <Role>   _deleted = new List <Role>();

            foreach (int RoleID in RemoeRoles)
            {
                Role role = Web.Admin.Logic.Collections.Roles.GetBy(RoleID);
                List <ProfileField> _profileFields = ProfileFields.GetByRole(RoleID);

                if (Web.Admin.Logic.Collections.Roles.GetMemberCount(role.RoleID) > 0)
                {
                    role.WasDeleted    = false;
                    role.UIMessage     = "The role contains members.";
                    role.UIMessageType = UIMessageType.Warning;
                    AuditEvent.AppEventSuccess(Profile.Member.Email, String.Format(AuditEvent.RoleContainsMembers, role.Name));
                }
                else if (_profileFields.Count > 0)
                {
                    role.WasDeleted = false;
                    role.UIMessage  = "The role has not been deleted. Attached fields: ";
                    foreach (ProfileField profileField in _profileFields)
                    {
                        role.UIMessage += "<u>" + profileField.FieldName + "</u>&nbsp;";
                    }
                    role.UIMessageType = UIMessageType.Warning;
                    AuditEvent.AppEventSuccess(Profile.Member.Email, String.Format(AuditEvent.RoleContainsMembers, role.Name));
                }
                else
                {
                    if (role.IsBuiltIn)
                    {
                        role.WasDeleted    = true;
                        role.UIMessage     = "The role is built in and can't be deleted.";
                        role.UIMessageType = UIMessageType.Warning;
                        AuditEvent.AppEventSuccess(Profile.Member.Email, String.Format(AuditEvent.RoleIsBuiltIn, role.Name));
                    }
                    else if (role.Delete())
                    {
                        role.WasDeleted    = true;
                        role.UIMessage     = "The role has been deleted.";
                        role.UIMessageType = UIMessageType.Success;
                        AuditEvent.AppEventSuccess(Profile.Member.Email, String.Format(AuditEvent.RoleDeleted, role.Name));
                    }
                }

                _deleted.Add(role);
            }

            _model.Roles = _deleted;

            return(Json(new
            {
                NotifyType = NotifyType.Dialog,
                Html = this.RenderPartialView(@"_RemoveRolesResult", _model)
            }, JsonRequestBehavior.AllowGet));
        }
예제 #19
0
        /// <summary>
        /// Возвращает расширенную информацию о пользователе
        /// </summary>
        /// <param name="accessToken">Токен пользователя</param>
        /// <param name="profile">Поля профилей, которые необходимо возвратить.</param>
        /// <param name="cancellationToken"></param>
        /// <returns> Список объектов с запрошенной информацией о пользователях. </returns>
        /// <remarks>
        /// Страница документации ВКонтакте http://vk.com/dev/users.get
        /// </remarks>
        public async Task <User> GetAsync(
            string accessToken,
            ProfileFields profile = null,
            CancellationToken cancellationToken = default)
        {
            cancellationToken.ThrowIfCancellationRequested();
            var users = await VkAccountManager.Authorize(accessToken : accessToken).Users.GetAsync(userIds: new long[] { }, fields: profile);

            return(users?.FirstOrDefault());
        }
예제 #20
0
        public virtual User GetInfo(VkApi api, ProfileFields fields, NameCase nameCase)
        {
            var res = api.Users.Get(new long[] { UserId }, fields, nameCase, true);

            if (res == null)
            {
                return(null);
            }
            return(res[0]);
        }
예제 #21
0
        public SearchDialogsResponse SearchDialogs(string query, ProfileFields fields = null, uint?limit = null)
        {
            var parameters = new VkParameters
            {
                { "q", query },
                { "fields", fields },
                { "limit", limit }
            };

            return(_vk.Call(methodName: "messages.searchDialogs", parameters: parameters));
        }
예제 #22
0
        public User Get(long userId, ProfileFields fields = null,
            NameCase nameCase = null)
        {
            VkErrors.ThrowIfNumberIsNegative(() => userId);

            var parameters = new VkParameters { { "fields", fields }, { "name_case", nameCase }, { "user_ids", userId } };

            VkResponseArray response = _vk.Call("users.get", parameters, true);

            return response[0];
        }
예제 #23
0
        public VkCollection <User> GetAvailableForCall(ProfileFields fields, NameCase nameCase)
        {
            var parameters = new VkParameters {
                { "fields", fields },
                { "name_case", nameCase }
            };

            return(_vk.Call("friends.getAvailableForCall", parameters).ToVkCollectionOf(x => fields != null ? new User {
                Id = x
            } : x));
        }
예제 #24
0
            public override User GetUser(long userId, ProfileFields fields)
            {
                if (Exception != null)
                {
                    throw Exception;
                }
                var user = Users.FirstOrDefault(u => u.Id == userId);

                Assert.NotNull(user);
                return(user);
            }
예제 #25
0
        public JsonResult GetEditFieldDialog(int GroupID, int FieldID, int TabIndex)
        {
            ProfileField Field = ProfileFields.GetBy(FieldID);
            ProfileFieldGroupFieldModel _model = new ProfileFieldGroupFieldModel(Field);

            _model.tabIndex = TabIndex;

            return(Json(new
            {
                Html = this.RenderPartialView(@"_EditField", _model),
            }, JsonRequestBehavior.AllowGet));
        }
예제 #26
0
파일: VkApiTest.cs 프로젝트: igofed/vk
        public void GetApiUrl_GetProfile_WithFields()
        {
            ProfileFields fields = ProfileFields.FirstName | ProfileFields.Domain | ProfileFields.Education;

            _values.Add("uid", "66748");
            _values.Add("fields", fields.ToString().Replace(" ", ""));
            const string expected = "https://api.vk.com/method/getProfiles?uid=66748&fields=first_name,domain,education&access_token=token";

            string output = _vk.GetApiUrl("getProfiles", _values);

            Assert.That(output, Is.EqualTo(expected));
        }
예제 #27
0
        public ReadOnlyCollection<User> Get([NotNull] IEnumerable<long> userIds, ProfileFields fields = null, NameCase nameCase = null)
        {
            if (userIds == null)
                throw new ArgumentNullException("userIds");

            var parameters = new VkParameters { { "fields", fields }, { "name_case", nameCase } };
            parameters.Add("user_ids", userIds);

            VkResponseArray response = _vk.Call("users.get", parameters);

            return response.ToReadOnlyCollectionOf<User>(x => x);
        }
예제 #28
0
        public ReadOnlyCollection <User> GetAvailableForCall(ProfileFields fields, NameCase nameCase)
        {
            var parameters = new VkParameters {
                { "fields", fields },
                { "name_case", nameCase }
            };
            VkResponseArray result = _vk.Call("friends.getAvailableForCall", parameters);

            return(result.ToReadOnlyCollectionOf <User>(x => fields != null ? new User {
                Id = x
            } : x));
        }
예제 #29
0
        static void Main(string[] args)
        {
            var services = new ServiceCollection();

            services.AddAudioBypass();

            var api = new VkApi(services);

            api.Authorize(new ApiAuthParams
            {
                ApplicationId = 7001300,
                Login         = "******",
                Password      = "******",
                Settings      = Settings.All
            });
            //Console.WriteLine(api.Token);

            ProfileFields fields  = ProfileFields.FirstName | ProfileFields.LastName | ProfileFields.Online;
            var           friends = api.Friends.Get(new FriendsGetParams()
            {
                Order  = FriendsOrder.Name,
                Fields = fields
            });

            Console.WriteLine("Friends: " + friends.TotalCount);
            foreach (var friend in friends)
            {
                Console.WriteLine(friend.FirstName + " " + friend.LastName + " " + friend.Online);
            }
            Console.WriteLine("Send message to...");
            var receive = Console.ReadLine();
            var result  = receive.Split(" ");

            try
            {
                var person = friends.Where(x => x.FirstName == result[0] && x.LastName == result[1]);

                var randomId = new Random().Next(10000, 32000);
                Console.WriteLine("Message:");
                var message = Console.ReadLine();
                var msgid   = api.Messages.Send(new MessagesSendParams
                {
                    UserId   = person.First().Id,
                    RandomId = randomId,
                    Message  = message
                });
                Console.WriteLine(msgid + " sent");
            }
            catch (NullReferenceException e)
            {
                Console.WriteLine("write friend's name correctly");
            }
        }
예제 #30
0
        public ReadOnlyCollection<User> Get(long uid, ProfileFields fields = null, int? count = null, int? offset = null, FriendsOrder order = null, NameCase nameCase = null, int? listId = null)
        {
            if(listId != null && listId < 0)
				throw new ArgumentOutOfRangeException("listId", "listId must be a positive number.");
			
			var parameters = new VkParameters { { "user_id", uid }, { "fields", fields }, { "count", count }, { "offset", offset }, { "order", order }, {"list_id", listId} , {"name_case", nameCase}};

            var response = _vk.Call("friends.get", parameters);

		    if (fields != null)
                return response["items"].ToReadOnlyCollectionOf<User>(x => x);
		    return response.ToReadOnlyCollectionOf(id => new User { Id = id });
        }
예제 #31
0
        /// <summary>
        /// Возвращает список идентификаторов друзей пользователя или расширенную
        /// информацию о друзьях пользователя (при
        /// использовании параметра fields).
        /// </summary>
        /// <param name="accessToken">Токен пользователя</param>
        /// <param name="count">Количество друзей, которое нужно вернуть. положительное число, по умолчанию 5000</param>
        /// <param name="profileFields">
        /// Список дополнительных полей, которые необходимо вернуть.
        /// Доступные значения: nickname, domain, sex, bdate, city, country, timezone
        /// photo_50, photo_100, photo_200_orig,
        /// has_mobile, contacts, education, online, relation, last_seen, status,
        /// can_write_private_message, can_see_all_posts,
        /// can_post, universities список строк, разделенных через запятую.</param>
        /// <param name="cancellationToken"></param>
        /// <returns>
        /// /// После успешного выполнения возвращает список идентификаторов (id) друзей
        /// пользователя, если параметр fields не
        /// использовался.
        /// При использовании параметра fields  возвращает список объектов пользователей,
        /// но не более 5000.
        /// </returns>
        /// <remarks>
        /// Страница документации ВКонтакте http://vk.com/dev/friends.get
        /// </remarks>
        public async Task <User[]> GetAsync(
            string accessToken,
            int count,
            ProfileFields profileFields         = null,
            CancellationToken cancellationToken = default)
        {
            cancellationToken.ThrowIfCancellationRequested();
            var friends = await GetFriendsAsync(accessToken : accessToken, count : count, profileFields : profileFields, cancellationToken : cancellationToken);

            return(friends != null?friends.ToArray() : new User[]
            {
            });
        }
예제 #32
0
 /// <inheritdoc />
 public Task <WallGetObject> GetByIdAsync(IEnumerable <string> posts
                                          , bool?extended          = null
                                          , long?copyHistoryDepth  = null
                                          , ProfileFields fields   = null
                                          , bool skipAuthorization = false)
 {
     return(TypeHelper.TryInvokeMethodAsync(func: () =>
                                            GetById(posts: posts
                                                    , extended: extended
                                                    , copyHistoryDepth: copyHistoryDepth
                                                    , fields: fields
                                                    , skipAuthorization: skipAuthorization)));
 }
예제 #33
0
파일: UsersCategory.cs 프로젝트: ddfx/vk
        public User Get(long userId, ProfileFields fields = null,
                        NameCase nameCase = null)
        {
            VkErrors.ThrowIfNumberIsNegative(() => userId);

            var parameters = new VkParameters {
                { "fields", fields }, { "name_case", nameCase }, { "v", _vk.ApiVersion }, { "user_ids", userId }
            };

            VkResponseArray response = _vk.Call("users.get", parameters);

            return(response[0]);
        }
예제 #34
0
        public ReadOnlyCollection<User> SearchAdvanced(out int itemsCount, Sex sex, int age_from, ProfileFields fields = null, int count = 20, int offset = 0)
        {
           
            var parameters = new VkParameters { { "q", "" }, { "fields", fields }, { "count", count }, {"sort", 1}, {"country", 1}, {"sex",sex}
            ,{"age_from", age_from}, {"online", 1}, {"has_photo", 1}};
            if (offset > 0)
                parameters.Add("offset", offset);

            VkResponseArray response = _vk.Call("users.search", parameters);

            itemsCount = response[0];

            return response.Skip(1).ToReadOnlyCollectionOf<User>(r => r);
        }
예제 #35
0
        public User Get(int userId, ProfileFields[] fields = null, NameCase nameCase = NameCase.nom)
        {
            NameValueCollection qs = new NameValueCollection();
            qs["uids"] = userId.ToString();

            if (fields != null)
                qs["fields"] = String.Join(",", from field in fields select field.ToString());

            qs["name_case"] = nameCase.ToString();
            XmlDocument answer = VkResponse.ExecuteCommand("users.get", qs);
            XmlNode usersNodes = answer.SelectSingleNode("response/user");
            User user = new User(usersNodes);
            return user;
        }
예제 #36
0
        public ReadOnlyCollection<User> GetAll(long uid, ProfileFields fields = null, FriendsOrder order = null, NameCase nameCase = null, int? listId = null)
        {
            const int count = 50;
            var i = 0;
            var result = new List<User>();

            do
            {
                var currentItems = _friends.Get(uid, fields, count, i * count, order, nameCase, listId);
                if (currentItems != null) result.AddRange(currentItems);
            } while (++i * count < (_vk.CountFromLastResponse ?? 0));

            return result.ToReadOnlyCollection();
        }
예제 #37
0
        public ReadOnlyCollection<User> GetAllFollowers(long? userId = null, ProfileFields fields = null, NameCase nameCase = null)
        {
            const int count = 1000;
            var i = 0;
            var result = new List<User>();

            do
            {
                var currentItems = _users.GetFollowers(userId, count, i * count, fields, nameCase);
                if (currentItems != null) result.AddRange(currentItems);
            } while (++i * count < (_vk.CountFromLastResponse ?? 0));

            return result.ToReadOnlyCollection();
        }
예제 #38
0
파일: UsersCategory.cs 프로젝트: J2GIS/vk
        public ReadOnlyCollection<User> Search([NotNull] string query, out int itemsCount, ProfileFields fields = null, int count = 20, int offset = 0)
        {
            if (string.IsNullOrEmpty(query))
                throw new ArgumentException("Query can not be null or empty.");

            var parameters = new VkParameters { { "q", query }, { "fields", fields }, { "count", count } };
            if (offset > 0)
                parameters.Add("offset", offset);

            VkResponseArray response = _vk.Call("users.search", parameters);

            itemsCount = response[0];

            return response.Skip(1).ToReadOnlyCollectionOf<User>(r => r);
        }
예제 #39
0
        public User Get(int userId, ProfileFields field = ProfileFields.all, NameCase nameCase = NameCase.nom)
        {
            if (field == ProfileFields.all)
            {
                var values = Enum.GetValues(typeof(ProfileFields));
                List<ProfileFields> allfields = new List<ProfileFields>();

                for (int i = 0; i < values.Length; i++)
                {
                    if ((ProfileFields)values.GetValue(i) != ProfileFields.all)
                        allfields.Add((ProfileFields)values.GetValue(i));
                }
                return Get(userId, allfields.ToArray(), nameCase);
            }

            return Get(userId, new[] { field }, nameCase);
        }
예제 #40
0
		public ReadOnlyCollection<User> Get(long uid, ProfileFields fields = null, int? count = null, int? offset = null, FriendsOrder order = null, NameCase nameCase = null, int? listId = null)
		{
			if (listId != null && listId < 0)
				throw new ArgumentOutOfRangeException("listId", "listId must be a positive number.");

			var parameters = new FriendsGetParams
			{
				UserId = uid,
				Count = count,
				Offset = offset,
				Fields = fields,
				NameCase = nameCase,
				ListId = listId,
				Order = order
			};

			return Get(parameters).ToReadOnlyCollection();
		}
예제 #41
0
        public void FriendsGet(ProfileFields fields)
        {
            var wc = new WebClient();
            wc.DownloadStringCompleted += delegate(object sender, DownloadStringCompletedEventArgs e)
            {
                var ob = JObject.Parse(e.Result);
                var list = ob["response"].Select(q => new Profile
                {
                    uid = (int)q["uid"],
                    first_name = (string)q["first_name"],
                    last_name = (string)q["last_name"],
                    online = (int)q["online"] == 1,
                    photo = (string)q["photo"],
                    photo_big = (string)q["photo_big"],
                    photo_medium = (string)q["photo_medium"],
                    sex = q["sex"] != null ? (int)q["sex"] : 0 // и .т.д.
                }).ToArray();
                FriendsGetComplited(list);

            };
            wc.DownloadStringAsync(new Uri(string.Format("https://api.vk.com/method/friends.get?access_token={0}&fields={1}&order=hints", access_token, fields.ToString().Replace(" ", ""))));
        }
예제 #42
0
        public List<User> Get(List<int> userIds, ProfileFields[] fields = null, NameCase nameCase = NameCase.nom)
        {
            List<User> users = new List<User>();

            NameValueCollection qs = new NameValueCollection();
            qs["uids"] = String.Join(",", from id in userIds select id);

            if (fields != null)
                qs["fields"] = String.Join(",", from field in fields select field.ToString());

            qs["name_case"] = nameCase.ToString();

            XmlDocument answer = VkResponse.ExecuteCommand("users.get", qs);
            XmlNodeList usersNodes = answer.SelectNodes("response/user");

            if (usersNodes != null)
                foreach (XmlNode user in usersNodes)
                {
                    users.Add(new User(user));
                }

            return users;
        }
예제 #43
0
파일: UsersCategory.cs 프로젝트: J2GIS/vk
        public async Task<ReadOnlyCollection<User>> GetAsync([NotNull] IEnumerable<string> screenNames, ProfileFields fields = null, NameCase nameCase = null)
        {
            if (screenNames == null)
                throw new ArgumentNullException("screenNames");

            var parameters = new VkParameters
                {
                    { "user_ids", screenNames }, 
                    { "fields", fields }, 
                    { "name_case", nameCase }
                };

            VkResponseArray response = await _vk.CallAsync("users.get", parameters);
            return response.ToReadOnlyCollectionOf<User>(x => x);
        }
예제 #44
0
파일: FriendsCategory.cs 프로젝트: vknet/vk
        /// <summary>
        /// Позволяет получить список идентификаторов пользователей, доступных для вызова в приложении, используя метод JSAPI callUser.
        /// Подробнее о схеме вызова из приложений.
        /// </summary>
        /// <param name="fields">Список дополнительных полей, которые необходимо вернуть.
        /// Доступные значения: nickname, domain, sex, bdate, city, country, timezone, photo_50, photo_100, photo_200_orig, has_mobile, contacts, education, online, relation, last_seen, status, can_write_private_message, can_see_all_posts, can_post, universities список строк, разделенных через запятую (Список строк, разделенных через запятую).</param>
        /// <param name="nameCase">Падеж для склонения имени и фамилии пользователя. Возможные значения: именительный – nom, родительный – gen, дательный – dat, винительный – acc, творительный – ins, предложный – abl. По умолчанию nom. строка, по умолчанию Nom (Строка, по умолчанию Nom).</param>
        /// <returns>
        /// После успешного выполнения возвращает список идентификаторов (id) друзей пользователя, доступных для вызова, если параметр fields не использовался.
        /// При использовании параметра fields  возвращает список объектов пользователей.
        /// </returns>
        /// <remarks>
        /// Страница документации ВКонтакте <see href="http://vk.com/dev/friends.getAvailableForCall" />.
        /// </remarks>
        public VkCollection<User> GetAvailableForCall(ProfileFields fields, NameCase nameCase)
        {
            var parameters = new VkParameters {
                { "fields", fields },
                { "name_case", nameCase }
            };

            return _vk.Call("friends.getAvailableForCall", parameters).ToVkCollectionOf(x => fields != null ? new User { Id = x} : x);
        }
예제 #45
0
        public SearchDialogsResponse SearchDialogs([NotNull] string query, ProfileFields fields = null, uint limit = 20)
        {
            if (string.IsNullOrEmpty(query))
            {
                throw new ArgumentException("Query can not be null or empty.", "query");
            }
            var parameters = new VkParameters
            {
                { "q", query },
                { "fields", fields },
                { "limit", limit }
            };

            VkResponseArray response = _vk.Call("messages.searchDialogs", parameters);

            var result = new SearchDialogsResponse();
            foreach (var record in response)
            {
                string type = record["type"];
                switch (type)
                {
                    case "profile":
                        {
                            result.Users.Add(record);
                            break;
                        }
                    case "chat":
                        {
                            result.Chats.Add(record);
                            break;
                        }
                    case "email":
                        {
                            // TODO: Add email support.
                            continue;
                        }
                }
            }
            return result;
        }
 /// <summary>Возвращает список идентификаторов друзей пользователя или расширенную информацию о друзьях пользователя (при использовании параметра</summary>
 /// <param name="uid">идентификатор пользователя, для которого необходимо получить список друзей</param>
 /// <param name="fields">перечисленные через запятую поля анкет, необходимые для получения</param>
 /// <param name="name_case">падеж для склонения имени и фамилии пользователя</param>
 /// <param name="count">количество друзей, которое нужно вернуть</param>
 /// <param name="offset">смещение, необходимое для выборки определенного подмножества друзей</param>
 /// <returns>Ответ сервера в XML или JSON формате.</returns>
 public VKResponseBase Get(int uid, ProfileFields fields, NameCase name_case, System.Int32? count = null, System.Int32? offset = null)
 {
     return get(uid, fields, name_case, count, offset, null, null);
 }
예제 #47
0
파일: FriendsCategory.cs 프로젝트: vknet/vk
        /// <summary>
        /// Возвращает список друзей пользователя, у которых завалидированные или указанные в профиле телефонные номера входят в заданный список.
        /// </summary>
        /// <param name="phones">Список телефонных номеров в формате MSISDN, разделеннных запятыми. Например
        /// +79219876543,+79111234567
        /// Максимальное количество номеров в списке — 1000. список строк, разделенных через запятую (Список строк, разделенных через запятую).</param>
        /// <param name="fields">Список дополнительных полей, которые необходимо вернуть.
        /// Доступные значения: nickname, screen_name, sex, bdate, city, country, timezone, photo_50, photo_100, photo_200_orig, has_mobile, contacts, education, online, counters, relation, last_seen, status, can_write_private_message, can_see_all_posts, can_post, universities список строк, разделенных через запятую (Список строк, разделенных через запятую).</param>
        /// <returns>
        /// После успешного выполнения возвращает список объектов пользователей с дополнительным полем phone, в котором содержится номер из списка заданных для поиска номеров.
        /// </returns>
        /// <remarks>
        /// Страница документации ВКонтакте <see href="http://vk.com/dev/friends.getByPhones" />.
        /// </remarks>
        public ReadOnlyCollection<User> GetByPhones(IEnumerable<string> phones, ProfileFields fields)
        {
            var parameters = new VkParameters {
                { "phones", phones },
                { "fields", fields }
            };

            return _vk.Call("friends.getByPhones", parameters).ToReadOnlyCollectionOf<User>(x => x);
        }
예제 #48
0
		public SearchDialogsResponse SearchDialogs(string query, ProfileFields fields = null, uint? limit = null)
		{
			var parameters = new VkParameters
			{
				{ "q", query },
				{ "fields", fields },
				{ "limit", limit }
			};

			return _vk.Call("messages.searchDialogs", parameters);
		}
예제 #49
0
		public ReadOnlyCollection<Chat> GetChat(IEnumerable<long> chatIds, ProfileFields fields = null, NameCase nameCase = null)
		{
			var isNoEmpty = chatIds == null || !chatIds.Any();
			if (isNoEmpty)
			{
				throw new ArgumentException("At least one chat ID must be defined", "chatIds");
			}
			var parameters = new VkParameters { { "fields", fields }, { "name_case", nameCase } };
			if (chatIds.Count() > 1)
			{
				parameters.Add("chat_ids", chatIds);
			} else
			{
				parameters.Add("chat_id", chatIds.ElementAt(0));
			}
			var response = _vk.Call("messages.getChat", parameters);

			if (chatIds.Count() > 1)
			{
				return response.ToReadOnlyCollectionOf<Chat>(c => c);
			}
			return new ReadOnlyCollection<Chat>(new List<Chat> { response });
		}
예제 #50
0
 /// <summary>
 /// Возвращает информацию о беседе
 /// </summary>
 /// <param name="chatId">Идентификатор беседы.</param>
 /// <param name="fields">Список дополнительных полей профилей, которые необходимо вернуть.</param>
 /// <param name="nameCase">Падеж для склонения имени и фамилии пользователя. </param>
 /// <returns>
 /// После успешного выполнения возварщает список объектов, описывающих беседу (мультидиалог).
 /// </returns>
 /// <remarks>
 /// Для вызова этого метода Ваше приложение должно иметь права с битовой маской, содержащей <see cref="Settings.Messages"/>. 
 /// <a href="http://vk.com/dev/messages.getChat"/>Страница документации ВКонтакте</a> .
 /// </remarks>
 public Chat GetChat(long chatId, ProfileFields fields = null, Enums.SafetyEnums.NameCase nameCase = null)
 {
     return GetChat(new long[] { chatId }, fields, nameCase).FirstOrDefault();
 }
예제 #51
0
파일: WallCategory.cs 프로젝트: ProESM/vk
		public WallGetObject GetById(IEnumerable<string> posts, bool? extended = null, long? copyHistoryDepth = null, ProfileFields fields = null)
		{
			if (posts == null)
			{
				throw new ArgumentNullException("posts");
			}

			if (!posts.Any())
			{
				throw new ArgumentException("Posts collection was empty.", "posts");
			}

			var parameters = new VkParameters {
				{ "posts", posts },
				{ "extended", extended },
				{ "copy_history_depth", copyHistoryDepth },
				{ "fields", fields }
			};

			return _vk.Call("wall.getById", parameters);
		}
예제 #52
0
파일: UsersCategory.cs 프로젝트: J2GIS/vk
        public User Get([NotNull] string screenName, ProfileFields fields = null, NameCase nameCase = null)
        {
            VkErrors.ThrowIfNullOrEmpty(() => screenName);

            ReadOnlyCollection<User> users = Get(new[] {screenName}, fields, nameCase);
            return users.Count > 0 ? users[0] : null;
        }
예제 #53
0
파일: UsersCategory.cs 프로젝트: J2GIS/vk
        public ReadOnlyCollection<User> GetFollowers(long? userId = null, int? count = null, int? offset = null, ProfileFields fields = null, NameCase nameCase = null)
        {
            VkErrors.ThrowIfNumberIsNegative(() => userId);
            VkErrors.ThrowIfNumberIsNegative(() => count);
            VkErrors.ThrowIfNumberIsNegative(() => offset);

            var parameters = new VkParameters
                {
                    {"user_id", userId},
                    {"offset", offset},
                    {"count", count},
                    {"fields", fields},
                    {"name_case", nameCase}
                };

            VkResponseArray response = _vk.Call("users.getFollowers", parameters);

            // проверка: возвращается массив объектов или только идентификаторы пользователей
            if (response.Count > 0 && response[0].ContainsKey("id"))
            {
                return response.ToReadOnlyCollectionOf<User>(x => x);
            }

            return response.ToReadOnlyCollectionOf(x => new User{Id = x});
        }
 /// <summary>Возвращает список идентификаторов друзей пользователя или расширенную информацию о друзьях пользователя (при использовании параметра</summary>
 /// <param name="fields">перечисленные через запятую поля анкет, необходимые для получения</param>
 /// <param name="name_case">падеж для склонения имени и фамилии пользователя</param>
 /// <param name="lid">идентификатор списка друзей, полученный методом friends</param>
 /// <param name="count">количество друзей, которое нужно вернуть</param>
 /// <param name="offset">смещение, необходимое для выборки определенного подмножества друзей</param>
 /// <returns>Ответ сервера в XML или JSON формате.</returns>
 public VKResponseBase Get(ProfileFields fields, NameCase name_case, System.Int64? lid = null, System.Int32? count = null, System.Int32? offset = null)
 {
     return get(null, fields, name_case, count, offset, lid, null);
 }
예제 #55
0
 public User Get(long userId, ProfileFields fields = null, NameCase nameCase = null)
 {
     VkErrors.ThrowIfNumberIsNegative(() => userId);
     var users = Get(new[] {userId}, fields, nameCase);
     return users.FirstOrDefault();
 }
 /// <summary>Возвращает список идентификаторов друзей пользователя или расширенную информацию о друзьях пользователя (при использовании параметра</summary>
 /// <param name="uid">идентификатор пользователя, для которого необходимо получить список друзей</param>
 /// <param name="fields">перечисленные через запятую поля анкет, необходимые для получения</param>
 /// <param name="name_case">падеж для склонения имени и фамилии пользователя</param>
 /// <param name="count">количество друзей, которое нужно вернуть</param>
 /// <param name="offset">смещение, необходимое для выборки определенного подмножества друзей</param>
 /// <param name="lid">идентификатор списка друзей, полученный методом friends</param>
 /// <param name="order">Порядок в котором нужно вернуть список друзей</param>
 /// <returns>Ответ сервера в XML или JSON формате.</returns>
 private VKResponseBase get(System.Int64? uid, ProfileFields? fields, NameCase? name_case, System.Int32? count, System.Int32? offset, System.Int64? lid, string order)
 {
     manager.AddValueByName("@uid", uid);
     manager.AddValueByName("@fields", fields);
     manager.AddValueByName("@name_case", name_case);
     manager.AddValueByName("@count", count);
     manager.AddValueByName("@offset", offset);
     manager.AddValueByName("@lid", lid);
     manager.AddValueByName("@order", order);
     return new VKResponseBase(GetResponse("get"), IsXMLResponse);
 }
예제 #57
0
        public ReadOnlyCollection<User> GetChatUsers(long chatId, ProfileFields fields)
        {
            var parameters = new VkParameters { { "chat_id", chatId }, { "fields", fields } };

            var response = _vk.Call("messages.getChatUsers", parameters);

            if (fields != null)
                return response.ToReadOnlyCollectionOf<User>(x => x);

            return response.ToReadOnlyCollectionOf(x => new User { Id = (long)x });
        }
예제 #58
0
        public SearchDialogsResponse SearchDialogs([NotNull] string query, ProfileFields fields = null)
        {
            if (string.IsNullOrEmpty(query))
                throw new ArgumentException("Query can not be null or empty.", "query");

            var parameters = new VkParameters { { "q", query }, { "fields", fields } };

            VkResponseArray response = _vk.Call("messages.searchDialogs", parameters);

            var result = new SearchDialogsResponse();
            foreach (var record in response)
            {
                string type = record["type"];
                if (type == "profile")
                    result.Users.Add(record);
                else if (type == "chat")
                    result.Chats.Add(record);
                // TODO: Add email support.
            }
            return result;
        }
예제 #59
0
        public ReadOnlyCollection<Chat> GetChat(IEnumerable<long> chatIds, ProfileFields fields = null, Enums.SafetyEnums.NameCase nameCase = null)
        {
            if (chatIds == null || chatIds.Count<long>() == 0)
                throw new ArgumentException("At least one chat ID must be defined", "chatIds");

            var parameters = new VkParameters { { "fields", fields }, { "name_case", nameCase } };
            if (chatIds.Count<long>() > 1)
            {
                string ids = "";
                foreach (long chatId in chatIds)
                    ids += chatId.ToString() + ',';
                parameters.Add("chat_ids", ids.Remove(ids.Length - 1, 1));
            }
            else
                parameters.Add("chat_id", chatIds.ElementAt(0));

            var response = _vk.Call("messages.getChat", parameters);

            if (chatIds.Count<long>() > 1)
                return response.ToReadOnlyCollectionOf<Chat>(c => c);
            else
                return new ReadOnlyCollection<Chat>(new List<Chat> { response });
        }
예제 #60
0
        public ReadOnlyCollection<User> Get(long uid, ProfileFields fields = null, int? count = null, int? offset = null, FriendsOrder order = null)
        {
            var parameters = new VkParameters { { "uid", uid }, { "fields", fields }, { "count", count }, { "offset", offset }, { "order", order } };

            var response = _vk.Call("friends.get", parameters);

            if (fields != null)
                return response.ToReadOnlyCollectionOf<User>(x => x);

            return response.ToReadOnlyCollectionOf(id => new User { Id = id });
        }