Table of contents
Finds installed POS widgets on the public vk page and checks their URLs for compliance with templates with UTM tags.
The results are written to the file specified in the configuration file.
CORRECT
- Correct urlsINVALID
- Contain NOT valid urlsLINKS_COUNT
- Incorrect number of urlsMISSING
- Urls NOT existsTIMEOUT
- Can't get public data from request, connection timeoutERROR
- NOT valid public url or parsing errors
The console displays information about processed links:
Clearing resources ...
Reading file ...
Prepare publics from links ...
Number of links found: 3319
Start processing:
Processing: 100%|████████████| 3319/3319 [00:37<00:00, 88.23url/s, CORRECT=963, INVALID=1968, MISSING=388, TIMEOUT=0, ERROR=0]
Processing complete! See results in './result.xlsx'
VALID
- Correct urlNOT_MATCH
- Invalid, url don't match patternUTM_INVALID
- Invalid UTM code valueSPACER
- Invalid, url contains spacesUNDEFINED
- Undefined POS url
Return a validation result True
or False
ID
: Only digits\d+
REG-CODE
: Only 2 digits or one of the values:111
,711
,7114
\d{2}|111|711|7114
MUN-CODE
: Only 8 digits\d{8}
OGRN
: Only 13 digits\d{13}
SOURCE
: Only one of the values:vk
,vk1
,vk2
vk|vk1|vk2
UNDEFINED
: Undefined UTM-code
-
Go to the project directory
cd find-pos-widgets
-
Create Python env
python -m venv venv
-
Run env
# for cmd.exe venv\Scripts\activate.bat
# for PowerShell venv\Scripts\Activate.ps1
-
Upgrade pip (this command may be skipped)
pip install --upgrade pip
-
Install requirements
pip install -r requirements.txt
-
Start script
python main.py
- Go to the project directory
cd find-pos-widgets
- Create Python env
python -m venv venv
- Run env
source venv\Scripts\activate
- Upgrade pip (this command may be skipped)
pip install --upgrade pip
- Install requirements
pip install -r requirements.txt
- Start script
python main.py
- For stopping script use keys:
ctrl
+c
- For close env use command:
deactivate
Provided in config.yaml file:
vk_api:
access_token: 'Put your token' # https://vkhost.github.io
parsing:
max_links_per_widget: 2
skip_correct: false
save_public_data: true
public_data_fields: [ menu, is_government_organization, activity, city, addresses, contacts, description, members_count, status ]
utm_codes_regex:
ID: '\d+'
REG-CODE: '\d{2}|111|711|7114'
MUN-CODE: '\d{8}'
OGRN: '\d{13}'
SOURCE: 'vk|vk1|vk2'
display:
csv_delimiter: ';'
public_display_fields: [ pos_result, url, is_government_organization, city.title, addresses.main_address.city.title, id, name, screen_name, pos_links ]
show_utm_status: true
codes_hints:
pattern: '{is_valid} {param}={value} ({hint}; pattern: {pattern})'
items:
ID: 'Only digits'
REG-CODE: 'Only 2 digits or one of the values: 111, 711, 7114'
MUN-CODE: 'Only 8 digits'
OGRN: 'Only 13 digits'
SOURCE: 'Only one of the values: vk, vk1, vk2'
UNDEFINED: 'Undefined UTM-code'
status_types:
pattern: '{name} {value}'
items:
VALID: { name: '✅', value: 'Correct urls' }
NOT_MATCH: { name: '❌', value: 'Invalid, url dont match pattern' }
UTM_INVALID: { name: '⚠️', value: 'Invalid UTM code value' }
SPACER: { name: '⚠️', value: 'Invalid, url contains spaces' }
UNDEFINED: { name: '🆘', value: 'Undefined POS url' }
result_types:
pattern: '{name} {value}'
items:
CORRECT: { name: '✅', value: 'Correct urls' }
INVALID: { name: '⚠️', value: 'Contain NOT valid urls' }
LINKS_COUNT: { name: '❗', value: 'Widgets links count not pass tests' }
MISSING: { name: '❌', value: 'Urls NOT exists' }
TIMEOUT: { name: '⌛️', value: 'Timeout when getting url page data' }
ERROR: { name: '🆘', value: 'NOT valid url or data parsing errors' }
paths:
log_file: 'runtime.log'
target_file: 'target.txt'
result_file: 'result.xlsx'
save_public_data_dir: 'publics_data'
Param | Type | Default | Description |
---|---|---|---|
version |
float |
5.221 |
VK API version |
access_token |
string |
- | Your VK API token. For provide access_token you can use official VK hosts. It is better not to get a token from a personal page, because there is a low probability of getting blocked, use a fake account. |
Param | Type | Default | Description |
---|---|---|---|
max_links_per_widget |
intager |
2 |
Checking for the number of POS widgets, if 0 - the check is skipped |
skip_correct |
boolean |
false |
Skip URLs with correct pos widgets |
save_public_data |
boolean |
true |
If we need to save datas of publics in folder |
public_data_fields |
list |
[menu , is_government_organization ] |
Fields for request from VK API. Variables:
|
utm_codes_regex |
dictionary |
ID: \d+ REG-CODE: \d{2}|111|711|7114 MUN-CODE: \d{8} OGRN: \d{13} SOURCE: vk|vk1|vk2 |
Fields for overriding regex checks of UTM tags. |
Param | Type | Default | Description |
---|---|---|---|
csv_delimiter |
string |
; |
Delimiter for result csv file |
public_display_fields |
list |
[pos_result , url , name , is_government_organization , pos_links , id , screen_name ] |
Select fields to display in result csv file (with the preservation of order) Variables:
You can access the nested data if the field returns the following, example for city.title :field city return data {"id": 123, "title": "cityname"} for getting cityname use city.title |
show_utm_status |
boolean |
true |
Whether to show detailed error information in UTM-tags |
codes_hints |
dictionary |
- | Here you can specify the values to display in the pattern results file Use variables and provide a pattern to determine how it will be providedVariables: code - (string) Code designationparam - (string) UTM-labelvalue - (string) UTM-code valuepattern - (string) Verification patternhint - (string) Hint of expected valueis_valid - (boolean) Validation resultExample: pattern = "[{is_valid}] {param}={value} ({hint}, pattern: {pattern})"display: True: utm_source='vk' ('Only one of the values: vk, vk1, vk2', pattern: 'vk1|vk2|vk3') |
result_types and status_types |
dictionary |
- | Here you can specify the values to display in the pattern results file Use any variables, such as name , value , or others. Then provide a pattern to determine how it will be providedExample for status_type :{"name": "✅", "value": "Correct urls"}display: ✅: Correct urls |
pos_result | url | id | name | is_government_organization | screen_name | pos_url-0 | pos_url_status-1 | url_utm_codes-1 | ... |
---|---|---|---|---|---|---|---|---|---|
✅ | https://vk.com/public12345678 | 12345678 | Name of the public | True | club12345678 | https://pos.gosuslugi.ru/form/?opaId=123456&utm_source=vk&utm_medium=11&utm_campaign=1234567890123 | ✅ Ок | True opaId='223186' (Only digits, pattern: '\d+') True utm_source='vk' (Only one of the values: vk, vk1, vk2, pattern: 'vk|vk1|vk2') True utm_medium='44' (Only 2 digits or one of the values: 111, 711, 7114, pattern: '\d{2}|111|711|7114') True utm_campaign='1024900965088' (Only 13 digits, pattern: '\d{13}') |
... |
❌ | https://vk.com/best_public | 87654321 | Best public ever | False | best_public | ... |
Param | Type | Default | Description |
---|---|---|---|
log_file |
string |
runtime.log |
Path to runtime log file |
target_file |
string |
target.txt |
Path to target file with urls |
result_file |
string |
result.xlsx |
Path to result file, default file format is xlsx .Available formats: csv , xlsx , json , html . |
save_public_data_dir |
string |
publics_data |
The path to the directory when saving the parsed data of the VK group to a JSON file If parsing.save_public_data is false - data don't been saved |
Param | Type | Default | Description |
---|---|---|---|
max_tries |
intager |
5 |
Number of attempts to get data |
timeout |
float |
5 |
Waiting between attempts (multiplied by the number of max_tries ) |
REG-CODE|OGRN|ID|MUN-CODE
\s|%20
https://pos\.gosuslugi\.ru/(?:form/\?(opaId=\d+)|og/org-activities\?(?:(reg_code=\d{2,8})|(mun_code=\d{8})))&(utm_source=vk|utm_source=vk[12])&(utm_medium=\d{2,4})&(utm_campaign=\d{13})
- Python 3.8+
- Installed python env requirements
omegaconf==2.3.0 tqdm==4.65.0 vk==3.0 openpyxl==3.1.2 pandas~=2.0.2 requests~=2.31.0
Оглавление
Находит установленные виджеты POS на общедоступной странице ВКонтакте и проверяет их URL-адреса на соответствие шаблонам
с метками UTM.
Результаты записываются в файл, указанный в файле конфигурации.
CORRECT
- Правильные URL-адресаINVALID
- Содержат неправильные URL-адресаLINKS_COUNT
- Неверное количество URL-адресовMISSING
- URL-адреса отсутствуютTIMEOUT
- Невозможно получить публичные данные из запроса, истекло время ожидания соединенияERROR
- Неправильный публичный URL или ошибка обработки полученных данных
В консоли отображается прогрессбар с информацией о ходе выполнения программы:
Clearing resources ...
Reading file ...
Prepare publics from links ...
Number of links found: 3319
Start processing:
Processing: 100%|████████████| 3319/3319 [00:37<00:00, 88.23url/s, CORRECT=963, INVALID=1968, MISSING=388, TIMEOUT=0, ERROR=0]
Processing complete! See results in './result.xlsx'
VALID
- Правильный URL-адресNOT_MATCH
- Неверный URL-адрес, не соответствует шаблонуUTM_INVALID
- Неверное значение кода UTMSPACER
- Неверный URL-адрес, содержит пробелы
Возвращает результат проверки True
(пройдена) или False
(НЕ пройдена)
ID
: Только цифры\d+
REG-CODE
: Только 2 цифры или одно из значений:111
,711
,7114
\d{2}|111|711|7114
MUN-CODE
: Только 8 цифр\d{8}
OGRN
: Только 13 цифр\d{13}
SOURCE
: Только одно из значений:vk
,vk1
,vk2
vk|vk1|vk2
UNDEFINED
: Неизвестный UTM-код
-
Перейдите в директорию проекта
cd find-pos-widgets
-
Создайте Python-окружение
python -m venv venv
-
Активируйте окружение
# для cmd.exe venv\Scripts\activate.bat
# для PowerShell venv\Scripts\Activate.ps1
-
Обновите pip (эту команду можно пропустить)
pip install --upgrade pip
-
Установите зависимости
pip install -r requirements.txt
-
Запустите скрипт
python main.py
- Перейдите в директорию проекта
cd find-pos-widgets
- Создайте Python-окружение
python -m venv venv
- Активируйте окружение
source venv\Scripts\activate
- Обновите pip (эту команду можно пропустить)
pip install --upgrade pip
- Установите зависимости
pip install -r requirements.txt
- Запустите скрипт
python main.py
- Для остановки скрипта используйте сочетание клавиш:
ctrl
+c
- Для закрытия окружения используйте команду:
deactivate
Определены в config.yaml файле:
vk_api:
access_token: 'Ваш токен здесь' # https://vkhost.github.io
parsing:
max_links_per_widget: 2
skip_correct: false
save_public_data: true
public_data_fields: [ menu, is_government_organization, activity, city, addresses, contacts, description, members_count, status ]
utm_codes_regex:
ID: '\d+'
REG-CODE: '\d{2}|111|711|7114'
MUN-CODE: '\d{8}'
OGRN: '\d{13}'
SOURCE: 'vk|vk1|vk2'
display:
csv_delimiter: ';'
public_display_fields: [ pos_result, url, is_government_organization, city.title, addresses.main_address.city.title, id, name, screen_name, pos_links ]
show_utm_status: true
codes_hints:
pattern: '{is_valid} {param}={value} ({hint}; шаблон: {pattern})'
items:
ID: 'Только цифры'
REG-CODE: 'Только 2 цифры или одно из значений: 111, 711, 7114'
MUN-CODE: 'Только 8 цифр'
OGRN: 'Только 13 цифр'
SOURCE: 'Только одно из значений: vk, vk1, vk2'
UNDEFINED: 'Неизвестный UTM-код'
status_types:
pattern: '{name}'
items:
VALID: { name: '✅', value: 'Правильный URL-адрес' }
NOT_MATCH: { name: '❌', value: 'Неверный URL-адрес, не соответствует шаблону' }
UTM_INVALID: { name: '⚠️', value: 'Неверное значение кода UTM' }
SPACER: { name: '⚠️', value: 'Неверный URL-адрес, содержит пробелы' }
UNDEFINED: { name: '❗', value: 'Ссылка не является POS' }
result_types:
pattern: '{name}: {value}'
items:
CORRECT: { name: '✅', value: 'Правильные URL-адреса' }
INVALID: { name: '⚠️', value: 'Содержат неправильные URL-адреса' }
LINKS_COUNT: { name: '❗', value: 'Неверное количество URL-адресов' }
MISSING: { name: '❌', value: 'URL-адреса отсутствуют' }
TIMEOUT: { name: '⌛️', value: 'Невозможно получить публичные данные из запроса, истекло время ожидания соединения' }
ERROR: { name: '🆘', value: 'Неправильный публичный URL или ошибка обработки полученных данных' }
paths:
log_file: 'runtime.log'
target_file: 'target.txt'
result_file: 'result.xlsx'
save_public_data_dir: 'publics_data'
Параметр | Тип | Значение по умолчанию | Описание |
---|---|---|---|
version |
float |
5.221 |
Версия VK API |
access_token |
string |
- | (Обязательный) Ваш токен VK API. For provide access_token you can use официальные VK hosts. Лучше не получать токен с личной страницы, т.к. есть низкая вероятность получить блокировку, используйте фейк аккаунт. |
Параметр | Тип | Значение по умолчанию | Описание |
---|---|---|---|
max_links_per_widget |
intager |
2 |
Проверка количества POS-виджетов, если 0 - проверка пропускается |
skip_correct |
boolean |
false |
Пропустить URL-адреса с правильными POS-виджетами |
save_public_data |
boolean |
true |
Если нам нужно сохранить данные об общественных страницах в папке |
public_data_fields |
list |
[menu , is_government_organization ] |
Поля для запроса из VK API. Переменные:
|
utm_codes_regex |
dictionary |
ID: \d+ REG-CODE: \d{2}|111|711|7114 MUN-CODE: \d{8} OGRN: \d{13} SOURCE: vk|vk1|vk2 |
Поля для перезаписи regex для проверок UTM-меток. |
Параметр | Тип | Значение по умолчанию | Описание |
---|---|---|---|
csv_delimiter |
string |
; |
Разделитель для файла результатов в формате CSV |
public_display_fields |
list |
[pos_result , url , name , pos_links , id , screen_name ] |
Выберите поля для отображения в файле результатов (они будут отображены в том же порядке) Переменные:
Вы можете получить доступ к вложенным данным, если поле возвращает набор данных, пример для city.title :поле city возвращает данные {"id": 123, "title": "cityname"} для получения cityname используй city.title |
show_utm_status |
boolean |
true |
Включает детальную информацию по UTM-кодах в POS ссылке |
codes_hints |
dictionary |
- | Здесь вы можете указать значения для отображения в файле результатов в формате шаблона Используйте переменные из списка и укажите шаблон pattern , чтобы определить, как они будут предоставленыПеременные: code - (string) Кодparam - (string) атрибут UTM-кодаvalue - (string) Значение UTM-кодаpattern - (string) регулярное выражение для проверкиhint - (string) Ожидаемое значениеis_valid - (boolean) Результат проверкиПример: pattern = "[{is_valid}] {param}={value} ({hint}, pattern: {pattern})"будет представлено как: True: utm_source='vk' ('Только одно из значений: vk, vk1, vk2', pattern: 'vk1|vk2|vk3') |
result_types and status_types |
dictionary |
- | Здесь вы можете указать значения для отображения в файле результатов в формате шаблона Используйте любые переменные, такие как name , value или другие. Затем укажите pattern , чтобы определить, как они будут предоставленыПример для status_type :{"name": "✅", "value": "Правильные URL-адреса"}будет представлено как: `✅: Правильные URL-адреса |
pos_result | url | id | name | is_government_organization | screen_name | pos_url-0 | pos_url_status-1 | url_utm_codes-1 | ... |
---|---|---|---|---|---|---|---|---|---|
✅ | https://vk.com/public12345678 | 12345678 | Имя паблика | True | club12345678 | https://pos.gosuslugi.ru/form/?opaId=123456&utm_source=vk&utm_medium=11&utm_campaign=1234567890123 | ✅ Ок | True opaId='223186' (Только цифры, шаблон: '\d+') True utm_source='vk' (Только одно из значений: vk, vk1, vk2, шаблон: 'vk|vk1|vk2') True utm_medium='44' (Только 2 цифры или одно из значений: 111, 711, 7114, шаблон: '\d{2}|111|711|7114') True utm_campaign='1024900965088' (Только 13 цифр, шаблон: '\d{13}') |
... |
❌ | https://vk.com/best_public | 87654321 | Самый лучший паблик | False | best_public | ... |
Параметр | Тип | Значение по умолчанию | Описание |
---|---|---|---|
log_file |
string |
runtime.log |
Путь к файлу журнала выполнения |
target_file |
string |
target.txt |
Путь к файлу с целевыми URL-адресами |
result_file |
string |
result.xlsx |
Путь к файлу с результатами, формат по-умолчанию xlsx .Доступные форматы: csv , xlsx , json , html . |
save_public_data_dir |
string |
publics_data |
Путь к каталогу, в котором сохраняются разобранные данные группы VK в формате JSON Если parsing.save_public_data равно false , данные не сохраняются |
Параметр | Тип | Значение по умолчанию | Описание |
---|---|---|---|
max_tries |
intager |
5 |
Количество попыток получения данных |
timeout |
float |
5. |
Ожидание между попытками (умножается на количество max_tries ) |
REG-CODE|OGRN|ID|MUN-CODE
\s|%20
https://pos\.gosuslugi\.ru/(?:form/\?(opaId=\d+)|og/org-activities\?(?:(reg_code=\d{2,8})|(mun_code=\d{8})))&(utm_source=vk|utm_source=vk[12])&(utm_medium=\d{2,4})&(utm_campaign=\d{13})
- Python 3.8+
- Установлены зависимости python requirements
omegaconf==2.3.0 tqdm==4.65.0 vk==3.0 openpyxl==3.1.2 pandas~=2.0.2 requests~=2.31.0