Коммит.
This commit is contained in:
parent
9fc382ae28
commit
67272dc504
220
README.md
220
README.md
@ -1,138 +1,41 @@
|
|||||||
# Sber History To Excel
|
# Sber History To Excel
|
||||||
|
|
||||||
Скрипт выгружает историю операций СберБанк Онлайн за выбранный месяц и сохраняет ее в один Excel-файл `.xlsx`.
|
Проект уже развернут на сервере:
|
||||||
|
|
||||||
## Что делает
|
|
||||||
|
|
||||||
- Получает операции через API истории операций Сбера.
|
|
||||||
- Забирает данные постранично.
|
|
||||||
- Оставляет только операции за указанный месяц.
|
|
||||||
- Убирает дубли по идентификатору операции.
|
|
||||||
- Сохраняет результат в один `.xlsx` файл.
|
|
||||||
|
|
||||||
## Требования
|
|
||||||
|
|
||||||
- Python 3.10+
|
|
||||||
- Библиотека `requests`
|
|
||||||
- Актуальный Cookie авторизованной сессии СберБанк Онлайн
|
|
||||||
|
|
||||||
Установка зависимости:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
python3 -m pip install requests
|
|
||||||
```
|
|
||||||
|
|
||||||
## Настройка Cookie
|
|
||||||
|
|
||||||
Скрипт берет Cookie из переменной окружения `Cookie`.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
export Cookie='твой-cookie-из-браузера'
|
|
||||||
```
|
|
||||||
|
|
||||||
Не сохраняй Cookie в коде или в репозитории: это чувствительные данные доступа к аккаунту.
|
|
||||||
|
|
||||||
## Запуск
|
|
||||||
|
|
||||||
Пример выгрузки операций за май 2026 года:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
python3 load_data.py --year 2026 --month 5 --output sber_may_2026.xlsx
|
|
||||||
```
|
|
||||||
|
|
||||||
Если `--output` не указать, файл будет создан с именем:
|
|
||||||
|
|
||||||
```text
|
|
||||||
sber_operations_2026_05.xlsx
|
|
||||||
```
|
|
||||||
|
|
||||||
## Использование из кода
|
|
||||||
|
|
||||||
```python
|
|
||||||
from load_data import SberMonthHistoryExporter
|
|
||||||
|
|
||||||
exporter = SberMonthHistoryExporter()
|
|
||||||
output_path = exporter.save_month(2026, 5, "sber_may_2026.xlsx")
|
|
||||||
|
|
||||||
print(output_path)
|
|
||||||
```
|
|
||||||
|
|
||||||
## Веб-интерфейс
|
|
||||||
|
|
||||||
Запустить локальную форму:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
.venv/bin/python web_app.py
|
|
||||||
```
|
|
||||||
|
|
||||||
После запуска откройте:
|
|
||||||
|
|
||||||
```text
|
|
||||||
http://127.0.0.1:8000
|
|
||||||
```
|
|
||||||
|
|
||||||
Публичный адрес через Traefik:
|
|
||||||
|
|
||||||
```text
|
```text
|
||||||
https://sber.gb.7af.ru/
|
https://sber.gb.7af.ru/
|
||||||
```
|
```
|
||||||
|
|
||||||
В форме можно вставить cookies в одном из поддержанных форматов, формат определяется автоматически:
|
Веб-интерфейс выгружает историю операций СберБанк Онлайн за выбранный месяц и скачивает ZIP-архив. Внутри архива лежат:
|
||||||
|
|
||||||
|
- `.xlsx` с основными полями операций
|
||||||
|
- `.json` со списком всех операций в том виде, в котором они пришли из API
|
||||||
|
|
||||||
|
## Как пользоваться
|
||||||
|
|
||||||
|
1. Установите расширение Chrome [Get cookies.txt LOCALLY](https://chromewebstore.google.com/detail/get-cookiestxt-locally/cclelndahbckbenkjhflpdbgdldlbecc?pli=1).
|
||||||
|
2. Откройте [СберБанк Онлайн](https://online.sberbank.ru/CSAFront/index.do) и авторизуйтесь.
|
||||||
|
3. Скопируйте cookies через расширение.
|
||||||
|
4. Откройте [https://sber.gb.7af.ru/](https://sber.gb.7af.ru/).
|
||||||
|
5. Вставьте cookies в поле формы.
|
||||||
|
6. Выберите месяц и скачайте ZIP-архив.
|
||||||
|
|
||||||
|
Формат cookies определяется автоматически. Поддерживаются:
|
||||||
|
|
||||||
- Netscape `cookies.txt`
|
- Netscape `cookies.txt`
|
||||||
- JSON-массив cookies
|
- JSON-массив cookies
|
||||||
- обычный HTTP-заголовок `Cookie`
|
- обычный HTTP-заголовок `Cookie`
|
||||||
|
|
||||||
Для получения `cookies.txt` можно использовать расширение Chrome:
|
|
||||||
[Get cookies.txt LOCALLY](https://chromewebstore.google.com/detail/get-cookiestxt-locally/cclelndahbckbenkjhflpdbgdldlbecc?pli=1).
|
|
||||||
|
|
||||||
Порядок действий:
|
|
||||||
|
|
||||||
1. Установить расширение [Get cookies.txt LOCALLY](https://chromewebstore.google.com/detail/get-cookiestxt-locally/cclelndahbckbenkjhflpdbgdldlbecc?pli=1).
|
|
||||||
2. Открыть [СберБанк Онлайн](https://online.sberbank.ru/CSAFront/index.do) и авторизоваться.
|
|
||||||
3. Скопировать cookies через расширение и вставить их в поле формы.
|
|
||||||
|
|
||||||
После вставки cookies форма сразу проверяет, сможет ли сервер распарсить введенный формат.
|
После вставки cookies форма сразу проверяет, сможет ли сервер распарсить введенный формат.
|
||||||
|
|
||||||
После выбора месяца экспорт скачивается ZIP-архивом. Внутри архива:
|
## Что делает экспорт
|
||||||
|
|
||||||
- `.xlsx` с основными полями операций
|
- Получает операции через API истории операций Сбера.
|
||||||
- `.json` со списком всех операций в том виде, в котором они пришли из API
|
- Забирает данные постранично.
|
||||||
|
- Оставляет только операции за выбранный месяц.
|
||||||
Каждый экспорт сохраняется в `data/exports` с уникальным именем ZIP-архива. После скачивания архив не удаляется; отдельные временные `.xlsx` и `.json` остаются только внутри архива.
|
- Убирает дубли по идентификатору операции.
|
||||||
|
- Формирует Excel-файл и JSON со всеми исходными данными операций.
|
||||||
### Запуск через Docker Compose
|
- Отдает результат ZIP-архивом.
|
||||||
|
|
||||||
```bash
|
|
||||||
docker compose up --build
|
|
||||||
```
|
|
||||||
|
|
||||||
После запуска интерфейс будет доступен здесь:
|
|
||||||
|
|
||||||
```text
|
|
||||||
http://127.0.0.1:8000
|
|
||||||
```
|
|
||||||
|
|
||||||
В Docker файлы экспорта сохраняются в named volume `sberhistorytoexcel_sber-history-data`.
|
|
||||||
|
|
||||||
Остановить контейнер:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
docker compose down
|
|
||||||
```
|
|
||||||
|
|
||||||
Можно отдельно получить операции без сохранения:
|
|
||||||
|
|
||||||
```python
|
|
||||||
from load_data import SberMonthHistoryExporter
|
|
||||||
|
|
||||||
exporter = SberMonthHistoryExporter()
|
|
||||||
operations = exporter.fetch_month(2026, 5)
|
|
||||||
|
|
||||||
print(len(operations))
|
|
||||||
```
|
|
||||||
|
|
||||||
## Формат результата
|
|
||||||
|
|
||||||
В Excel попадают основные поля операции:
|
В Excel попадают основные поля операции:
|
||||||
|
|
||||||
@ -150,12 +53,81 @@ print(len(operations))
|
|||||||
- код категории
|
- код категории
|
||||||
- ID операции
|
- ID операции
|
||||||
|
|
||||||
|
## Безопасность cookies
|
||||||
|
|
||||||
|
Cookies дают доступ к аккаунту СберБанк Онлайн в рамках активной сессии. Не сохраняйте их в коде, репозитории или публичных чатах.
|
||||||
|
|
||||||
|
В веб-интерфейсе cookies используются для запроса к Сберу и не сохраняются в файлы экспорта.
|
||||||
|
|
||||||
## Возможные ошибки
|
## Возможные ошибки
|
||||||
|
|
||||||
Если Cookie не задан:
|
Если cookies устарели, Сбер может вернуть ошибку авторизации. В этом случае нужно снова войти в СберБанк Онлайн в браузере, скопировать свежие cookies и повторить экспорт.
|
||||||
|
|
||||||
```text
|
Если форма пишет, что cookies не удалось распарсить, проверьте, что вы вставили полный текст cookies из расширения.
|
||||||
ValueError: Set Sber auth cookie in the Cookie environment variable.
|
|
||||||
|
## Технические подробности
|
||||||
|
|
||||||
|
### Локальный запуск веб-интерфейса
|
||||||
|
|
||||||
|
```bash
|
||||||
|
.venv/bin/python web_app.py
|
||||||
```
|
```
|
||||||
|
|
||||||
Если Cookie устарел, Сбер может вернуть ошибку авторизации. В этом случае нужно снова войти в СберБанк Онлайн в браузере и обновить значение переменной `Cookie`.
|
После запуска откройте:
|
||||||
|
|
||||||
|
```text
|
||||||
|
http://127.0.0.1:8000
|
||||||
|
```
|
||||||
|
|
||||||
|
### Запуск через Docker Compose
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose up --build
|
||||||
|
```
|
||||||
|
|
||||||
|
После запуска интерфейс будет доступен здесь:
|
||||||
|
|
||||||
|
```text
|
||||||
|
http://127.0.0.1:8000
|
||||||
|
```
|
||||||
|
|
||||||
|
В Docker файлы экспорта сохраняются в named volume `sberhistorytoexcel_sber-history-data`. В volume остается только ZIP-архив; временные `.xlsx` и `.json` сохраняются только внутри архива.
|
||||||
|
|
||||||
|
Остановить контейнер:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose down
|
||||||
|
```
|
||||||
|
|
||||||
|
### Использование из кода
|
||||||
|
|
||||||
|
```python
|
||||||
|
from load_data import SberMonthHistoryExporter
|
||||||
|
|
||||||
|
exporter = SberMonthHistoryExporter()
|
||||||
|
output_path = exporter.save_month(2026, 5, "sber_may_2026.xlsx")
|
||||||
|
|
||||||
|
print(output_path)
|
||||||
|
```
|
||||||
|
|
||||||
|
Можно отдельно получить операции без сохранения:
|
||||||
|
|
||||||
|
```python
|
||||||
|
from load_data import SberMonthHistoryExporter
|
||||||
|
|
||||||
|
exporter = SberMonthHistoryExporter()
|
||||||
|
operations = exporter.fetch_month(2026, 5)
|
||||||
|
|
||||||
|
print(len(operations))
|
||||||
|
```
|
||||||
|
|
||||||
|
### Требования для локального запуска
|
||||||
|
|
||||||
|
- Python 3.10+
|
||||||
|
- `requests`
|
||||||
|
|
||||||
|
Установка зависимости:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python3 -m pip install requests
|
||||||
|
```
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user