通过Python用一个API调用更新Shopify价格

1 投票
2 回答
2856 浏览
提问于 2025-04-18 18:24

我正在使用Shopify的Python API,想通过一次API调用来更新我某个产品的价格。这样做的原因是他们的API调用有次数限制,而我需要更新的商品数量很大,所以减少50%的API调用次数会大大提高我的整体运行效率。

现在我正在做的是:

product = shopify.Product.find(shopify_id)
product.variants[0].price = new_price
product.save()

这样做需要两次API调用。有没有办法通过一次API调用,使用Shopify ID来更新价格呢?我试过这个(在论坛上有人告诉我,设置产品的价格会更新所有变体):

product = shopify.Product(dict(id=shopify_id, price=new_price))
product.save()

结果save()返回了True,但价格并没有更新。然后我又试了这个:

product = shopify.Product(dict(id=shopify_id, price=new_price))
product.variants = [shopify.Variant()]
product.variants[0].price = new_price
product.save()

结果save()返回了False,product.errors.full_messages()返回了['选项不唯一']。

2 个回答

-2

假设你已经有了想要更新的资源的ID,你只需要对它进行一次PUT请求就可以了,不需要先做GET请求。很明显,一个产品本身是没有价格的,只有它的变体才有价格,所以你在这方面遇到了问题。你还有一个选择,就是直接获取产品或变体的资源,更新变体的价格,然后再进行PUT请求。要注意,API调用的成本其实很低。为了节省这些调用而纠结,往往比直接多花几个调用要麻烦得多。

5

我知道这个问题有点老了,但它是个好问题,之前没有得到很好的回答。看起来大家的回答都没有真正理解你在问什么。

我在做一个Shopify应用,需要一次性更新很多产品,这个过程可能会花费一些时间,尤其是当你需要对每个产品调用API两次的时候(也就是说,第一次是获取产品信息,第二次是更新)。

我不得不深入源代码去找这个,但我发现产品类里有一个add_variant的方法,似乎可以解决这个问题。

product = shopify.Product(dict(id=123456789))
variant = shopify.Variant(dict(id=987654321, price=9.99))
product.add_variant(variant)
product.save()

这个方法会更新产品,基本上可以让你对产品进行一次PUT请求。你可以根据需要更新任意数量的变体,而不会影响到其他变体。此外,它不需要先调用产品信息来获取你要更新的产品。

撰写回答