通过Python用一个API调用更新Shopify价格
我正在使用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请求。你可以根据需要更新任意数量的变体,而不会影响到其他变体。此外,它不需要先调用产品信息来获取你要更新的产品。