
rewerse-engineering v1.4.0
Обратная разработка API Rewe на Go
rewerse engineering
Неофициальный клиент REWE API на Go и Python. Он реализует общедоступные (не требующие аутентификации) эндпоинты, которые приложение REWE использует для запроса текущих скидок (Angebote), товаров, магазинов и отзывов продукции.
Текущая поддерживаемая версия APK: 5.18.1 (по состоянию на 29.09.26)
[!CAUTION] Сертификаты, необходимые для взаимодействия с rewe api, не включены в этот репозиторий. Вам нужно извлечь их из APK. Документация и скрипт извлечения для Windows находятся в каталоге docs.
См. также rewerse-ui.
quick start
Извлеките сертификаты из rewe apk; инструкции см. в docs
Используйте библиотеку:
Или установите CLI:
- Скачайте релиз
- Или установите через Go:
go install github.com/ByteSizedMarius/rewerse-engineering/cmd@latest - Или клонируйте и соберите:
go build -o rewerse ./cmd
Проверка: rewerse --help
Пример: Получение текущих скидок для магазина:
$ rewerse discounts -market 840174
Top-Angebote in deinem Markt
Haribo Goldbären oder Color-Rado, 0.77€
Coca-Cola, Fanta oder Sprite, 0.99€
Obst & Gemüse
Heidelbeeren, 1.49€
Rispentomaten, 0.99€
...
intro
В марте 2024 года Rewe начал
использовать Cloudflare MTLS для защиты своих api-эндпоинтов, что
сломало существующие решения, которые позволяли, например, получать скидки для конкретного магазина Rewe.
Пользователь GitHub @torbenpfohl был одержим достаточно настойчив, чтобы разобраться в этом, найти сертификат и его пароль. Этот репозиторий основан на
его работе и нацелен на документирование необходимых процедур и реализацию некоторых эндпоинтов.
disclaimer
Этот проект не связан с REWE-ZENTRALFINANZ eG, не одобрен и не спонсируется ею. «REWE» является зарегистрированным товарным знаком соответствующего владельца.
Это неофициальный клиент, основанный на публично наблюдаемом сетевом трафике мобильного приложения REWE. Он предоставляется в образовательных и исследовательских целях. Лежащий в основе API недокументирован и может измениться или перестать работать в любое время без предупреждения.
Использование этого программного обеспечения осуществляется на ваш собственный риск. Пользователи несут ответственность за соблюдение применимых условий обслуживания.
contents
- Базовая реализация rewe api на Go доступна в каталоге pkg; см. pkg/readme для документации api go-библиотеки, включая примеры использования.
- FFI-обёртка для Python доступна как
rewerseна PyPI – см. python/readme для подробностей и исходного кода. - Исходный код cli для go-библиотеки находится в cmd.
- Релизы находятся в releases.
[!NOTE] Обратите внимание, что поскольку это неподписанный go-бинарник, который выполняет шифрование/дешифрование сертификатов и отправляет веб-запросы к rewe api, он, вероятно, будет помечен вашим антивирусом. Зависимостей нет, поэтому вы можете легко скомпилировать его самостоятельно – что всегда рекомендуется с точки зрения безопасности.
removed endpoints
В приложении больше нет эндпоинта автодополнения, и оно просто использует обычный поиск товаров, поэтому подсказки товаров исчезли.
cli
Usage: ./rewerse.exe [flags] <command> [subcommand] [flags]
Flags:
-cert <path> Certificate file (default: certificate.pem)
-key <path> Key file (default: private.key)
-json Output as JSON
Commands:
markets Search and get market details
products Search, browse, and get product info
discounts Get market discounts
categories Get product categories
recipes Search recipes, get details and popular terms
recalls Get product recalls
services Get service portfolio by zip
Examples:
./rewerse.exe markets search -query Köln
./rewerse.exe products search -market 831002 -query Milch
./rewerse.exe products category -market 831002 -slug obst-gemuese
./rewerse.exe discounts -market 840174
./rewerse.exe categories -market 831002
./rewerse.exe services -zip 50667
./rewerse.exe recipes search -term Lachs -difficulties 1
./rewerse.exe recipes details -id blt4aaa7361ba69f8c8
Run './rewerse.exe <command>' for subcommand help.
tests
Тесты находятся в pkg/*_test.go. Есть два вида:
- Модульные тесты выполняют демаршалинг JSON-полезных нагрузок в наши структуры. Полезные нагрузки получены из реальных ответов API. Они выполняются без сертификатов и выявляют несоответствия типов между нашими структурами и фактическими формами API.
go test ./pkg/ -run Unmarshal - Интеграционные тесты обращаются к живому API и требуют сертификатов. Они автоматически пропускаются, если сертификаты не найдены.
go test ./pkg/
Если вы вносите изменения в структуру, пожалуйста, рассмотрите возможность добавления или обновления теста демаршалинга. Используйте реальный ответ API, если можете его получить, в противном случае подойдёт синтетическая JSON-полезная нагрузка, отражающая фактическое поведение API.
contributing
Не стесняйтесь открывать github issues для предложений, вопросов, багов. PR приветствуются. Email: rewe at byte dot rest.