Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从shopify产品api获取特定字段_Python_Python 3.x_Api_Shopify_Shopify App - Fatal编程技术网

Python 从shopify产品api获取特定字段

Python 从shopify产品api获取特定字段,python,python-3.x,api,shopify,shopify-app,Python,Python 3.x,Api,Shopify,Shopify App,我正在使用FastAPI并为shopify产品API创建了一个包装器,我正在尝试获取产品标题、id和图像src!如果产品有很多图像,我想返回图像列表SRC: GET  https://APIKEY:password@koldev.myshopify.com/admin/products.json?title={product_name}&fields=id,title,images 这样一切都正常,但我得到了所有的图像信息,所以有没有办法只得到src 这是我得到的答复: {"

我正在使用
FastAPI
并为
shopify
产品API创建了一个包装器,我正在尝试获取产品标题、id和图像src!如果产品有很多图像,我想返回图像列表SRC:

GET  https://APIKEY:password@koldev.myshopify.com/admin/products.json?title={product_name}&fields=id,title,images
这样一切都正常,但我得到了所有的图像信息,所以有没有办法只得到src

这是我得到的答复:

{"products":[{"id":5845888762006,"title":"2WAYボタンニット・全2色・e56772","images":[{"id":19588495999126,"product_id":5845888762006,"position":1,"created_at":"2020-10-21T02:13:26-04:00","updated_at":"2020-10-21T02:13:33-04:00","alt":null,"width":750,"height":1030,"src":"https://cdn.shopify.com/s/files/1/0446/9450/3574/products/867976_17469854_main.jpg?v=1603260813","variant_ids":[],"admin_graphql_api_id":"gid://shopify/ProductImage/19588495999126"},{"id":19588496359574,"product_id":5845888762006,"position":2,"created_at":"2020-10-21T02:13:26-04:00","updated_at":"2020-10-21T02:13:33-04:00","alt":null,"width":1000,"height":3768,"src":"https://cdn.shopify.com/s/files/1/0446/9450/3574/products/867976_17467030_k2.jpg?v=1603260813","variant_ids":[],"admin_graphql_api_id":"gid://shopify/ProductImage/19588496359574"}
API:


我已经创建了一个独立的应用程序,其中包含一个端点和一个测试,您可以使用
pytest

从输入导入列表,可选
从fastapi导入fastapi
从fastapi.testclient导入testclient
从pydantic导入BaseModel,验证程序
app=FastAPI()
类ImageSrcOut(基本模型):
id:int
标题:str
图像:列表[dict]
@验证器(“图像”)
def validate_图像(cls,值:List[dict])->List[str]:
返回[值中元素的元素[“src”]
@app.get(“/products”,response\u model=List[ImageSrcOut])
def get_searched_产品(产品名称:可选[str]=None):
res={
“产品”:[
{
“id”:5845888762006,
“标题”:“双向ボタンニット・全2.色・e56772“,
“图像”:[
{
“id”:19588495999126,
“产品id”:5845888762006,
"立场":一,,
“创建时间”:“2020-10-21T02:13:26-04:00”,
“更新时间”:“2020-10-21T02:13:33-04:00”,
“alt”:无,
“宽度”:750,
“高度”:1030,
“src”:https://cdn.shopify.com/s/files/1/0446/9450/3574/products/867976_17469854_main.jpg?v=1603260813",
“变体_id”:[],
“管理图形api id”:gid://shopify/ProductImage/19588495999126",
},
{
“id”:19588496359574,
“产品id”:5845888762006,
"立场":二,,
“创建时间”:“2020-10-21T02:13:26-04:00”,
“更新时间”:“2020-10-21T02:13:33-04:00”,
“alt”:无,
“宽度”:1000,
“高度”:3768,
“src”:https://cdn.shopify.com/s/files/1/0446/9450/3574/products/867976_17467030_k2.jpg?v=1603260813",
“变体_id”:[],
“管理图形api id”:gid://shopify/ProductImage/19588496359574",
},
],
}
]
}
#return res.json()
退货商品[“产品”]
client=TestClient(应用程序)
def test_right_json():
res=client.get(“/products”)
assert res.json()==[
{
“id”:5845888762006,
“标题”:“2WAY\u30dc\u30bf\u30f3\u30cb\u30c3\u30c8\u30fb\u51682\u8272\u30fbe56772”,
“图像”:[
"https://cdn.shopify.com/s/files/1/0446/9450/3574/products/867976_17469854_main.jpg?v=1603260813",
"https://cdn.shopify.com/s/files/1/0446/9450/3574/products/867976_17467030_k2.jpg?v=1603260813",
],
}
]

注意:您需要安装:
fastapi
请求
pytest
来运行它。

您想知道省略其余数据所需的模式吗?我不完全明白你想要的。我想知道在url中或在回复中添加什么才能只得到图片src(我已经得到了标题和id)(我编辑了帖子)这样做的方法是使用graphql而不是rest api是的,这在这种情况下可能有效,但当我将res从该格式更改为与我在帖子中所做的相同的格式时,我得到一个错误,即响应不是列表中的,您可以调整我发布到您的api吗?抱歉,我没有得到您想要的。我在描述中使用了与您相同的输出,因为我不想在Shopify上创建帐户来获取令牌。。。
@app.get('/products')
def get_searched_products(product_name: Optional[str] = None):
        
        r = requests.get(
f"https://APIKEY:password@koldev.myshopify.com/admin/products.json?title={product_name}&fields=id,title,images")
        
        return r.json()