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

Допустим у нас есть список пользователей и перед нами стоит задача: у каждого из этих пользователей, собрать друзей и сложить этих всех друзей в один список.

Для примера у нас уже есть один список, который содержится в файле uscomments.txt. В этом файле находятся все пользователи которые комментировали фотографии Павла Дурова. Но так как файл uscomments.txt слишком большой, а точнее он состоит из 222733 аккаунтов пользователей и пабликов, то конечно мы не будем собирать друзей у всех пользователей с этого списка, а возьмём допустим 15000 самых первых и самых активных.
И всех друзей вот этих пятнадцати тысяч пользователей, сложим в общую кучу и пропустим через нашу функцию actives. Это нам покажет какие пользователи чаще всего находятся в друзьях, во взятом нами отдельном списке, который состоит из пятнадцати тысяч аккаунтов.

Значит задача ясна. Начнём с того, что в нашей программе надо организовать или выделить какое-то место, где эта задача будет исполнятся. Всё это мы будем делать во второй форме, так как этот общий сбор друзей не будет входить в основной сбор информации по аккаунту.
То есть это значит, что по каким-то причинам, мы обратили внимание на какой-то аккаунт, из множества аккаунтов, которые будут находится в нашей базе с сайта ВКонтакте. И решили взять этот файл uscomments.txt, собрать с него всех друзей и посмотреть кто из них самый активный.

Смотрим на фотографию программы Visual Studio и на организацию вот этого места, где мы попытаемся решить нашу задачу.

вк компьютер
Не забываем что все эти элементы размещены на второй форме.
Теперь давайте немного описания про каждый элемент.
- Кнопка button1.
Эта кнопка будет открывать или скрывать panel1. Если panel1 скрыта, кнопка button1 откроет эту панель. Если же panel1 открыта то тогда при нажатии на кнопку, panel1 скроется со всеми размещёнными на ней элементами.
- Панель panel1.
На ней как раз и находится всё это место для выполнения нашей задачи. Так как вторая форма будет использоваться для выполнения разных задач, то эти задачи и будут скажем так размещаться на таких вот панелях. По умолчанию мы её указываем невидимой.
- Однострочное текстовое поле textBox1.
В этом поле мы укажем нашу цифру 15000. Если это поле оставить пустым, то тогда друзья будут собираться со всего списка. Допустим если бы наш файл uscomments.txt состоял из пятнадцати тысяч строк или меньше, значит мы бы это поле оставили пустым.
- Однострочное текстовое поле textBox3.
Все друзья будут собираться в файл. Но друзей может быть слишком много и настолько много, что файл в который они будут собираться может вырасти до таких пределов, что мы его попросту даже не сможем открыть. Поэтому мы указываем максимальное количество строк вот в этих результативных файлах, назовём их так. По умолчанию поставим четыре с половиной миллиона. Это значит что как только в результативном файле соберётся 4500000 строк или друзей, то тогда программа следующих будет собирать уже во второй файл. Название файлов будет таким: uscomments_15000ListFr.txt. Как только в этом файле собирается 4500000 строк, следующих программа будет собирать уже в файл с таким названием: uscomments_15000ListFr1.txt и дальше по порядку. Ну и наверное не трудно догадаться, что если бы мы не указывали цифру 15000, то тогда название файла было бы вот таким: uscomments_ListFr.txt. Файлы с результатами будут находится в той же папке где и находится файл uscomments.txt.
- Однострочное текстовое поле textBox2.
Здесь указываем путь к файлу uscomments.txt или к любому другому файлу со списком пользователей, с которых у нас есть желание собрать всех друзей. И каким бы не было имя этого файла, программа в конце имени этого файла добавит вот такую строчку _ListFr. Эта строчка может иметь варианты, в зависимости от указанных нами данных для нашей программы. В нашем случае, эта строчка будет выглядеть вот так _15000ListFr.

Теперь смотрим скрин с программы написанной на Devel Studio:

Программа ВК
Насчёт описания компонентов, здесь всё точно так же.

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

Здесь исходник на Visual Studio infgo.ru_vs_test.zip. Распаковываете архив и если надо открыть этот проект в Visual Studio, находите файл test/test.sln, открываете его уже в своей программе Visual Studio и у вас должен открыться весь проект со всеми кодами и так далее.
Если открывать проект не нужно, а нужны просто коды программы, то тогда в папке test/test ищем файлы Form1.cs или Form2.cs. Открываем их любым текстовым редактором и эти файлы содержат те же самые коды, которые в предыдущих статьях были представлены, только в текстовых документах.
Если же кому-то не интересны все эти коды и процесс написания самой программы, то тогда находите папку test/test/bin/Debug. В этой папке запускаете файл test.exe и у вас должна запустится программа, на которой вы сможете сделать всё то, о чём мы пишем в этой статье и в предыдущих статьях, которые относятся к этой программе по сбору информации в сайте ВКонтакте.

Теперь исходник на Devel Studio infgo.ru_ds_test.zip. И опять же если кому-то не интересно написание самой программы и так далее, то тогда находите файл test/test.exe. Запускаете его и должна запустится программа.
Для тех же кому нужны коды, в папке test/debug два файла с кодами по формам. И в папке test/backup находится файл с бэкапом всего проекта, запускаете его в своей программе Devel Studio, создаёте проект и у вас будет всё наглядно по всем компонентам.
Так же можно запустить файл test/test.msppr и по идее у вас должен запуститься уже готовый проект, в вашей Devel Studio. Те кто работает с программой Devel Studio, должны разобраться что куда и как.

Пароль и в первом и во втором архиве infgo.ru
Дальше по мере написания программы исходники будут обновляться.

И ещё что хотелось бы добавить именно про коды в самих программах. Так как была добавлена вторая форма, то некоторым моментам хотелось бы уделить внимание.
Особенно насчёт программы написанной на Visual Studio. Во первых про глобальную переменную, которая находится в классе genvar. Если мы посмотрим на код программы, то увидим что этот класс получил значение или свойство public. Это сделано для того что бы глобальные переменные были видимые во второй форме.
И во второй форме мы сможем получать значения этих переменных с приставкой Form1. Как это будет выглядеть:

Form1.genvar.PathBase
Вот так во второй форме можно будет получить значение, которое будет показывать путь к нашей базе с сайта ВКонтакте. И остальные глобальные переменные соответственно. То есть как мы видим, спереди добавляется Form1 и точка.
И насчёт функций которые были написаны в первой форме. Здесь тоже не всё так просто и эти функции во второй форме просто так не будут видимые. Для того что бы не писать те же самые функции во второй форме, надо в каждом коде допустим для каждого элемента, добавлять вот такую строчку:
Form1 frm1 = (Form1)this.Owner;
После этой строчки, все функции написанные в первой форме можно будет использовать и во второй форме. Только с вот такой приставкой спереди: frm1 и после ставим точку, а дальше идёт функция.
Немного похожая ситуация как и с глобальной переменной.
Как допустим во второй форме будет выглядеть наша функция file_put_contents, то есть сохранение какой либо информации в файл:
Form1 frm1 = (Form1)this.Owner;
frm1.file_put_contents(resFile_path[i], frm1.actives_php(arrf));
Сначала прописываем в код значение frm1, а дальше пользуемся любой функцией из первой формы. Так же в этом примере видно, что таким же образом используется и функция actives_php.

Насчёт же программы написанной на Devel Studio, здесь ничего такого нету и всё что написано в первой форме, является видимым и во второй форме, в точно таких же значениях. Только естественно это касается функций, глобальных переменных и допустим классов если они будут.

Теперь посмотрим на результаты, которые были собраны 22 января 2020 года. Все друзья собирались с первых пятнадцати тысяч пользователей, из файла uscomments.txt, в котором находятся все пользователи комментировавшие фотографии Павла Дурова.
Результат поместился в один файл uscomments_15000ListFr.txt и всех друзей оказалось 2604133 пользователя. То есть два миллиона шестьсот четыре тысячи сто тридцать три пользователя. В общем если округлить, получилось чуть больше двух с половиной миллионов.
И конечно же в этом файле они были распределены функцией actives. И вот самый первый десяток из этого файла.
47 : 206291137
40 : 286768025
35 : 463966831
33 : 321847393
32 : 224203778
32 : 66269852
31 : 456400357
31 : 332669416
31 : 197767250
31 : 124157748
Так же что ещё насчёт файла uscomments.txt, как и вообще насчёт всего аккаунта Павла Дурова можно добавить. Надо уделить внимание некоторым особенностям этого аккаунта. Все пользователи задействованные в этом аккаунте и неважно, то ли они комментировали фотографии или новости или что-то лайкали или где-то в другом месте отметились. Так вот, все эти аккаунты какие-то несерьёзные что ли, если так можно их назвать. Если говорить напрямую, это самые дешёвые фейки из всех фейков которые могут быть.
Создаётся такое впечатление, что весь аккаунт Павла Дурова набит каким-то дешёвым ширпотребом.
Всё это к тому, что в файле uscomments.txt, слишком много аккаунтов, которые или удалены или забанены или приватные или в них друзей по три по четыре штуки. Поэтому была взята цифра 15000 и весь результат поместился в один файл.

Но на этом было решено не останавливаться.
После того, когда файл uscomments_15000ListFr.txt был собран, то из этого файла было взято первых 2010 пользователей, то есть самых активных. И со всех них тоже были собраны друзья. Так вот здесь ситуация оказалась немного другая, если даже не сказать совсем другая.
Значит результат, вот этого второго сбора, назовём его так, поместился уже в целых три файла, с вот такими именами:

uscomments_15000ListFr_2010ListFr.txt
uscomments_15000ListFr_2010ListFr1.txt
uscomments_15000ListFr_2010ListFr2.txt
То есть как видим программа их пронумеровала и получилось всё так как и было задумано. И так же видно что цифра 2010 намного меньше чем цифра 15000, а результат получается насколько больше.
Ну и дальше давайте посмотрим с каждого файла по первому десятку.
Файл uscomments_15000ListFr_2010ListFr.txt - 1926482 пользователя. Смотрим первых десять пользователей:
304 : 141448896
303 : 32740186
301 : 320700293
300 : 333340683
296 : 403131575
294 : 79551412
294 : 32305903
293 : 354248911
292 : 329177215
292 : 155146377
Файл uscomments_15000ListFr_2010ListFr1.txt - 1940331 пользователя. Смотрим первых десять пользователей:
235 : 155146377
234 : 333340683
226 : 220633544
226 : 141448896
226 : 79551412
224 : 403131575
224 : 342934899
224 : 320700293
223 : 329177215
223 : 32740186
Файл uscomments_15000ListFr_2010ListFr2.txt - 1641817 пользователя. Смотрим первых десять пользователей:
172 : 320700293
162 : 348292137
162 : 79551412
160 : 329177215
160 : 116067259
159 : 342934899
159 : 220633544
159 : 141448896
159 : 45941726
158 : 362898446
И теперь обратим внимание на самый первый аккаунт, в самом первом файле. Это пользователь с идентификатором 141448896. В остальных файлах этот пользователь тоже присутствует, и тоже в первой десятке. Соберём все его показатели со всех трёх файлов:
304 : 141448896
226 : 141448896
159 : 141448896
Так как вся информация которая находится в этих трёх файлах, собиралась с одного списка, то это значит, что цифры до двоеточия можно складывать. И по этому пользователю, получается вот такой результат:
689 : 141448896
Видно что пользователь с идентификатором 141448896, находится в друзьях у 689 пользователей. А так как список состоял из 2010 пользователей, то получается почти третья часть.
Чистая математика и ничего больше.

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

Ну и ещё можно добавить. Для сбора друзей со списка пользователей, во второй форме написана функция friendsList. Вот именно эта функция отвечает за это действие.
И в конце когда уже сбор друзей будет закончен, в файл friendsList.txt делается запись, которая содержит пути к результативным файлам. Путь к этому файлу будет вот такой: путь к вашей базе с сайта ВКонтакте/temp/note/friendsList.txt.
Это делается для того, что если много раз собирать друзей со списков пользователей, то со временем забывается где разбросаны все эти файлы. И в случае если надо будет, то в файле friendsList.txt будет что-то наподобие документации обо всех этих действиях.
infgo.ru