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); }
public override void OnComplete(VKResponse response) { var handler = onComplete; if (handler != null) { handler(response); } }
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); }); } }
/// <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); }
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(); }
public override void OnComplete(VKResponse response) { OnRequestComplete?.Invoke(response); }
private void OnSuccess(VKResponse obj) { throw new NotImplementedException(); }
/// <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); }