• Слишком длинная строка.Как передать большой массив в хранимую процедуру VK API?

    tomnolane
    @tomnolane
    профессиональный разработчик
    вот как я отправляю через post
    // сам post
    public async Task<string> POST(string url, NameValueCollection nvc = null)
            {
                try
                {
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                    request.Method = WebRequestMethods.Http.Post;
                    request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0";
                    request.AllowAutoRedirect = true;
                    request.ProtocolVersion = HttpVersion.Version11;
                    request.AllowWriteStreamBuffering = true;
                    request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
                    string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
                    request.ContentType = "multipart/form-data; boundary=" + boundary; 
                    request.Headers.Add("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3");
                    request.Headers.Add("Accept-Encoding", "gzip, deflate");
                    request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; 
    
                    if (nvc != null)
                    {
                        Stream rs = request.GetRequestStream();
    
                        byte[] boundarybytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
                        string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
                        string _key = String.Empty;
                        foreach (string key in nvc.Keys)
                        {
                            rs.Write(boundarybytes, 0, boundarybytes.Length);
                            string formitem = string.Format(formdataTemplate, key, nvc[key]);
                            byte[] formitembytes = Encoding.UTF8.GetBytes(formitem);
                            rs.Write(formitembytes, 0, formitembytes.Length);
                        }
                        rs.Write(boundarybytes, 0, boundarybytes.Length);
                    } 
    
                    return await Task.Run(() =>
                    {
                        string resp = RESPONSE(request);
                        return resp;
                    });
                }
                catch (Exception ex)
                {
                    return ex.Message;
                }
            }
    //  post обращается к  ответу
     public string RESPONSE(HttpWebRequest request)
            {
                try
                {
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    string answer = "";
                    var headers = response.Headers.ToString();
    
                    if (Convert.ToInt32(response.StatusCode) == 302 || Convert.ToInt32(response.StatusCode) == 200)
                    {
                        using (Stream rspStm = response.GetResponseStream())
                        {
                            using (StreamReader reader = new StreamReader(rspStm, Encoding.UTF8, true))
                            {
                                answer = String.Empty; answer = reader.ReadToEnd();
                            }
                        } 
                        return answer;
                    }
                    else
                    {
                        response.Close(); return WebUtility.HtmlDecode(response.StatusDescription);
                    }
                }
                catch (Exception ex)
                {
                    return WebUtility.HtmlDecode(ex.Message);
                }
            }
    
    //после этого сам  код: (на примере wall.get)
    public async System.Threading.Tasks.Task<bool> GetWall(int id_group, int offset = 0)
            {
                try
                {
                    string url = "https://api.vk.com/method/wall.get?";
                    Main_Tools mt = new Main_Tools();
    
                    // вот что вам надо: создать коллекцию и передать в post (и добавлять/заполнять через for || foreach для вашего случая
    
                    NameValueCollection nvc = new NameValueCollection();
                    nvc.Add("access_token", VK_main.TOKEN);
                    nvc.Add("owner_id", id_group.ToString());
                    nvc.Add("count", "1");
                    if(offset != 0) nvc.Add("offset", offset.ToString());
                    nvc.Add("filter", "owner"); 
                    nvc.Add("v", VK_main.VERSION);
                    
                    // добавляете сколько вам нужно параметров и передаёте в метод POST вторым аргументом
    
                    string t = await mt.POST(url, nvc);
                   dynamic d = JObject.Parse(t);
                   // и далее разбираете json
    //.. и т.д.
    Ответ написан
    1 комментарий
  • В чем ошибка в обращении к хранимой процедуре vk api?

    tomnolane
    @tomnolane
    профессиональный разработчик
    https://api.vk.com/method/execute.getFriends?&access_token=aaaaaabbbbbbbccccc&users=1,23

    между execute.getFriends?&access_token у вас ?&. Это не правильно. Знак амперсанда уберите из запроса и добавьте "&v=5.63"
    Ответ написан
    1 комментарий
  • "Too many requests per second."Можно ли что-то сделать?

    Noizefan
    @Noizefan
    Хороший вариант - использовать method.execute.
    Или обнаружил сейчас такую фичу - создавая сообщество ВКонтакте можно сгенерировать большущее количество access token'ов. Если методы апи, используемые Вами, позволяют - рекомендую этот вариант. 50 токенов это 150 запросов в секунду, что в два раза больше чем при трёх execute'ах/сек.
    Ответ написан
    6 комментариев
  • "Too many requests per second."Можно ли что-то сделать?

    @d-stream
    Готовые решения - не подаю, но...
    Ну тут "в лоб" с данностью не побороться. Если оцениваемое число запросов - 300 шт, то с учетом ограничения - 100сек...

    Дальше только смотреть - действует это ограничение на один ip или одну учетку, если "на один ip" - ну значит размазываемся по нескольким прокси, если "на учетку" - то делаем несколько учеток.
    Ответ написан
    Комментировать
  • Парсинг json в C#(запрос в VK API).Где ошибка?

    devspec
    @devspec
    Помогло? Отметь решением
    Десериализовалось бы, если бы было просто вот так:
    {"count":6, "items":[5503339, 14267105]}
    А у вас еще есть {"response":... в начале
    Измените класс.
    Ответ написан
    1 комментарий
  • Тематика курсовой работы?

    gadfi
    @gadfi
    https://gamega.org
    Работать с vk api на с# можно, выше писали как (язык не принципиален), но в плане профита куда лучше потратить это время на asp.net, сделать что то скучное, но приближенное к реальным задачам, например расписание универа, или что то еще, можно даже и с vk api связанное, например вк бот с админкой который отдает какуюто нужную информацию тем пользователям вк корыте учатся в вашем универе ...
    что угодно, но с использованием того стека технологий с которым хотите работать
    Ответ написан
    2 комментария
  • Тематика курсовой работы?

    riot26
    @riot26
    <:З )~~
    Раз математик, тогда можно сделать приложение для проверки теории шести рукопожатий. Будет возможность использовать что-то из теории графов.
    Ответ написан
    Комментировать
  • Тематика курсовой работы?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    С уклоном в математику: задача поиска максимальной биклики в двудольном графе применительно к данным ВК. Взять любую аудиторию, например, подписчиков одной какой-то группы. Получить все группы, на которые они подписаны. Найти среди них наибольшую клику: т.е. тот набор групп, на которые подписан наибольший набор аккаунтов.
    Ответ написан
    Комментировать
  • Тематика курсовой работы?

    tomnolane
    @tomnolane
    профессиональный разработчик
    первое, вот -> моя программа CatPost написанная полностью на c# (wpf) которая использует оф. API (в т.ч. и ВК)
    так что - на C# МОЖНО работать с API (да и наверно с любым языком ООП или Функциональным, прототипно-ориентированный и некоторых других видах)
    второе, (простое) приложение для VK на c#: подробная статья

    п.с. на youtube полно видео уроков - как создать (простое) приложение для работы с API VK на C#
    п.с.с. на github тоже можно найти разные и полезные решения/наработки

    насколько это сложно, насколько целесообразно ?

    Просто(гугл/яндекс/ютуб/хабрахабр/тостер в помощь), целесообразно

    Тематика:
    по аналогии Алексей Лебедев -> создать приложение, которые ищет всех в ВК, кто учится в вашем учебном заведении - показать в списке: вместе с имя/фамилия + ава + id + пол (п.с. если память не изменяет, максимум API может за раз показать список первых 5000 юзеров)
    Ответ написан
    1 комментарий
  • Тематика курсовой работы?

    swanrnd
    @swanrnd
    Издатель HTML5 игр
    Сделайте приложение по анализу интересов например.
    Допустим в университете учится 10 000 человек.
    В каких группах они состоят, какая демография, школы и прочее. А потом куча красивых графиков.
    С ВК API работать просто, если:
    1) сможете сделать GET или POST запрос
    2) сможете распарсить XML и JSON.
    Ответ написан
    Комментировать