コード例 #1
0
        private static async Task <InstaUserShortList> GetUnfollowers(IInstaApi api, string username)
        {
            var followersListTask = GetFollowersList(api, username);
            var followingListTask = GetFollowingList(api, username);

            await Task.WhenAll(followersListTask, followingListTask);

            var followersList = await followersListTask;
            var followingList = await followingListTask;

            if (followersList.Count == 0 && followingList.Count == 0)
            {
                throw new Exception("Please check your username!");
            }

            InstaUserShortList unfollowers = new InstaUserShortList();

            foreach (var user in followingList)
            {
                if (followersList.Where(x => x.UserName == user.UserName).FirstOrDefault() == null)
                {
                    unfollowers.Add(user);
                }
            }

            return(unfollowers);
        }
コード例 #2
0
        public async Task <IResult <InstaUserShortList> > SearchUsersAsync(string searchPattern)
        {
            try
            {
                var userUri  = UriCreator.GetUserUri(searchPattern);
                var request  = HttpHelper.GetDefaultRequest(HttpMethod.Get, userUri, _deviceInfo);
                var response = await _httpRequestProcessor.SendAsync(request);

                var json = await response.Content.ReadAsStringAsync();

                if (response.StatusCode != HttpStatusCode.OK)
                {
                    return(Result.UnExpectedResponse <InstaUserShortList>(response, json));
                }
                var userInfo = JsonConvert.DeserializeObject <InstaUserListShortResponse>(json);
                var userList = new InstaUserShortList();
                foreach (var userInfoItem in userInfo.Items)
                {
                    userList.Add(ConvertersFabric.Instance.GetUserShortConverter(userInfoItem).Convert());
                }
                return(Result.Success(userList));
            }
            catch (Exception exception)
            {
                _logger?.LogException(exception);
                return(Result.Fail <InstaUserShortList>(exception.Message));
            }
        }
コード例 #3
0
ファイル: FollowerAnalyser.cs プロジェクト: Gojice/Boffalow
        static public async void AllFollower()
        {
            PaginationParameters P = PaginationParameters.Empty;

            result = await UserWorkation.InstaApi.UserProcessor.GetUserFollowersAsync(UserWorkation.User, P);

            if (result.Succeeded)
            {
                Followers = result.Value;
            }
            AllFollowers = result.Succeeded;
        }
コード例 #4
0
        /// <summary>
        ///     Get followers list by username asynchronously
        /// </summary>
        /// <param name="username">Username</param>
        /// <param name="paginationParameters">Pagination parameters: next id and max amount of pages to load</param>
        /// <param name="searchQuery">Search string to locate specific followers</param>
        /// <returns>
        ///     <see cref="InstaUserShortList" />
        /// </returns>
        public async Task <IResult <InstaUserShortList> > GetUserFollowersAsync(string username,
                                                                                PaginationParameters paginationParameters, string searchQuery)
        {
            UserAuthValidator.Validate(_userAuthValidate);
            var followers = new InstaUserShortList();

            try
            {
                var user = await GetUserAsync(username);

                var userFollowersUri =
                    UriCreator.GetUserFollowersUri(user.Value.Pk, _user.RankToken, searchQuery,
                                                   paginationParameters.NextId);
                var followersResponse = await GetUserListByUriAsync(userFollowersUri);

                if (!followersResponse.Succeeded)
                {
                    return(Result.Fail(followersResponse.Info, (InstaUserShortList)null));
                }
                followers.AddRange(
                    followersResponse.Value.Items?.Select(ConvertersFabric.Instance.GetUserShortConverter)
                    .Select(converter => converter.Convert()));
                followers.NextId = followersResponse.Value.NextMaxId;

                var pagesLoaded = 1;
                while (!string.IsNullOrEmpty(followersResponse.Value.NextMaxId) &&
                       pagesLoaded < paginationParameters.MaximumPagesToLoad)
                {
                    var nextFollowersUri =
                        UriCreator.GetUserFollowersUri(user.Value.Pk, _user.RankToken, searchQuery,
                                                       followersResponse.Value.NextMaxId);
                    followersResponse = await GetUserListByUriAsync(nextFollowersUri);

                    if (!followersResponse.Succeeded)
                    {
                        return(Result.Fail(followersResponse.Info, followers));
                    }
                    followers.AddRange(
                        followersResponse.Value.Items?.Select(ConvertersFabric.Instance.GetUserShortConverter)
                        .Select(converter => converter.Convert()));
                    pagesLoaded++;
                    followers.NextId = followersResponse.Value.NextMaxId;
                }

                return(Result.Success(followers));
            }
            catch (Exception exception)
            {
                _logger?.LogException(exception);
                return(Result.Fail(exception, followers));
            }
        }
コード例 #5
0
        private void InitData(InstaUserShortList followers, InstaUserShortList following)
        {
            foreach (var follower in followers)
            {
                AddData(follower, true);
            }

            foreach (var followed in following)
            {
                AddData(followed, false);
            }

            OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
        }
コード例 #6
0
        public async Task <IResult <InstaUserShortList> > GetUserFollowingAsync(string username,
                                                                                PaginationParameters paginationParameters)
        {
            var following = new InstaUserShortList();

            try
            {
                var user = await GetUserAsync(username);

                var uri = UriCreator.GetUserFollowingUri(user.Value.Pk, _user.RankToken, paginationParameters.NextId);
                var userListResponse = await GetUserListByUriAsync(uri);

                if (!userListResponse.Succeeded)
                {
                    Result.Fail(userListResponse.Info, following);
                }
                following.AddRange(
                    userListResponse.Value.Items.Select(ConvertersFabric.Instance.GetUserShortConverter)
                    .Select(converter => converter.Convert()));
                following.NextId = userListResponse.Value.NextMaxId;
                var pages = 1;
                while (!string.IsNullOrEmpty(following.NextId) &&
                       pages < paginationParameters.MaximumPagesToLoad)
                {
                    var nextUri =
                        UriCreator.GetUserFollowingUri(user.Value.Pk, _user.RankToken,
                                                       userListResponse.Value.NextMaxId);
                    userListResponse = await GetUserListByUriAsync(nextUri);

                    if (!userListResponse.Succeeded)
                    {
                        return(Result.Success($"Not all pages were downloaded: {userListResponse.Info.Message}",
                                              following));
                    }
                    following.AddRange(
                        userListResponse.Value.Items.Select(ConvertersFabric.Instance.GetUserShortConverter)
                        .Select(converter => converter.Convert()));
                    pages++;
                    following.NextId = userListResponse.Value.NextMaxId;
                }
                return(Result.Success(following));
            }
            catch (Exception exception)
            {
                _logger?.LogException(exception);
                return(Result.Fail(exception, following));
            }
        }
コード例 #7
0
        public static async Task <IDataResult <InstaUserShortList> > GetUnfollowers(string username, IConfiguration config)
        {
            try
            {
                GetUser(config);

                var api = await Login();

                if (api != null)
                {
                    InstaUserShortList result = await GetUnfollowers(api, username);

                    return(new SuccessDataResult <InstaUserShortList>(result, "Process Succeeded."));
                }
                else
                {
                    return(new ErrorDataResult <InstaUserShortList>(message: "An Error Occured: Cannot Connect to Instagram API. Login Information May Not Be Correct!"));
                }
            }
            catch (Exception ex)
            {
                return(new ErrorDataResult <InstaUserShortList>(message: "An Error Occured: " + ex.Message));
            }
        }