Обёртка для instagrapi, сделана для расширения функционала, например, отслеживания того, кто подписался и отписался за какой-то период.
- ✔ снимать дамп подписчиков или подписок по введённому имени пользователя и сохранять локально в БД или txt (в тхт только подписчиков)
- ✔ показ разницы между двумя дампами: кто подписался, кто отписался, на кого подписался, от кого отписался (или был отписан)
- ✔ хранение данных в sqLite/MySQL/PostgreSQL (но тестировал только sqLite и в конфиги пока не вынес настройки БД)
- ✔ работа с БД через ORM (Pony ORM)
- ✔ отдельный файл с моделями
- ✔ обновление пользователя в БД (инфой из инсты)
- ✔ Решена проблема скорости получения подписчиков пользователя. Теперь это делается быстро и за один запрос (в instagrapi уже был этот метод, лол)
- ✔ костыль для добавления колонок в БД (т.к. Pony ORM не умеет в миграции). Условно работает, но требует доработки. Пока может только добавлять колонку и только в sqLite.
- ~ [в процессе] экспорт снапа из тхт в БД
- ~ кеширование в файл (формально оно уже есть, т.к. есть в instagrapi)
- ~ работа с прокси (формально есть в самом instagrapi, но у меня так и не завелось)
- ✘ возможность скачать файл из бота
- ✘ периодические задачи через Celery для автоматизации отслеживания изменений в профиле
- ✘ возможно всё это в связке Flask+Celery+Redis+sqLite (или любая другая база)+PonyORM
- ✘ докер
- ✘ логи в файлах
Кратенько
пока всё заточено под локальную работу, но уже умеет сохранять в БД (пока тестил только sqLite)
Базируется на instagrapi, поэтому доступны все те же методы + методы расширения https://github.com/adw0rd/instagrapi
Для начала работы необходимо залогиниться (также в instagrapi есть возможность работы через прокси и с двухфакторной авторизацией, но здесь простой пример):
inst = InstaClient()
inst.login(login, password)
Для ленивых (если в конфиге прописаны INST_LOGIN
и INST_PASS
):
inst = InstaClient.create_and_login()
файлы дампа txt сохраняет в папку ./inst
(если её нет, то создаёт)
конфиги ищет в config.py
, описание его чуть ниже
Снять снап подписчиков пользователя user и сохранить в БД:
inst.save_followers(user)
Снять снап подписок пользователя user и сохранить в БД:
inst.save_followings(user)
Снять снап подписчиков пользователя user и сохранить в txt:
inst.save_followers(user=user, mode='txt')
Сравнить два последних снапа подписчиков пользователя user из БД:
inst.followers_changes_db(user)
Сравнить два последних снапа подписок пользователя user из БД:
inst.followings_changes_db(user)
Сравнить два последних снапа подписчиков пользователя user из txt:
inst.followers_changes_txt(user)
# Логин и пароль на вход INST_LOGIN = '' INST_PASS = '' # двухфакторная авторизация # DATABASE SETTINGS: DB_SETTINGS = { 'provider': 'sqlite', 'filename': 'db.sqlite', 'create_db': True, } # TIME_ZONE = # Support socks and http/https proxy “scheme://username:password@host:port”. PROXY = ''
ЗЫ: маниакально старался не использовать re, но возможно, что зря
название ещё не придумал:
- InstaClient - рабочее
- InstaGrappa ?
- InstaGrappi -
- InstagrYappi -
- Instalker -
- InstSpector
- InstMon
- Instrack -
- InStat
Ветка instabot-engine, где я попробовал реализовать тот же функционал, но на устаревшем instabot, главный плюс которого в том, что он очень быстро получает список подписчиков - продолжена не будет и скорее всего её удалю за ненадобностью