Собрать подписчиков со списка пользователей

Эта статья является продолжением этой статьи: Собрать всех друзей. Только сейчас будем собирать не друзей а подписчиков. Весь функционал для этого действия точно так же будет находится на второй форме и програмный код тоже написан на второй форме.
Так же отметим, всё что находится на второй форме, к основному сбору информации по аккаунту с сайта ВКонтакте не имеет отношения. Это значит, что если возникло желание собрать какую-то отдельную информацию по какому-то отдельно взятому аккаунту, вот тогда мы и обращаемся ко второй форме. Ну а по мере возникновения таких пожеланий, будем вторую форму заполнять. Думаю с этим всё ясно.
Смотрим на скриншот программы написанной на Visual Studio:
программа вк
С фотографии видно, что для того что бы собрать всех подписчиков со списка пользователей, добавлен новый элемент button3 с текстом FOLL LIST. В Devel Studio всё точно так же. Это кнопка (button3), при нажатии на которую будет открываться панель (panel1), которая взята с предыдущего действия, а именно со сбора друзей. То есть для того что бы собрать всех подписчиков со списка пользователей, новая панель не добавляется, потому что все указываемые параметры которые нужны для этого действия, являются точно такими же. То есть оставляем ту же самую панель. Единственное это то, что при нажатии на кнопку с текстом FOLL LIST, панель (panel1) будет появляться чуть ниже, что бы быть на уровне этой кнопки.
По заполнению панели (panel1) читаем статью по сбору всех друзей со списка пользователей, ссылка на которую указана в начале статьи. Всё точно так же, с единственным различием: название результативных файлов будет заканчиваться на ListFoll.

И теперь немного про програмный код, который как было сказано выше, написан во второй форме (Form2). В виду того что действия по сбору всех друзей и подписчиков со списка пользователей однообразные, была использована функция friendsList. Только теперь её название изменено соответственно на follFrList.
И конечно же содержимое этой функции тоже было немного подправлено, а именно была добавлена возможность ещё и сбора подписчиков. Переменная method в этой функции может принимать два значения: friends и followers, в соответствии с тем какую задачу надо выполнить.

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

Ну и теперь посмотрим небольшой пример, в котором были собраны все подписчики с пользователей, которые лайкнули комментарии, собранные со всех фотографий аккаунта Павла Дурова. В прошлой статье: Собрать лайки, была собрана по возможности вся информация за все фотографии с этого аккаунта. Читаем эту статью и обращаем внимание на то место где указана ссылка на файл, в который были собраны все лайкнувшие комментарии пользователи. То есть этот файл, уже размещён в нашей базе, которую мы собираем с сайта ВКонтакте. Вот эта ссылка:

GENRES/Accounts/id1/2020-02-20_002158/photos/comments/uslikes.txt
С этого файла были взяты первые 21000 (Двадцать одна тысяча пользователей) и со всех этих пользователей, по крайней мере с тех аккаунты которых не удалены, не забанены или не являются приватными были собраны подписчики. Результат поместился в два файла:
photos/comments/uslikes_21000ListFoll.txt
photos/comments/uslikes_21000ListFoll1.txt
В первом файле с именем uslikes_21000ListFoll программа собрала 3340036 (Три миллиона триста сорок тысяч тридцать шесть) пользователей и во втором файле с именем uslikes_21000ListFoll1 программа собрала 2717561 (Два миллиона семьсот семнадцать тысяч пятьсот шестьдесят один) пользователь.
Смотрим на первые десять пользователей с файла uslikes_21000ListFoll:
36 : 523288688
35 : 403286849
32 : 400240676
32 : 399581074
31 : 512251800
30 : 387235139
30 : 232676378
28 : 399697741
27 : 399380081
26 : 215457672
Так же с этого файла uslikes_21000ListFoll, были взяты ещё первые 6633 (шесть тысяч шестьсот тридцать три) пользователя и с них тоже были собраны подписчики. Результат поместился в один файл:
photos/comments/uslikes_21000ListFoll_6633ListFoll.txt
В этом файле программа собрала 2093162 (Два миллиона девяносто три тысячи сто шестьдесят два) пользователя. Смотрим первых десять пользователей:
316 : 247996378
271 : 261237667
269 : 229031184
268 : 329426663
264 : 301854931
263 : 282221015
247 : 373973986
245 : 355938245
216 : 531611141
213 : 302409383
По сбору подписчиков со списка пользователей на этом всё и теперь плавно и как бы ненавязчиво:) перейдём к другому вопросу, который не относится к теме этой статьи, но что бы не писать новую статью, вкратце рассмотрим этот вопрос здесь.

В программу добавлена третья форма (Form3). Эта форма в программе будет отвечать за приостановку программы. В предыдущей статье, говорилось о том что при сборе лайков, программу нажатием кнопки можно остановить. Но если программа выполняет какие-то другие функции, то она как бы находится в клине и её остановить не возможно. Теперь же программу можно будет приостановить в любой момент и в любое время продолжить работу программы с того места, на котором её работа была остановлена. Рассмотрим подробнее как это сделать.

Так как программа может находится в клине и периодически будут возникать такие моменты, когда на кнопку будет нажать невозможно, то в этом способе приостановки программы, было выбрано обращение к файлу Dialog, который отвечает за диалог с программой. Это значит что если в этом файле прописывать различные команды, то программа не останавливая своей работы, будет эти команды исполнять. Этот файл находится в папке temp, вот его полный путь начиная с папки в которой находится программа:
GENRES/temp/Dialog.txt
Все команды которые можно указать в этом файле прописаны в функции resHtml. И была добавлена ещё одна команда, которая будет называться stop. Теперь если в файле Dialog прописать слово stop, функция resHtml затрёт файл Dialog, то есть сделает его пустым и откроет третью форму (Form3). Вот как это будет выглядеть:
вконтакте информация
Как только произойдёт открытие третьей формы (Form3), программа остановит исполнение всех функций и полностью прекратит свою работу. Можно сказать, что она как бы замрёт на то время, которое нам нужно. Что бы продолжить работу программы, нужно нажать на большую кнопку с текстом: закрыть форму что бы программа продолжила свою работу или как обычно нажать крестик в правом верхнем углу. И как только форма три (Form3) будет закрыта, программа продолжит свою работу с того места на котором она была остановлена. Этот способ остановки касается любых функций программы. Так же и при сборе лайков тоже можно применять этот способ. То есть при сборе лайков остановить программу можно будет даже двумя способами.
Для того что бы в ручную не открывать файл Dialog и не прописывать в нём команду stop, можно создать файл с расширением bat и прописать в нём вот такие строчки:
echo stop > Dialog.txt
:: pause
exit
Название этому файлу даём stop и размещаем его в папке temp, там же где находится файл Dialog. При запуске файла stop.bat, то есть если два раза по нему кликнуть, команда прописанная в этом файле, запишет слово stop в файле Dialog и программа приостановит свою работу. Файл stop.bat уже будет находится в исходниках.

Так же форма (Form3) будет отвечать ещё за два действия. Это уже не касается нашей приостановки программы. Допустим программа работает, всё прекрасно, но вдруг исчезает интернет. Бывает такое, может не часто, но бывает. У кого-то может быть и часто. И программа в таком случае, будет отсылать один и тот же запрос на сайт ВКонтакте, пока не появится интернет. В таком случае форма (Form3) откроется автоматически и каждые тридцать секунд будет отсылать запрос для проверки интернета. Только здесь надо отметить, что сама форма (Form3), проверять интернет не будет, она будет отсчитывать тридцать секунд, закрываться, программа будет продолжать свою работу, а это значит что она первым же делом пошлёт тот же запрос на сайт ВКонтакте и если в ответ тишина, то опять откроется форма (Form3), отсчитает тридцать секунд и всё по новой, пока не появится интернет. Если кого-то тридцать секунд не устраивает, можно подправить цифру в самих исходниках.
Для того что бы проверять наличие интернета, в программе с Visual Studio написана функция ping_iNET. А в программе с Devel Studio функция iNET, потому что там не пингом, а простым обращением к сайту проверяем наличие интернета. Смотрим скриншот, который нам покажет, что будет если отсутствует интернет.

находить вк
Как видим надпись теперь указывает, что нету интернета, а рядом находится таймер, который отсчитывает тридцать секунд назад.

Теперь второе действие, за которое тоже будет отвечать третья форма (Form3). Допустим программа работает, всё прекрасно, но вдруг появляется какая-то ошибка, которую присылает нам сайт ВКонтакте и которая не внесена в исключения в функции resHtml. Или допустим если программа работает через прокси, бывает такое, что прокси не обращается к нужному нам сайту, а именно к сайту ВКонтакте, а присылает свой ответ, в котором к примеру: введите код для того что бы зайти на сервер или ещё какую-то чепуху, то есть html код этой страницы. С бесплатными прокси такое бывает, не часто но бывает. Или как было сказано выше, сайт ВКонтакте присылает не записанную в исключения ошибку. Допустим Слишком много запросов в секунду или Достигнут предел скорости или ещё какая-то неучтённая ошибка. По возможности мы постарались все ошибки прописать, но конечно же какие-то всё равно скорей всего остались.
Что тогда будет происходить в таких случаях? Программа в файл ERRORS.TXT, который находится в корне программы, будет скидывать логи этих ошибок и так до тех пор пока что-то не произойдёт. Хорошо будет если эта ошибка исчезнет сама собой, а если нет, то тогда единственный способ остановить работу программы, это снести её в диспетчере задач. Теперь же автоматически откроется третья форма (Form3), смотрим скриншот:

вк информация
И как видно надпись теперь указывает, что слишком много ошибок и таймер будет отсчитывать шестьдесят секунд назад. И каждые шестьдесят секунд форма три (Form3) будет закрываться, опять делать запрос и если опять ошибка, то форма три (Form3) опять открывается и всё по новой. И так до тех пор, пока или ошибка сама собой не исчезнет или пользователь не предпримет какие-то действия.

Теперь рассмотрим новые записи в файле Settings.txt, в нём прописаны три новых строчки, которые непосредственно касаются этих нововведений.

domen_iNET
bad_iNET
filerrors
- Первая domen_iNET, указывает домен сайта для проверки интернета.
- Вторая bad_iNET, указывает количество первых пустых ответов, по истечении которых сработает проверка интернета. По умолчанию стоит тридцать. Но если используются прокси, можно эту цифру увеличить, хотя если тридцать раз подряд будут нерабочие прокси, то скорей всего надо обновить список прокси.
- Третья filerrors, указывает количество первых неучтённых ошибок, то есть тех которые будут записываться в файл ERRORS.TXT. По умолчанию указана цифра сто. Это значит что если таких ошибок будет сто штук подряд, откроется третья форма (Form3) и будет ожидание в шестьдесят секунд.

Можно было бы конечно и не делать всего этого с третьей формой, программа со всем этим справлялась и до этого, просто периодически надо было мониторить работу программы, для того что бы быть в курсе. Но всё таки удобнее, когда программа в случае непредвиденных ситуаций выдаёт сообщение и по крайней мере на время приостанавливает работу программы, а не напрягает сайт ВКонтакте кучей запросов, которые в ответ присылают одни ошибки.
Да и люди бывают разные, допустим будет какой-то слишком умный ковырять пальцем в носу и ждать с моря погоды, а программа в это время будет сутками шлёпать пустые запросы в холостую. А так выскочит сообщение, что вот мол так и так, нету интернета. Поковыряйтесь пальчиком где-то в другом месте, допустим в модеме или где там у вас интернет. Только в носу ковырять не надо, там интернета точно нет:)

Насчёт нету интернета и насчёт ошибок, всё это ещё тестируется и в случае каких-то ошибок в последствии будем исправлять. На этом заканчиваем статью, выкладываем исходники. На Visual Studio infgo.ru_vs_test.zip и на Devel Studio infgo.ru_ds_test.zip
Пароль в архивах infgo.ru
В исходниках присутствуют коды программ, которые можно открыть и посмотреть в обычном текстовом редакторе.
infgo.ru