Клиент для SOAP API Почты России на Python

в 7:57, , рубрики: api, python, russianpost, soap, метки: , ,

В процессе работы над текущими проектами возникла ситуация когда «вдруг» перестал парситься сайт трекингов Почты России. В интернетах даже немного побурлили по поводу «ужасной» новой защиты и т.п. В тех же интернетах всплыла тогда информация, что у Почты России имеется-таки API. Не совсем человеческий (т.е. по протоколу SOAP) но какой-никакой существует и кто-то им даже, якобы, пользуется. Я сообщил шефу, шеф написал письмо на Почту России (электронное, на удивление) и оказалось — да. Всё это действительно есть и вроде бы даже работает. Видимо создали сервис ещё тогда.

Под катом будет линк на рабочий класс клиента (на python) к API Почты России и немного подробностей работы с ним.

Для кого

Итак, вы отслеживаете множество отправлений и конечно справились с текущей проблемой парсинга страницы выдачи трекинга сайта Почты России (далее «почты») но логично предполагаете, что поползновение это было не последнее и в следующий раз может быть хуже. Что же делать? Как обезопасить будущее своего сервиса/компании?

Вы уже догадались, но я скажу вслух — Нужно подключиться к API!

Тут начинается самое интересное. Сервис этот доступен далеко не всем, но если у Вас (компании) есть договор с почтой, то шансы получить заветный доступ очень большие. В регламенте сервиса, который высылают счастливым подключенцам, эти самые подключенцы именуются «федеральным клиентом». Тут не знаю — то ли это особенный статус, то ли так обзывают всех у кого есть договор с почтой…

Как получить доступ

В общем берите мыло (желательно поэлектроннее) и в свободной форме пишите на fc@russianpost.ru, кто Вы, что Вам нужен «доступ к отслеживанию статусов РПО по SOAP протоколу» и для чего это Вам надо. За это Вам пришлют регламент, в котором будет анкета, которую нужно заполнить, в доме который построил Джек подписать руководителем и проштамповать печатью вашей конторы и заслать, в виде скана, взад.

После этого Вам дадут… логин и пароль (которые не активируют пока Вы не пожалуетесь, что ничего не пашет, ну или это нам только так не повезло…).

Как работать

Вот и пришло время перейти в атаку. Форкаете/клонируете:
git://github.com/qnub/ru-post-soap-client.git

Настраиваете (или не настраиваете см. readme). И понеслась

from time import sleep

from client import RuPostClient

client = RuPostClient()

tickets = client.make_ticket(all_my_track_numbers)
sleep(900)
track_statuses = client.get_tracks(tickets.keys())

Ну или типа того — дальше по тому же readme.

Нюансы

Согласно регламенту запросы данных по одному и тому же тикету можно делать не чаще одного раза в 15 минут и не ранее чем через 15 минут после его создания.

В тикете нельзя запрашивать данные более чем на 3000 (три тысячи) треков за раз (в одном тикете). Тут смотрите сами. Нам, к примеру, хватает по 100 треков, т.к. по каждому треку приходит не мало данных в итоге в зависимости от условий это может кому-то нагрузить систему…

Если Вы ввели авторизационные данные правильно, а вам приходит ошибка 16 «Внутренняя ошибка работы сервиса обмена данными» — проверьте нет правильно ли введены трекинг-номера (почистите от спецсимволов и т.п.). Если не помогло — пишите письмо всё по тому же адресу и требуйте проверить чего у них не так. Нам в итоге просто сказали, что ошибка исправлена и всё. Что было — мне не известно, но помогло…

Спасибы

Спасибо шефу, что разрешил поделиться с вами этим кодом. Сама технология отработана за его счёт, ну а выделил её в класс я уже за свой.

Приятного использования (судя по всему ещё паре человек это интересно). Форки, пулл реквесты, багрепорты — всё по классической программе гитхаба (ссылка ещё раз, чтоб не искать).

Автор: qnub


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js