Python библиотека для работы с business.ru API
pip install businessru-api
Далее отражено как выглядели бы описанные в официальной документации примеры запросов при использовании ЯП Python с данным пакетом.
from businessru_api import BusinessruAPI
client = BusinessruAPI(account, app_id, secret)
client.repair_token()
print(client.token)
Сразу же стоит отметить несколько отличий от официальной реализации на PHP:
- Немного изменены входные параметры
- На самом деле метод
client.repair_token
вызывается автоматически внутри__init__
, из-за чего нет смысла делать это самостоятельно при создании объекта - Все взаимодействие с токеном инкапсулировано, и нет необходимости самостоятельно обновлять его значение после каждого запроса, это делается тоже автоматически
from businessru_api import BusinessruAPI
client = BusinessruAPI(account, app_id, secret)
# запрашиваем интерактивную помощь по модели goods
response = client.request("get", "goods", help=1)
# либо запрашиваем полный список товаров и услуг
response = client.request("get", "goods")
# либо запрашиваем полный список товаров, отсортированный в порядке возрастания идентификатора
response = client.request("get", "goods", type=1,
order_by="id")
# либо запрашиваем полный список товаров, отсортированный в порядке убывания идентификатора
response = client.request("get", "goods", **{'type': 1,
'order_by[id]': 'DESC'})
# либо запрашиваем полный список товаров и услуг с составной сортировкой
response = client.request("get", "goods", **{'type': 1,
'order_by[partner_id]': 'ASC',
'order_by[full_name]': 'ASC'})
# либо запрашиваем список услуг, помещенных в архив
response = client.request("get", "goods", archive=True, type=2)
# либо запрашиваем заказ покупателя c определенным идентификатором
response = client.request("get", "customerorders", id=123)
# либо запрашиваем заказы покупателя c заданными статусами
response = client.request("get", "customerorders", status_id=[10, 21, 22, 23 ])
# либо запрашиваем заказы покупателя, дата создания которых находится в заданном диапазоне
response = client.request("get", "customerorders", **{'date[from]': '01.12.2016',
'date[to]': '31.12.2016'})
# либо запрашиваем сделки, информация в которых была обновлена после заданного момента времени
response = client.request("get", "deals", **{'updated[from]': '01.12.2016 12:00:00'})
# извлекаем данные
print(response['result'])
Главное отличие заключается в том, что вам не нужно самостоятельно проверять статус результата, поскольку если что-то пойдет не так, то вызовется Exception.
from businessru_api import BusinessruAPI
client = BusinessruAPI(account, app_id, secret)
# создаем товар с наименованием “Мороженое”
response = client.request("post", "goods", name="Мороженое")
print(response['result'])
from datetime import datetime
from itertools import count
from businessru_api import BusinessruAPI
secret = "Hgl6Q1GF8lwHZbRX3nq7fO8MEytNsdJ0";
app_id = "461979";
account = 'myaccount';
client = BusinessruAPI(account, app_id, secret)
method = 'get';
model = 'offers';
date_to_compare_with = datetime.now()
for page in count(1):
result = client.request(method, model, limit=250, page=page)
if not result:
# заказов больше нет
break
for item in result:
# отбираем заказы, обновленные позднее заданной метки времени
updated = datetime.strptime(item['updated'], "%d.%m.%Y %H:%M:%S.%f")
if updated > date_to_compare_with:
# выполняем необходимые действия с отобранными заказами
pass
from businessru_api import BusinessruAPI
secret = "Hgl6Q1GF8lwHZbRX3nq7fO8MEytNsdJ0"
app_id = "461979"
account = 'myaccount'
client = BusinessruAPI(account, app_id, secret)
# Считываем данные модели partners с дополнительными полями
method = 'get'
model = 'partners'
res = client.request(method, model, with_additional_fields=1)
# добавляем контрагента, инициализируем доп. поле 23698467 значением "Особо ценный контрагент"
# подразумевается что доп. поле имеет тип Техт
method = 'post'
params = {
'name': 'Контрагент1',
'23698467': 'Особо ценный контрагент'
}
res = client.request(method, model, **params)
# редактируем доп. поле контрагента
method = 'put'
params = {
'id': '23693351',
'23698467': 'Просто ценный контрагент'
}
res = client.request(method, model, **params)
BusinessruAPI
методыrequest
,get
,post
иput
делают от1
доBusinessruAPI.max_retry
запросов в зависимости от того, когда вернется успешный ответ или вызовется исключение, отличное отTooManyRequests
иInvalidToken
. Дефолтное значениеBusinessruAPI.max_retry
равно10
и является последним аргументомBusinessruAPI.__init__
.BusinessruAPI
кроме методаrequest
содержит так же методыget
,post
иput
позволяющие писать немного короче:client.request('get', model, **params)
->client.get(model, **params)
client.request('post', model, **params)
->client.post(model, **params)
client.request('put', model, **params)
->client.put(model, **params)
- При работе с business.ru API я столкнулся с ответами, статус коды которых незадокументировны.
Изучив запросы на которые приходят данные ответы, было решено интерпретировать их следующим образом:
- 405 -- несуществующий эндпоинт,
EndpointNotFound
- 504 -- количество запросов на единицу времени превышено,
TooManyRequests
- 405 -- несуществующий эндпоинт,