Данная система позволяет получить список друзей ВКонтакте и состоит из двух файлов:
- main.py;
- vk_task.py;
Для того чтобы запустить данную программу, необходимо выполнить в командной строке (терминале) следующую команду:
python main.py <user_id> <access_token> [--output_format <format>] [--output_name <name>]
Где:
user_id
— ID пользователя ВКонтакте, список друзей которого вы хотите извлечь (обязательно);access_token
— токен доступа к VK API, который вы должны получить на сайте VK API (обязательно);--output_format
— формат выходного файла. Может быть CSV, JSON, TSV или YAML. Значение по умолчанию — CSV (необязательно);--output_name
— имя выходного файла (путь выходного файла). Значение по умолчаниюreport
(необязательно);
python main.py 123456789 token123 --output_format json --output_name my_friends
Данная команда выполнит извлечение списка друзей пользователя ВКонтакте с ID 123456789, используя токен доступа к VK API token123
, и сохранит его в JSON-файл с именем my_friends.json
в текущей директории.
Данный файл состоит из трех классов:
HttpClient
;Paginator
;FriendsParser
;
Этот класс содержит один метод request
, который выполняет HTTP-запрос к API-серверу ВКонтакте и возвращает информацию о друзьях в виде списка при условии, что код состояния ответа равен 200. В противном случае он вызывает исключение с соответствующем сообщением об ошибке.
Данный класс позволяет нам получать список друзей пользователя, у которого количество друзей превышает 5000 человек.
Этот класс содержит два метода: get_friends
и get_all_friends
.
Метод get_friends
получает в качестве входных данных смещение (offset) и возвращает список друзей для заданного ID пользователя, ограниченный параметром count.
Метод get_all_friends
возращает список всех друзей пользователя (учет большого количества друзей).
Оба метода используют класс HttpClient
для выполнения HTTP-запроса к API-серверу ВКонтакте.
Максимальное количество друзей ВКонтакте — 10000 человек. Данная система справляется с ограничением по оперативной памяти.
Этот класс содержит пять методов: parse
, extract_data
, get_value_from_data
, get_date_value
и create_report
.
Метод parse
отвечает за вызов метода get_all_friends
класса Paginator
и получение списка друзей пользователя.
Метод extract_data
извлекает следующую информацию о каждом друге из списка друзей, возращаемую классом Paginator
:
- Имя;
- Фамилия;
- Страна;
- Город;
- Дата рождения в ISO формате;
- Пол;
Метод get_value_from_data
используется для получения страны и города. Возвращает 'title' для страны и города соответственно.
Метод get_date_value
принимает дату в формате DD.MM.YYYY
и возращает ее в ISO формате, т.е. YYYY-MM-DD
. Если у пользователя отсутствует дата рождения или в ней отсутствует год рождения, то возвращается значение None. Вызывается методом create_report
.
Метод create_report
создает отчет в одном из трех форматов: CSV, JSON, TSV или YAML в соответствии со значением входного параметра output_format
.
Метод csv_tsv_file_write
используется для сохранения отчета либо в формат CSV, либо в TSV. Вызывается методом create_report
.
В этой системе используется модуль argspace
для определения и обработки аргументов командной строки (терминала). Класс argspace.ArgumentParser
позволяет нам определять ожидаемые аргументы и их типы, а также любых необязательные (опциональные) аргументы и их значения по умолчанию:
parser = argparse.ArgumentParser(description="VK friends parser")
parser.add_argument("user_id", type=int, help="VK user ID")
parser.add_argument("access_token", type=str, help="VK API access token")
parser.add_argument(
"--output_format",
type=str,
choices=["csv", "json", "tsv", "yaml"],
default="csv",
help="Output file format"
)
parser.add_argument(
"--output_name",
type=str,
default="report",
help="Output file name"
)
После запуска программы в командной строке (терминале) происходит следующее:
- Получаем доступ к аргументам, указанным в командной строке (терминале). Создается экземпляр класса FriendsParser, которому передаются эти аргументы:
if __name__ == '__main__':
args = parser.parse_args()
vk_parser = FriendsParser(args.user_id, args.access_token, args.output_format, args.output_name)
- Выполняется вызов метода
parse
, чтобы получить всех друзей пользователя:
friends = vk_parser.parse()
- Вызывается метод
create_report
, позволяющий создать отчет из списка друзей в одном из требуемых форматов:
vk_parser.create_report(friends)