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

    В процессе работы над текущими проектами возникла ситуация когда «вдруг» перестал парситься сайт трекингов Почты России. В интернетах даже немного побурлили по поводу «ужасной» новой защиты и т.п. В тех же интернетах всплыла тогда информация, что у Почты России имеется-таки 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 «Внутренняя ошибка работы сервиса обмена данными» — проверьте нет правильно ли введены трекинг-номера (почистите от спецсимволов и т.п.). Если не помогло — пишите письмо всё по тому же адресу и требуйте проверить чего у них не так. Нам в итоге просто сказали, что ошибка исправлена и всё. Что было — мне не известно, но помогло…

    Спасибы

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

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

    Подробнее
    Реклама
    Комментарии 29
    • 0
      Есть такая штука, но лежит параллельно с сайтом ПР, то есть практически ежедневно.
      • +9
        >ping russianpost.ru
        
        Обмен пакетами с russianpost.ru [91.215.36.43] с 32 байтами данных:
        Мужчина, вы что не видите, что у нас обед.
        Мужчина, вы что не видите, что у нас обед.
        Мужчина, вы что не видите, что у нас обед.
        Мужчина, вы что не видите, что у нас обед.
        
        Статистика Ping для 91.215.36.43:
            Пакетов: отправлено = 4, получено = 0, потеряно = 4
            (100% Обед)
        
        • 0
          и ведь правда не пингуется!
      • +3
        Чем SOAP то не угодил? Для интеграции со сторонними бизнес системами лучше ничего не придумали. Они же не список твитов отдают=) А качество их реализации — уже другой вопрос.
        • 0
          Ну это было в порядке прикола. Кроме того у него есть особенность интересная. Возможно с точки зрения ООП (и при наличии хороших библиотек которые скрывают реализацию работы) это конечно хорошая идея. Только я вот как с ним не сталкиваюсь так первые итерации постоянно какие-то как роды. Потом конечно оно разгоняется и кажется «ВАУ!!! КРАСОТЕНЬ!» но вот начало такое тугое что иной раз кажется парсить страницу регекспом как-то попроще будет. Там-то сразу всё видать, что так, а что нет. А вот тут с этими хорошими библиотеками скрывающими реализацию желательно видеть, что случилось там. Ведь это практически взаимодействие объектов и иной раз куцого сообщения об ошибке недостаточно, хочется видеть стектрейс, где именно ты что-то сделал не так… А так-то нормально всё, но не идеально :)
          • 0
            По поводу ошибок — Fault Contracts =) За WCF скажу, что можно опуститься ооооочень глубоко. Было бы желание ;-)
        • +1
          Извините, я может чего-то не понимаю, но что такого не челочеческого в SOAP?
          • +2
            Ну, как — у него же в основе XML… :)
            • 0
              Тот самый XML который умеет неймспейсы, автоматическую валидацию, xpath, имеет готовые библиотеки по работе на всех платформах, в отличии скажем от JSON-RPC? И SOAP, в котором есть WSDL, существуют строгие стандарты и спецификации?
              • +3
                Точно! Прям слово в слово!
          • НЛО прилетело и опубликовало эту надпись здесь
            • 0
              Рад что будет польза
            • 0
              Недавно столкнулся, что Suds и SOAPPy не дружат с виндовым пониманием SOAP-a. Еле выловил, что нужно неймспейс приписывать ко всем вызовам и аргументам.
              Ну или это нам с партнером так повезло. С WCF ихним мне так и не удалось сконнектится.
              • 0
                SOAPpy не вставляет хэдер SOAP Action Header. Причем проблема то не у WCF, а в трактовке стандарта:
                An HTTP client MUST use this header field when issuing a SOAP HTTP Request.


                Говорят что с Suds все ок: Can't call a webservice method using SOAPpy

                А у партнера какие биндинги то были?=)
              • 0
                Подскажите, а тикеты можно создавать раз в 15 минут, или без ограничений?
                • +1
                  Как я понял таких ограничений нет.
              • 0
                Тоже самое, прислали логин — пароль, конечно не работает (. Обратились в поддержку, обещали в течение двух дней активировать.

                Пока пытаюсь подружить WCF с их сервисом.
                • 0
                  Тестирование показывает, что с каждым днем сервис работает все хуже.
                  Вчера запрос провисел с ошибкой «Ответ для ФК ещё не готов» около 12 часов, прежде чем пришел ответ.
                  • 0
                    Поделитесь пожалуйста контактами поддержки?
                    • 0
                      Мы всё решали через fc@russianpost.ru (указано в тексте).
                      • 0
                        пытался, в ответ тишина
                        • 0
                          О, ответили, через неделю.
                          • 0
                            Видимо популярной услуга стала :) вдруг…
                  • 0
                    Кстати, на данный момент у всех работает отслеживание через soap?
                    • 0
                      За исключением отсутствия некоторых треков в системе — вполне работает.
                      • 0
                        странно… у меня выдает
                        Внутренняя ошибка сервиса
                        Обратитесь в службу поддержки

                        правда у меня немного через другую дырку… было сделано. видимо прикрыли, гады.
                    • 0
                      Оставлю ссылку тут, чтобы проще было найти желающим — github.com/InJapan/russianpost-tracking
                      Это клиент SOAP + php
                      • 0
                        Статья вылезает в top'е поисковиков по API почты, поэтому дополню полезной ссылкой:
                        Документация на обновлённом сайте Почты России: https://tracking.pochta.ru/specification. До 100 треков в день (на сегодня) — можно без договора.

                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.