如何从Shopify Python API获取所有产品ID

Raf*_*lah 5 api shopify python-2.7

我创建了一个私人shopify应用程序.哪个可以获得产品ID的几乎所有信息.但我需要一个选项来获取所有产品的产品ID,并使用API​​.我试过下面的选项

shopify.Product.find()
Run Code Online (Sandbox Code Playgroud)

但它只显示了前50种产品.但我的商店有超过2.4k的产品.

Jul*_*ien 17

Shopify返回资源列表的分页响应.每页的默认资源数是50,默认页面是1.因此,您的请求等同于以下内容:

shopify.Product.find(limit=50, page=1)
Run Code Online (Sandbox Code Playgroud)

Shopify允许您将每页的限制增加到250.这是我用来获取所有给定资源的辅助函数:

def get_all_resources(resource, **kwargs):
    resource_count = resource.count(**kwargs)
    resources = []
    if resource_count > 0:
        for page in range(1, ((resource_count-1) // 250) + 2):
            kwargs.update({"limit" : 250, "page" : page})
            resources.extend(resource.find(**kwargs))
    return resources
Run Code Online (Sandbox Code Playgroud)

你这样使用它:

products = get_all_resources(shopify.Product)
Run Code Online (Sandbox Code Playgroud)

你甚至可以传递参数.您的问题专门针对产品ID提出问题 - 如果您将查询限制为仅返回ID,则会更快,更快(因为它不需要引入任何产品变体):

product_ids = get_all_resources(shopify.Product, fields="id")
Run Code Online (Sandbox Code Playgroud)

请注意,如果您有2.4k产品,这可能需要一些时间!

文档:https: //help.shopify.com/api/reference/product


Len*_*and 8

Shopify API 中的分页界面发生了变化,旧的“限制+页面”的分页方式在 2019-07 版 API 中被删除

换句话说:@Julien 接受的答案在此 api 版本及更高版本中不起作用。

我在这里使用进行基于相对光标的分页的新方法重新创建了已接受答案的功能:

def get_all_resources(resource_type, **kwargs):
    resource_count = resource_type.count(**kwargs)
    resources = []
    if resource_count > 0:
        page=resource_type.find(**kwargs)
        resources.extend(page)
        while page.has_next_page():
            page = page.next_page()
            resources.extend(page)
    return resources
Run Code Online (Sandbox Code Playgroud)