Python/Django разработчик
0,0
рейтинг
10 сентября 2012 в 11:57

Разработка → Клиент для SOAP API Почты России на Python

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

Спасибы

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

Приятного использования (судя по всему ещё паре человек это интересно). Форки, пулл реквесты, багрепорты — всё по классической программе гитхаба (ссылка ещё раз, чтоб не искать).
Вадим Лопатюк @qnub
карма
52,2
рейтинг 0,0
Python/Django разработчик
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (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
        спасибо за инфу!
  • 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 треков в день (на сегодня) — можно без договора.

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