Beispiel #1
0
        private static List <Tuple <int, string> > ParseVKGetFriendsRequest(VKResponse response)
        {
            var json = response.Json;

            if (!json.Has("response"))
            {
                Log.Error("PayDebt", "Invalid API response: " + response.Json);
                return(new List <Tuple <int, string> >());
            }

            json = json.GetJSONObject("response");

            var list = new List <Tuple <int, string> >(json.Has("count") ? json.GetInt("count") : 10);

            if (json.Has("items"))
            {
                var jsonArray = json.GetJSONArray("items");
                jsonArray.Length();
                for (var i = 0; i < jsonArray.Length(); i++)
                {
                    list.Add(ParseIdNamePair(jsonArray.GetJSONObject(i)));
                }
            }

            return(list);
        }
Beispiel #2
0
            public override void OnComplete(VKResponse response)
            {
                var handler = onComplete;

                if (handler != null)
                {
                    handler(response);
                }
            }
Beispiel #3
0
 private void OnRequestComplete(VKResponse response)
 {
     // apply JSON formatting
     using (var stringReader = new StringReader(response.Json.ToString()))
         using (var stringWriter = new StringWriter())
             using (var jsonReader = new JsonTextReader(stringReader))
                 using (var jsonWriter = new JsonTextWriter(stringWriter)
                 {
                     Formatting = Formatting.Indented
                 }) {
                     jsonWriter.WriteToken(jsonReader);
                     SetResponseText(stringWriter.ToString());
                 }
 }
        /// <summary>
        /// Возвращает список списков друзей пользователя ВКонтакте.
        /// </summary>
        /// <param name="callback">Метод, который будет вызван по завершении операции.
        /// Параметр является результатом запроса.</param>
        /// <param name="request">Объект запроса с необходимыми параметрами.</param>
        //public void GetFriendsLists(Action<VKResponse<VKCountedItemsObject<VKFriendsList>>> callback,
        //    GetFriendsListsRequest request)
        //{
        //    VKHelper.GetResponse<VKCountedItemsObject<VKFriendsList>>(request, callback);
        //}

        /// <summary>
        /// Создает новый список друзей.
        /// </summary>
        /// <param name="callback">Метод, который будет вызван по завершении операции.
        /// Параметр является результатом запроса.</param>
        /// <param name="request">Объект запроса с необходимыми параметрами.</param>
        public void AddFriendsList(Action <VKResponse <int> > callback,
                                   AddFriendsListRequest request)
        {
            VKHelper.GetResponse <AddListResponse>(request,
                                                   (response) =>
            {
                var result = new VKResponse <int>()
                {
                    Error = response.Error
                };
                result.Response = response.Response.ListID;
                callback(result);
            });
        }
        /// <summary>
        /// Возвращает список друзей пользователя.
        /// </summary>
        /// <param name="callback">Метод, который будет вызван по завершении операции.
        /// Параметр является результатом запроса.</param>
        /// <param name="request">Объект запроса с необходимыми параметрами.</param>
        //public void GetFriends(Action<VKResponse<VKCountedItemsObject<VKProfileBase>>> callback,
        //    GetFriendsRequest request)
        //{
        //    VKHelper.GetResponse<VKCountedItemsObject<VKProfileBase>>(request, callback);
        //}

        /// <summary>
        /// Возвращает список идентификаторов друзей пользователя, находящихся
        /// в данные момент в сети.
        /// </summary>
        /// <param name="callback">Метод, который будет вызван по завершении операции.
        /// Параметр является результатом запроса.</param>
        /// <param name="request">Объект запроса с необходимыми параметрами.</param>
        //public void GetOnlineFriends(Action<VKResponse<VKGetOnlineFriendsObject>> callback,
        //    GetOnlineFriendsRequest request)
        //{
        //    if (request.OnlineMobile == VKBoolean.True)
        //        VKHelper.GetResponse<VKGetOnlineFriendsObject>(request, callback);
        //    else
        //        VKHelper.GetResponse<List<long>>(request, (response) =>
        //            {
        //                var result = new VKResponse<VKGetOnlineFriendsObject>();
        //                result.Error = response.Error;
        //                result.Response.Online = response.Response;
        //                callback(result);
        //            });
        //}

        /// <summary>
        /// Возвращаетс идентификаторы общих с пользователем друзей.
        /// </summary>
        /// <param name="callback">Метод, который будет вызван по завершении операции.
        /// Параметр является результатом запроса.</param>
        /// <param name="request">Объект запроса с необходимыми параметрами.</param>
        public void GetMutualFrends(Action <VKResponse <List <VKCommonFriendsObject> > > callback,
                                    GetMutualFriendsRequest request)
        {
            if (!request.IsSingle)
            {
                VKHelper.GetResponse <List <VKCommonFriendsObject> >(request, callback);
            }
            else
            {
                VKHelper.GetResponse <List <long> >(request, (response) =>
                {
                    var result = new VKResponse <List <VKCommonFriendsObject> > {
                        Error = response.Error
                    };
                    result.Response.Add(new VKCommonFriendsObject
                    {
                        ID = request.TargetID, CommonFriends = response.Response, CommonCount = -1
                    });
                    callback(result);
                });
            }
        }
Beispiel #6
0
        /// <summary>
        /// Выполнить запрос к ВКонтакте.
        /// </summary>
        /// <typeparam name="T">Тип результирующих данных.</typeparam>
        /// <param name="request">Объект запроса к ВКонтакте.</param>
        private async Task <VKResponse <T> > ProcessRequestAsync <T>(IRequest <T> request)
        {
            if (!loginService.IsAuthorized)
            {
                return new VKResponse <T> {
                           Error = VKErrors.AuthorizationFailed
                }
            }
            ;

            var parameters = request.GetParameters();

            parameters["v"] = Constants.API_VERSION;

            try { parameters["access_token"] = loginService.Token; }
            catch (InvalidOperationException) { return(new VKResponse <T> {
                    Error = VKErrors.AuthorizationFailed
                }); }

            string json = String.Empty;

            try
            {
                using (var client = new HttpClient())
                {
                    HttpResponseMessage httpResponse = null;
                    if (request.HttpMethod == Core.Models.HttpMethod.GET)
                    {
                        httpResponse = await client.GetAsync(new Uri(GetRequestUrl(API_ROOT + request.GetMethod(), parameters)))
                                       .AsTask(request.Token);
                    }
                    else
                    {
                        httpResponse = await client.PostAsync(new Uri(API_ROOT + request.GetMethod()), new HttpFormUrlEncodedContent(parameters))
                                       .AsTask(request.Token);
                    }

                    json = await httpResponse.Content.ReadAsStringAsync().AsTask(request.Token);
                }
            }
            catch (OperationCanceledException) { return(new VKResponse <T> {
                    Error = VKErrors.OperationCanceled
                }); }
            catch (Exception) { }

            if (String.IsNullOrEmpty(json))
            {
                return new VKResponse <T> {
                           Error = VKErrors.ConnectionError
                }
            }
            ;

            //if (json == "{\"response\":[]}") return new VKResponse<T> { Response = Activator.CreateInstance<T>() };

            VKResponse <T> response = null;

            try
            {
                response = JsonConvert.DeserializeObject <VKResponse <T> >(json,
                                                                           new JsonSerializerSettings {
                    MissingMemberHandling = MissingMemberHandling.Ignore
                });
            }
            catch (Exception) { return(new VKResponse <T> {
                    Error = VKErrors.UnknownError
                }); }

            if (response.Error == VKErrors.CaptchaNeeded)
            {
                try
                {
                    var captchaResponse = await InvokeCaptchaAsync(response.GetCaptcha);

                    if (captchaResponse.Cancel)
                    {
                        return new VKResponse <T> {
                                   Error = VKErrors.OperationCanceled
                        }
                    }
                    ;

                    parameters["captcha_sid"] = captchaResponse.CaptchaSid;
                    parameters["captcha_key"] = captchaResponse.CaptchaKey;

                    return(await ProcessRequestAsync(request));
                }
                catch (Exception) { return(new VKResponse <T> {
                        Error = VKErrors.OperationCanceled
                    }); }
            }
            else if (response.Error == VKErrors.AuthorizationFailed)
            {
                loginService.Logout();
            }

            return(response);
        }
Beispiel #7
0
    public static void Main(string[] args)
    {
        Console.Write("Enter wall ID: ");
        int owner_id = Convert.ToInt32(Console.ReadLine());

        Console.Write("Enter max number of posts to analyze (0 is all wall posts): ");
        int max_number          = Convert.ToInt32(Console.ReadLine());
        int count               = 100;
        int offset              = 0;
        int post_count          = 1;
        LinkedList <Post> posts = new LinkedList <Post>();

        while (offset < post_count)
        {
            Console.WriteLine($"{offset}/{post_count}");
            WebRequest request = WebRequest.Create(
                $"https://api.vk.com/method/wall.get?" +
                $"owner_id={owner_id}&" +
                $"access_token=a3a57e9fa3a57e9fa3a57e9f6ca3face30aa3a5a3a57e9ff9b25bc3899baea2cf8024bc&" +
                $"v=5.92&" +
                $"fields=id&" +
                $"count={count}&" +
                $"offset={offset}");
            WebResponse  response           = request.GetResponse();
            Stream       dataStream         = response.GetResponseStream();
            StreamReader reader             = new StreamReader(dataStream);
            string       responseFromServer = reader.ReadToEnd();
            VKResponse   res = JsonConvert.DeserializeObject <VKResponse>(responseFromServer);
            //Console.WriteLine(responseFromServer);
            foreach (VKPost responseItem in res.response.items)
            {
                posts.AddLast(new Post()
                {
                    id = responseItem.id, likes = responseItem.likes.count, owner_id = responseItem.owner_id
                });
            }
            reader.Close();
            response.Close();
            post_count = res.response.count;
            offset    += count;
            if (max_number >= 0 && offset > max_number)
            {
                break;
            }
            System.Threading.Thread.Sleep(50);
        }

        IEnumerable sortedPost = posts.OrderBy(x => x.likes);

        using (StreamWriter outputFile = new StreamWriter($"WallPostsFor{owner_id}.txt"))
        {
            foreach (var o in sortedPost)
            {
                string line = $"{((Post) o).FullUrl} - {((Post) o).likes}";
                Console.WriteLine(line);
                outputFile.WriteLine(line);
            }
        }

        Console.ReadLine();
    }
Beispiel #8
0
 public override void OnComplete(VKResponse response)
 {
     OnRequestComplete?.Invoke(response);
 }
Beispiel #9
0
 private void OnSuccess(VKResponse obj)
 {
     throw new NotImplementedException();
 }
 private void OnSuccess(VKResponse obj)
 {
     throw new NotImplementedException();
 }
Beispiel #11
0
        /// <summary>
        /// Выполняет запрос к ВКонтакте и возвращает результат.
        /// </summary>
        /// <typeparam name="T">Тип результирующего объекта.</typeparam>
        /// <param name="methodName">Имя метода, к которому требуется обратиться.</param>
        /// <param name="parameters">Словарь параметров, специфичных для этого метода.</param>
        private static async Task <VKResponse <T> > GetResponse <T>(string methodName, Dictionary <string, string> parameters,
                                                                    CancellationToken ct = default(CancellationToken))
        {
#if ONEVK_CORE
            if (_settings.AccessToken == null)
#else
            if (_accessToken == null)
#endif
            {
                if (LoginNeeded != null)
                {
                    LoginNeeded();
                }
                return(new VKResponse <T> {
                    Error = new VKError {
                        ErrorType = VKErrors.AuthorizationFailed
                    }
                });
            }

            parameters["v"] = VKMethodsConstants.ApiVersion;
#if ONEVK_CORE
            parameters["access_token"] = _settings.AccessToken.AccessToken;
#else
            parameters["access_token"] = _accessToken.AccessToken;
#endif

            string method = GetMethodString(methodName);
            string query  = String.Format("{0}&{1}", method, GetParametersString(parameters));
            string json   = Encoding.Unicode.GetByteCount(query) < 4096 ?
                            await GetAsync(query, ct : ct) : await PostAsync(method, parameters, ct : ct);

            if (String.IsNullOrEmpty(json))
            {
                return new VKResponse <T> {
                           Error = new VKError {
                               ErrorType = VKErrors.ConnectionError
                           }
                }
            }
            ;

            VKResponse <T> response = null;

            if (json == "{\"response\":[]}")
            {
                return new VKResponse <T> {
                           Response = Activator.CreateInstance <T>()
                }
            }
            ;
            try { response = JsonConvert.DeserializeObject <VKResponse <T> >(json); }
            catch (JsonSerializationException e) { throw new JsonSerializationException(json, e); }
            catch (JsonReaderException e) { throw new JsonReaderException(json, e); }
            catch (Exception) { return(new VKResponse <T> {
                    Error = new VKError {
                        ErrorType = VKErrors.UnknownError
                    }
                }); }

            if (response.Error.ErrorType == VKErrors.CaptchaNeeded)
            {
                try
                {
                    response = await Task.Run(async() =>
                    {
                        var captchaResponse = await InvokeCaptchaRequest(response.Error.Captcha);
                        if (captchaResponse == null)
                        {
                            throw new ArgumentNullException("Ответ на каптчу не может быть null.");
                        }
                        if (!captchaResponse.IsCanceled)
                        {
                            var newParameters            = new Dictionary <string, string>(parameters);
                            newParameters["captcha_sid"] = captchaResponse.Request.CaptchaSid;
                            newParameters["captcha_key"] = captchaResponse.UserResponse ?? String.Empty;

                            return(await GetResponse <T>(methodName, newParameters, ct));
                        }
                        return(new VKResponse <T> {
                            Error = new VKError {
                                ErrorType = VKErrors.CaptchaCanceled
                            }
                        });
                    });
                }
                catch (Exception)
                { return(new VKResponse <T> {
                        Error = new VKError {
                            ErrorType = VKErrors.CaptchaCanceled
                        }
                    }); }
            }
            else if (response.Error.ErrorType == VKErrors.AuthorizationFailed)
            {
                if (LoginNeeded != null)
                {
                    LoginNeeded();
                }
            }
            else if (response.Error.ErrorType == VKErrors.PermissionIsDenied)
            {
                if (InvalidScope != null)
                {
                    InvalidScope(new InvalidScopeEventArgs(methodName, parameters));
                }
            }

            return(response);
        }