Files
site/content/blog/social-mapper-contribution/index.md
T
2026-10-10 20:20:21 +04:00

50 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: "Как я контрибьютил в Social Mapper"
date: 2026-10-10T20:03:56+04:00
draft: false
tags:
- open-source
- python
- osint
- selenium
summary: "Два пулл-реквеста в OSINT-инструмент на 4000 звезд: починил Douban и перевел весь проект на пробелы"
---
Разбирал старые аккаунты и наткнулся на свой след в [Social Mapper](https://github.com/Greenwolf/social_mapper). Это OSINT-инструмент Джейкоба Уилкина (Greenwolf): он ищет людей по соцсетям и через распознавание лиц склеивает профили одного человека с разных сайтов в один отчет. Его используют пентестеры и red team, чтобы собрать список сотрудников компании и их страниц. У репозитория больше 4000 звезд и 800 форков.
В сентябре 2020 года я прислал туда 20 коммитов в двух пулл-реквестах и до сих пор числюсь третьим по количеству коммитов, после двух аккаунтов самого автора. Расскажу, что там было.
## Douban
Все началось с [issue #166](https://github.com/Greenwolf/social_mapper/issues/166). Китайская соцсеть Douban перестала работать: модуль падал с HTTP 418 и было непонятно, залогинился он или нет. Issue висел с апреля, автор ответил, что сайт, похоже, поменялся, но проверить не может, потому что не нашел, где там регистрироваться.
Social Mapper работает через Selenium и Firefox, так что для меня это была знакомая территория. Douban поменял заголовок страницы и форму входа, а модуль искал старые. В [PR #193](https://github.com/Greenwolf/social_mapper/pull/193) я:
- поправил вход под новую форму и проверку заголовка
- добавил понятное сообщение, если страница входа загрузилась не так, как ожидается, вместо молчаливого падения
- вынес пути к Firefox и geckodriver в переменные окружения `FIREFOX_BINARY` и `GECKODRIVER`, чтобы не держать их строго в `PATH`
- починил несколько ошибок Python 3 с `bytes` и `str` при чтении и записи файлов, которые остались после перехода с Python 2
Самое забавное, что у меня тоже не было аккаунта на Douban, поэтому проверить вход до конца я не мог. Попросил автора issue склонировать мой форк и переключиться на ветку с фиксом.
Пока PR ждал ревью, автор запушил пачку своих исправлений и пропустил мой. Извинился и попросил перевыложить. Я разрешил конфликты, через день напомнил о себе, и 9 сентября PR влили.
## Табы и пробелы
Пока разбирался в коде, заметил, что `social_mapper.py` написан с отступом в 4 пробела, а остальные модули табами. В Python это не косметика: смешанные отступы ломают код или, что хуже, делают его обманчивым. Завел [issue #195](https://github.com/Greenwolf/social_mapper/issues/195) и сразу прислал [PR #196](https://github.com/Greenwolf/social_mapper/pull/196):
- весь проект переведен на 4 пробела, как рекомендует PEP 8
- строковые литералы, которые использовались вместо комментариев, заменены на нормальные комментарии
- код отформатирован по PEP 8, лишние импорты удалены
- добавлены `.gitignore` и `.editorconfig`
Итого 11 файлов, +1657 и −1430 строк. Автор влил его в тот же день, написал, что я, похоже, вошел в раж, и спросил, нет ли у меня идей, как обойти новый rate limit Facebook. А еще добавил меня в список благодарностей в README, где я и вишу до сих пор.
## Что я из этого вынес
Чужой открытый проект оказался отличным местом, чтобы потренироваться читать незнакомый код и общаться с мейнтейнером. Маленький точечный фикс, который решает чью-то проблему, принимают охотно. А после него можно предлагать и что-то крупнее, вроде рефакторинга всего проекта.
И да, сейчас в моих [Стандартах разработки](/code-style.md) записаны табы вместо пробелов. Спустя 6 лет я поменял мнение, но главное правило осталось прежним: в одном проекте один стиль отступов, и следит за ним инструмент, а не человек.
Сейчас проект не поддерживается активно, но автор принимает пулл-реквесты. Если пользуетесь им, используйте только в рамках легальных пентестов и с согласия заказчика.