Работа со списком access token

В этой статье в кодах программ реализована возможность менять access token через какое-то количество запросов. В файле AccToc.txt можно прописывать не один access token, а со следующей строки сколько угодно. При запуске программа подхватывает первый access token и использует его при первом запросе, а со следующих запросов, программа будет уже руководствоваться настройками которые мы ей укажем. Давайте что бы было легче объяснять, посмотрим скриншот программы на Visual Studio:
вк компьютер
Как видно на фото, checkBox5 с текстом Менять access_token через 1 запрос, будет отвечать у нас за замену access token. А через какое количество запросов, это мы будем указывать в текстовом поле textBox2. Мы можем прописать там любую цифру и через указанное количество раз, программа будет делать запрос на сайт ВКонтакте уже с новым access token.

Для чего это нужно? Если вы уже тестировали программу и собирали подписчиков Павла Дурова, которые собирались не одну минуту, а как мы можем посчитать с последнего скриншота программы на Visual Studio написанной на C Sharp, ровно 33 минуты без учёта секунд. Довольно таки не слишком быстро. Но надо так же отметить, что сбор происходил с одним access token.
Как показали логи в файле Logwork.txt, частота запросов в интернет у нашей программы составила примерно до 15 запросов в секунду.
Это очень много, по причине того что в манускриптах ВК написано вроде бы как один запрос в секунду. Не вспомнить точно, но не 15 запросов это факт.
Так же в этом вопросе надо уделить внимание тому, что сайт ВКонтакте не позволит на один access token получать до 15 ответов в секунду.
Кстати это при моём интернете 15 запросов, а у вас предположим интернет получше чем у меня и тогда может быть даже и больше пятнадцати запросов в секунду.
И так же ещё одно надо отметить, что программа работала не через прокси. Если запросы будут отправлятся через прокси, то тогда количество запросов в секунду будет меньше. Особенно если прокси беплатные и какие бы они хорошие не были, всё равно скорость интернета будет меньше. Это как бы наверное не требует подробных объяснений.

Как уже было сказано, сайт ВКонтакте не позволит получать ответы с такой частотой. В таких вот случаях периодически выдётся ошибка Too many requests per second. Это значит что из пятнадцати запросов в секунду, нужных нам ответов мы получим в среднем примерно от одного до четырёх штук, все остальные ответы будут с вот этой вот ошибкой: Too many requests per second, которая переводится как: слишком много запросов в секунду.
А так как такой ответ, с такой вот ошибкой нас не устраивает, программа записав в файл ERRORS.TXT который в корне программы стандартный лог запроса и ответа, отправлялась опять в начало нашей функции resHtml и с тем же URL повторяла всё заново. В итоге пока собирались подписчики Павла Дурова, в файле ERRORS.TXT насобиралось очень много ошибок Too many requests per second.

Если брать ответы с ошибками, это пустой трафик. Ответы же с подписчиками Павла Дурова или с какой либо другой информацией которая нам полезна или нужна, можно назвать полезным трафиком.
Так вот если примерно посчитать, полезного трафика в три раза меньше чем пустого.
Это конечно не нормально, так как надо стараться делать так, что бы наша программа работала в полную мощность, а не через раз, через два или так далее раз.
Тем более процесс нам позволяет получать информацию во много раз быстрее. И так же можно сделать не один access token, а два три четыре пять и туда дальше. Желательно конечно что бы access token были с разных аккаунтов. Можно допустим приложение с сайта ВКонтакте сделать в каком-то одном аккаунте, а потом в других аккаунтах получать access token с этого приложения.

В первых статьях на этом сайте было рассказано как получить приложение и как получить access token. Вот ссылка Взять API ВКонтакте. Под API подразумевается access token.
Надо брать вот эту ссылку:
https://oauth.vk.com/authorize?client_id=ID&scope=offline,wall,photos,status,friends,video,pages&display=page&redirect_uri=https://oauth.vk.com/blank.html&response_type=token&revoke=1&v=5.62&state=123456
Открываем её в браузере и если вы не авторизированы в ВК, то тогда у вас сначала откроется форма авторизации, то есть введите логин и пароль и так далее. А потом уже откроется страница спрашивающая, разрешаете ли вы своему приложению работать с этим аккаунтом.
Допустим можно открыть в браузере окно инкогнито, получить на один аккаунт один access token, потом закрыть окно инкогнито и снова открыть. И получить access token на второй аккаунт, то есть что бы опять открылась страница авторизации. Это конечно объяснение для слишком умных, а тот кто тупой тот и сам разберётся.

Идём дальше. В файл AccToc.txt было сохранено пять access token и программу запустили на сбор информации по Павлу Дурову. Так вот подписчики собрались ровно за 11 минут. То есть с одним access token 33 минуты, а с пятью access token 11 минут. Ровно в три раза, один в один.
Наверное дальше объяснять уже излишне.

Давайте перейдём к программе на Devel Studio в которой мы пишем программу на языке PHP. По функции resHtml видно, что для запросов в интернет используется библиотека cURL. Вот здесь вы можете подробнее почитать за неё Клиентская библиотека работы с URL Не будем слишком вдаваться в подробности, скажем только что cURL, это в какой-то степени эмулятор браузера. Всё это не выглядит так, как мы привыкли видеть допустим свой браузер в компьютере. cURL это программный браузер и от открываемых страниц мы получаем HTML код, с которым уже дальше работает программа, которой не надо смотреть на браузер как нам.
Под выражением эмулятор браузера подразумевается то, что в запросах можно указывать заголовки, user agent, реферера то есть с какой как бы мы ссылки перешли на запрашиваемый сайт и ещё много разного. За это отвечает curl_setopt, вот здесь можно подробно за него почитать curl_setopt. Там целая куча всего того что мы можем прицепить к запросу.
Для нашей программы всё это конечно не нужно, мы используем всего лишь несколько параметров curl_setopt. Настройка ssl, то есть работа с https, потом прокси http и socks4 и ещё несколько параметров которые в коде программы можно посмотреть и почитать за них в мануале той ссылки которая выше.

Вернёмся к частоте запросов. Как ведёт себя программа, которая написана на Devel Studio? Здесь картина совершенно иная, программа делает от одного до четрёх запросов в секунду. Опять же смотря какой интернет и у вас допустим она может работать немного быстрее. Прописав в файле AccToc.txt те же пять access token никакой разницы не было. То есть подписчики Павла Дурова были собраны за точно такой же период времени как и с одним access token.
Напрашивается вывод, что для одного access token до четрёх запросов в секунду в принципе нормально.
Если у кого-то только один access token, а больше нет возможности сделать, то наверное лучше использовать программу написанную на Devel Studio.

Ну а если про Visual Studio и про использование на ней только одного access token, то допустим можно дать ей команду Sleep, что бы после каждого запроса программа как бы немного засыпала, то есть подтормаживать весь этот процесс. Хотя конечно это не умно и если программа может работать быстрее, то зачем её тормозить.
Допустим в конце функции resHtml можно добавить вот такую строчку перед return:
System.Threading.Thread.Sleep(500);
В этом случае программа после каждого запроса будет тормозить на пол секунды.
Конечно всё это только в данной ситуации и конечно же эту остановку между запросами можно было ещё изначально задумать и не с помощью Sleep, потому что это как бы крайний случай, а сделать всё совсем по другому, что бы программа по чётко установленному времени отсылала по одному запросу.

Просто как бы получается так, что в программе написаннойй на Devel Studio вот эта вот регулировка запросов как бы и не нужна, в этой программе ошибка Too many requests per second появляется в пределах допустимого. А в программе написанной на Visual Studio такая цель как бы и не ставилась.

Тем более туда дальше мы столкнёмся с такими случаями, в которых с одним access token сильно не развернёшься. Допустим если говорить про скачивание новостей. Есть такие аккаунты или группы в которых новостей очень много. Если такие аккаунты или группы попадаются не слишком часто, то ещё как бы можно проскочить и с одним access token.
Потом ещё такой вопрос как парсинг новостей с сайта ВКонтакте. То есть это программу запускаешь и она может сутками качать и качать новости с ВК и допустим отбирать только те которые подходят по ключам и если надо то сохранять. Такую возможность как парсинг, однозначно можно сказать, что с одним access token невозможно сделать. Почему?

Потому что к скачиванию новостей у сайта ВКонтакте немного особое отношение. Мы конечно не будем сильно вдаваться в эту тему сейчас, поговорим о ней подробно тогда, когда мы будем писать код для скачивания новостей с сайта ВКонтакте. Сейчас же можно только сказать, что если долго одним access token качать новости с ВК, то этот access token рано или позно забанят. Заметьте аккаунты не банятся и приложение не банится. В бане только access token и на 24 часа с момента бана. Точного подсчёта не велось, но скорей всего на двадцать четыре часа и навряд ли плюс минус. То есть через сутки этот access token можно использовать.
Если одним access token качать новости, то хватает его иногда на пол часа, иногда минут на сорок, а иногда на час, но больше часа навряд ли. И что примечательно, при бане access token, с сайта ВКонтакте мы получаем ту же ошибку Too many requests per second. И в таком случае, даже если мы будем отправлять запросы хоть с перерывом в десять минут, всё равно мы будем получать эту ошибку.
И ещё что можно добавить, это насчёт других запросов. Допустим по сбору лайков, друзей, подписчиков и так далее, забаненный access token будет работать, а вот насчёт новостей, только через сутки.

Поэтому при долгом скачивании новостей, допустим попадается какой-то аккаунт или группа в которых новостей немеренно или допустим при парсинге, а в таком случае они постоянно качаются, приходится прибегать к различным хитростям скажем так, допустим к подмене access token через какой-то период времени. То есть что бы не одним постоянно качать, а заменять другим. И как уже было сказано выше, такое отношение только к новостям, всё остальное можно хоть одним access token выкачивать целыми сутками, а к новостям вот такой особый интерес.
И что подразумевается под выражением много новостей? Это значит допустим триста тысяч новостей, четыреста тысяч, пятьсот тысяч, шестьсот тысяч и так далее. Если же новостей примерно где-то в рамках ста тысяч, то это может осилить даже и один access token. Хотя из практики, при количестве тридцать, сорок или пятьдесят тысяч новостей лучше подкинуть другой access token.

Дальше мы уже не будем обсуждать эту тему, так как сейчас мы не пишем код для скачивания новостей. Всё это было рассказано опять же для того, что бы вы примерно представляли, с чем мы столкнёмся туда на будущее.

Смотрим скриншот с программы написанной на Devel Studio и с её добавленными компонентами.
вк компьютер
Ещё в обеих программах прописана возможность сохранения настроек даже после перезапуска программ. Это значит, что если мы отметим эти два новых чекбокса и выключим программу, а потом её запустим снова, то эти чекбоксы будут уже включены. И так же с текстовым полем, которое указывает через какое количество запросов менять access token и какую бы мы цифру там не написали, то она будет в этом текстовом поле стоять и после перезапуска программы.
Что бы реализовать такую возможность сохранения настроек, в корне программы в папке temp мы создаём файл с названием Settings.txt. В этом файле программа как раз и будет сохранять те настройки которые были сделаны в самой программе. Наверное кто-то может уже слышал про такие файлы настроек с расширением ini. Такое бывает часто, что в корне любой другой программы, может находится файл с таким расширением. Одним из предназначений этих файлов, как раз и является сохранение настроек программ.
У нашего файла расширение пусть будет txt, но суть его будет примерно такая же как и у файлов с расширением ini. Значит включите или выключите чекбоксы, пропишите другую цифру и открывайте файл Settings.txt, что бы увидеть какие там изменения. Разобраться будет не сложно. Вот содержимое файла Settings.txt с программы Devel Studio на данный момент:
PathBase=D:\BAZAVK
checkbox5=0
checkbox6=0
edit2=1
Если у чекбокса стоит ноль, это значит он выключен, если один, значит он включен. В Visual Studio вместо edit2 будет textBox2.

Можно в ручную открывать этот файл и прописывать значения. Как мы видем значение PathBase тоже было перенесено в этот файл. При первом запуске программы или если файл Settings.txt отсутствует, программа пропишет вот так: PathBase=путь к корню программы.
Соответственно файл PathBase.txt который раньше служил для прописывания пути к нашей базе с сайта ВК, уже не нужен. Скопируйте из него ваш путь к базе и пропишите его в файле Settings.txt после PathBase= а файл PathBase.txt можно выкинуть.

И ещё про файл Dialog.txt, если в этом файле прописать вот такие слова:
proxy
acctok
ini
то тогда в программе при слове
- proxy обновится список проксей
- acctok обновится список access token
- ini произойдёт обновление настроек.
Если же в файле Dialog.txt прописать всё что угодно, только не эти слова, то тогда в файл Logwork.txt, логи запроса и ответа в интернет, будут сохранятся последовательно, а не перезаписываться, как допустим при пустом файле Dialog.txt.
Только не забывайте, что если вы указали программе сохранять логи запроса в интернет последовательно, то тогда файл Logwork.txt может вырасти до очень больших размеров. А насчёт слов proxy, acctok или ini, то программа их автоматически затрёт и файл Dialog.txt будет пустой.
Конечно же всё это только на время, туда дальше мы попытаемся сделать так, что бы программу при работе не подклинивало и допустим реализуем такую возможность, как обновить список проксей или access token одним нажатием кнопки внутри самой программы. Хотя конечно файл Dialog.txt всегда будет актуальным, так как прописав в нём какое-то слово, программа выполняет какие-то действия и это никогда не помешает.

Ну и давайте уже про коды программ. Вот код на программу с Visual Studio cod7vk_csharp.txt и на программу с Devel Studio cod7vk_php.txt. И так же ещё на программу Devel Studio коды непосредственно для компонентов cod_vk_php_Components.txt

infgo.ru