【问题标题】:PythonAPI RequestPythonAPI 请求
【发布时间】:2021-05-13 12:25:18
【问题描述】:
Source=["SGD"]
Destination=["USD"]
Amount=[5000]

```import requests
   url = "https://api.currencyfair.com/comparisonQuotes"
   payload = "{\"currencyFrom\":\"SGD\",\"currencyTo\":\"EUR\",\"type\":\"SELL\",\"amountInfo\": 
  {\"amount\":50000,\"scale\":2}}"
  headers = {
    'user-agent': "vscode-restclient",
    'content-type': "application/json",
    'accept': "application/json"
    }
   response = requests.request("POST", url, data=payload, headers=headers)
   print(response.text)

我需要将值传递给有效负载字符串 - payload = "{"currencyFrom":"SGD","currencyTo":"EUR","type":"SELL","amountInfo":{"amount" :50000,"scale":2}}" 需要使用上面创建的 3 个列表将值传递给有效负载```

【问题讨论】:

    标签: python google-api-python-client


    【解决方案1】:

    您能否再解释一下您的目标是什么?

    我怀疑你的意思是你想在每次调用函数发布数据时动态更新文本 payload 中的值。

    我通常会通过创建一个占位符字符串然后在运行时替换占位符值来更新它。

    payload = "{\"currencyFrom\":\"@currencyFrom\",\"currencyTo\":\"@currencyTo\",\"type\":\"SELL\",\"amountInfo\": {\"amount\":@amountInfo,\"scale\":2}}"
    
    currencyFrom = 'USD'
    currencyTo = 'EUR'
    amountInfo = 50000
    
    payload = payload.replace('@currencyFrom', currencyFrom).replace('@currencyTo', currencyTo).replace('@amountInfo', amountInfo)
    

    查看您尝试与之交互的 API,这是它所期望的示例:

    {"currencyFrom": "EUR",
    "currencyTo": "GBP",
    "type": "SELL",
    "amountInfo": {"amount": 100},
    "ignoreFee": false}
    

    这是一个遵循特定格式的 JSON 对象,如果您尝试在“currencyFrom”、“currencyTo”等字段中传递一个列表而不是字符串,则会收到错误消息。

    要获取多个值作为响应,只需对 API 执行多个请求,例如:

    payload = "{\"currencyFrom\":\"@currencyFrom\",\"currencyTo\":\"@currencyTo\",\"type\":\"SELL\",\"amountInfo\": {\"amount\":@amountInfo,\"scale\":2}}"
    
    currencyFrom = ['USD', 'GBP']
    currencyTo = ['EUR', 'CHF']
    amountInfo = 50000
    
    payload = payload.replace('@currencyFrom', currencyFrom).replace('@currencyTo', currencyTo).replace('@amountInfo', amountInfo)
    for currFrom in currencyFrom:
        for currTo in currencyTo:
            for amount in amountInfo:
                payload = payload.replace('@currencyFrom', currFrom ).replace('@currencyTo', currTo ).replace('@amountInfo', amount )
                response = requests.request("POST", url, data=payload, headers=headers)
    

    希望这是有道理的!

    编辑:根据您的 cmets 更新代码。

    【讨论】:

    • 非常感谢您的回复 :) 我的意思是,在 Source、Destination、Amount 变量中,我将有多个值,我需要将这些值传递给有效负载 - 有效负载中突出显示的 3 个值是通过 3 个列表变量..
    • 假设我在 Destination=["USD","AUD"] 中有两个值,我想将它们传递给有效载荷来代替 "EUR"
    • 我更新了上面的代码,以更好地说明如何到达您想要的位置。我还鼓励您快速阅读 API 的工作原理和传递 JSON 对象的方式。您不需要字符串格式的有效负载,将其转换为 JSON 对象将使一切变得更简单,代码更简洁!
    • 谢谢,当我运行上面的代码时,我得到 TypeError: replace() argument 2 must be str, not list 在有效负载上抛出错误 - payload = payload.replace('@currencyFrom', currencyFrom ).replace('@currencyTo', currencyTo).replace('@amountInfo', amountInfo) 请帮忙
    猜你喜欢
    • 2021-06-04
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多