Выгрузка из Shopify API и публикация в Elogii API - PullRequest
0 голосов
/ 28 апреля 2020

Я новичок в Python, я прежде всего JavaScript разработчик, поэтому все еще пытаюсь справиться со всем. Хотя я действительно наслаждаюсь этим.

Общая задача - взять все заказы, полученные в Shopify за последний день, с помощью API Shopify, а затем опубликовать их в API платформы Elogii Logistics, чтобы мы могли управлять доставкой маршруты более эффективны.

Я подключился к обоим API-интерфейсам нормально, и данные для обоих хранятся как Python Объекты. Теперь мне нужно знать, как выполнить итерации по обоим объектам и выяснить, был ли заказ из Shopify уже создан в Elogii, и если нет, опубликовать его в Elogii.

Я пытался использовать diff(ELOGII_RESPONSE_OBJECT, SHOPIFY_ORDERS), но это примерно насколько я знаю.

Есть предложения?

import shopify
import requests
import json
from jsondiff import diff
from datetime import datetime, timedelta, date
from collections import namedtuple

# Shopify Params
SHOPIFY_API_KEY = '######'
SHOPIFY_PASSWORD = '######'
SHOP_NAME = '#####'
SHOP_URL = "https://%s:%s@%s.myshopify.com/admin" % (SHOPIFY_API_KEY, SHOPIFY_PASSWORD, SHOP_NAME)
shopify.ShopifyResource.set_site(SHOP_URL)
SHOP = shopify.Shop.current()
TIME_FORMAT = "%Y-%m-%dT%H:%M:%S+04:30"
TODAY = date.today()
FORMATTED_TODAY = TODAY.strftime(TIME_FORMAT)

# Elogii Params
ELOGII_AUTH='####'
ELOGII_HEADER = {'Content-Type': 'application/json', 'Authorization': ELOGII_AUTH}
ELOGII_URL = 'https://api.elogii.com/deliveries'
ELOGII_RESPONSE = requests.get(ELOGII_URL, headers=ELOGII_HEADER)
ELOGII_RESPONSE_JSON = ELOGII_RESPONSE.json()
ELOGII_RESPONSE_JSON_STR = json.dumps(ELOGII_RESPONSE_JSON)

# print(ELOGII_RESPONSE_JSON)

ELOGII_RESPONSE_OBJECT = json.loads(ELOGII_RESPONSE_JSON_STR, object_hook=lambda d: namedtuple('X', d.keys(), rename=True)(*d.values()))

print(ELOGII_RESPONSE_OBJECT)

def get_all_resources_date(resource, **kwargs):
    SHOPIFY_RESOURCE_COUNT = resource.count(**kwargs)
    SHOPIFY_RESOURCES = []
    if SHOPIFY_RESOURCE_COUNT > 0:
        for page in range(1, ((SHOPIFY_RESOURCE_COUNT-1) // 250) + 2):
            kwargs.update({"created_at_min" : FORMATTED_TODAY, "limit" : 250, "page" : page})
            SHOPIFY_RESOURCES.extend(resource.find(**kwargs))
    return SHOPIFY_RESOURCES

SHOPIFY_ORDERS = get_all_resources_date(shopify.Order())

DIFFERENCE = diff(ELOGII_RESPONSE_OBJECT, SHOPIFY_ORDERS)

print(DIFFERENCE)

1 Ответ

0 голосов
/ 29 апреля 2020

Один из разработчиков eLogii здесь - рад видеть, что вы делаете успехи в этом! Я предполагаю, что самым простым подходом будет фактически не сравнивать списки объектов (JSON объекты из eLogii с одной стороны и объекты Shopify Order с другой), а просто идентификаторы как строки. Вы можете использовать поле meta.reference при отправке доставки в eLogii для хранения идентификатора заказа Shopify - тогда грубый рабочий процесс может быть следующим:

  • получить заказы от Shopify в конце дня и сопоставьте через него, чтобы получить список идентификаторов
  • запроса API eLogii, чтобы получить доставки, уже запланированные на эту дату или диапазон дат (в настоящее время вы не предоставляете дополнительные параметры запроса в вашем вызове, что нормально, но результат может со временем стать громоздким)
  • извлекать из списка результатов только значения полей meta.reference (что вы, скорее всего, снова сделали бы, используя map function)
  • сравнить списки идентификаторов Shopify из Shopify с теми, которые извлечены из eLogii - Получить разницу между двумя списками обеспечивает хороший способ получить разницу между 2 такими списками в Python.
  • отображаются в массиве результатов и отправляются новые заказы Shopify в качестве доставок в eLogii

Hope th Это дает вам подсказку об общем направлении - не стесняйтесь обращаться, если мы можем оказать любую помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...