.NET WooRestAPI (WooCommerce) Получить все заказы

Я использую класс оболочки WooCommerce.NET для связи с WooCommerce API v2. Я пытаюсь GetAll() заказов, но у него есть ограничение на возврат 10 на страницу.

Это то, что у меня есть до сих пор:

try
{
    WooRestAPI rest = new WooRestAPI(baseUrl, key, secret);
    WCObject wc = new WCObject(rest);
    var getOrders = await wc.Order.GetAll(new Dictionary<string, string>() {
        { "page", "1" },
        { "per_page", "50" } }); 
    orders = ExtractWooData(getOrders);
    WriteToConsole(orders);
    WriteToFile(orders, outputPath);
}
catch (Exception e)
{
     throw new Exception(e.Message);
}

new Dictionary<string, string>() — это параметры, доступные в документах WooRestAPI.

Я попытался посмотреть на объект wc, чтобы узнать, могу ли я как-то запросить страницы, но, похоже, у него нет никакого связанного с ним свойства.

Это также будет async функцией Azure, если это вообще уместно. Как мне создать страницы, чтобы они возвращали все данные заказа, а не только одну страницу?


person Milo    schedule 17.03.2018    source источник


Ответы (1)


Я понял. Я делаю вечный цикл while, каждый раз добавляя 1 к номеру страницы. Если wc.Order.GetAll() возвращает количество меньше предела per_page, извлеките данные и break из цикла (означает, что это последний вызов), в противном случае извлеките данные и увеличьте page #:

try 
{
    WooRestAPI rest = new WooRestAPI(baseUrl, key, secret);
    WCObject wc = new WCObject(rest);
    int pageNum = 1;
    while (true) 
    {
        var page = pageNum.ToString();
        var getOrders = await wc.Order.GetAll(new Dictionary < string, string > () {
                {
                    "page", page
                }, {
                    "per_page", "100"
                }
        });
        if (getOrders.Count < 100) 
        {
            ExtractWooData(getOrders);
            break;
        } 
        else 
        {
            ExtractWooData(getOrders);
            pageNum++;
        }
    }
    WriteToConsole(orders);
    WriteToFile(orders, outputPath);
} 
catch (Exception e) 
{
    throw new Exception(e.Message);
}
person Milo    schedule 17.03.2018