首页 > 解决方案 > 如何从带有 JSON 文件的 python 将此表单提交到指定的网站?

问题描述

我想生成一个 JSON 文件并使用 python 提交。这可能吗?如何?是否可以为此使用 requests.post ?

实际文档在这里。我只是在 python 中实现这个 https://kite.trade/docs/connect/v3/basket/
我已经在下面添加了整个文档我希望通过 python api 发送 2 个或更多订单的组合。

我认为最后一个块正是我需要的,但不是渲染链接,只需直接从 python 执行,使用风筝连接同时使用篮子执行多个订单使用 python 而不是 java 脚本

异地订单执行¶ 异地订单执行功能允许您将用户重定向到 Kite 的交易所批准订单页面,他们在该页面下订单并无缝返回您的应用程序,就像支付网关一样。这样,您不必为订单执行屏幕构建、维护和获得交易所批准。Kite Publisher 程序利用异地订单执行来提供不需要任何 API 集成的可嵌入 Javascript+HTML 交易按钮。

发起订单¶ 示例 JSON 篮子

[{
  "variety": "regular",
  "tradingsymbol": "INFY",
  "exchange": "NSE",
  "transaction_type": "BUY",
  "order_type": "MARKET",
  "quantity": 10,
  "readonly": false
}, {
  "variety": "regular",
  "tradingsymbol": "NIFTY15DECFUT",
  "exchange": "NFO",
  "transaction_type": "SELL",
  "order_type": "LIMIT",
  "price": 7845,
  "quantity": 1,
  "readonly": false
},
{
  "variety": "bo",
  "tradingsymbol": "RELIANCE",
  "exchange": "NSE",
  "transaction_type": "BUY",
  "order_type": "LIMIT",
  "product": "MIS",
  "price": 915.15,
  "quantity": 1,
  "stoploss": 5,
  "squareoff": 7,
  "trailing_stoploss": 1.5,
  "readonly": true
}]
Posting the JSON basket


<form method="post" id="basket-form" action="https://kite.zerodha.com/connect/basket">
  <input type="hidden" name="api_key" value="xxx" />
  <input type="hidden" id="basket" name="data" value="" />
</form>

<script>
  document.getElementById("basket").value = your_basket;
  document.getElementById("basket-form").submit();
</script>

可以发送多个订单,然后用户在类似购物篮的界面上确认这些订单。您应该准备一个 JSON 工具列表,使用所需的订单参数进行交易,并将其作为表单字段与名称数据以及您的 api_key 一起发布到https://kite.zerodha.com/connect/basket

这是一个浏览器/移动(webview)请求,必须发生在用户端,尽管篮子准备可以发生在后端。发出请求的最简单方法是创建一个隐藏表单,将 JSON 有效负载插入其中并使用 Javascript 自动提交。

如果您正在 Web 应用程序上准备购物篮客户端,则可以使用 Kite Publisher javascript 插件来简化操作。

笔记

您不必使用登录 API 启动登录来执行异地订单。如果用户尚未登录,他们将被要求登录,否则,他们将被直接带到订单篮。无论哪种方式,最后,您都会在您的 redirect_url 收到状态和 request_token ,就像在登录流程中一样。

将异地执行链接到 Kite Connect¶ 异地订单执行遵循与登录相同的流程,除了登录后出现的订单篮。用户完成下单后,购物篮将重定向回您注册的 redirect_login 以及 request_key,就像登录一样。您可以随意使用此密钥创建新的 Kite Connect 会话以进行进一步的 API 交互,或者完全忽略它。

Publisher JS 插件¶ Kite Publisher Javascript 插件可让您将一键式交易按钮添加到您的网页。它就像一个与支付网关相结合的篮子,在您的网页上打开一个内联弹出窗口,引导用户完成交易,并使用户回到您的页面。如抵消订单执行部分所述,可以从该流中捕获 request_token 以启动 Kite Connect 会话。

您可以使用 Javascript 插件动态地将一只或多只股票添加到篮子(最多 10 只),或使用纯 HTML 嵌入简单的静态按钮。

入门¶

<script src="https://kite.trade/publisher.js?v=3"></script>

通过将以下脚本标记粘贴到您的网页末尾,就在结束标记之前,将 Kite Publisher 包含在您的网页上。您只需要包含一次即可在页面上呈现任意数量的按钮。

品牌 HTML5 按钮¶

<!--  A link that initiates a buy (market) of the SBIN stock //-->

    <kite-button href="#" data-kite="your_api_key"
                data-exchange="NSE"
                data-tradingsymbol="SBIN"
                data-transaction_type="BUY"
                data-quantity="1"
                data-order_type="MARKET">Buy SBI stock</kite-button>

您可以使用自定义 HTML5 标记来呈现品牌风筝按钮,只需单击一下即可启动交易。品牌按钮的工作方式与社交媒体按钮类似,您可以在页面上包含任意数量的按钮。

自定义 HTML5 按钮¶

   <a href="#" data-kite="your_api_key"
                data-exchange="NSE"
                data-tradingsymbol="SBIN"
                data-transaction_type="BUY"
                data-quantity="1"
                data-order_type="MARKET">Buy SBI stock</a>
    
    
    <!--  A button that initiates a sell (LIMIT) of the RELIANCE stock //-->
    <button data-kite="your_api_key"
            data-exchange="NSE"
            data-tradingsymbol="RELIANCE"
            data-transaction_type="SELL"
            data-quantity="1"
            data-order_type="LIMIT"
            data-price="100">Buy RELIANCE</button>

<!--  A button that initiates a BO of the RELIANCE stock //-->
<button data-kite="your_api_key"
        data-exchange="NSE"
        data-tradingsymbol="RELIANCE"
        data-transaction_type="BUY"
        data-quantity="1"
        data-order_type="LIMIT"
        data-variety="bo"
        data-product="MIS"
        data-price="915"
        data-stoploss="5"
        data-squareoff="7"
        data-trailing_stoploss="1.5"
        >Buy RELIANCE (Bracket Order)</button>

您可以在任何 HTML 元素上使用 HTML5 数据属性,并将其变成一个交易按钮,只需单击一下即可调用。右边的例子显示了一个链接和一个变成交易按钮的按钮。

使用 Javascript 生成动态按钮¶

<!-- A Kite button will be generated inside this container //-->
<p id="default-button"> </p>

<!-- The basket will be linked to this element's onClick //-->
<button id="custom-button">Buy the basket</button>
<script>
// Only run your custom code once KiteConnect has fully initialised.
// Use KiteConnect.ready() to achieve this.
KiteConnect.ready(function() {
    // Initialize a new Kite instance.
    // You can initialize multiple instances if you need.
    var kite = new KiteConnect("your_api_key");

    // Add a stock to the basket
    kite.add({
        "exchange": "NSE",
        "tradingsymbol": "INFY",
        "quantity": 5,
        "transaction_type": "BUY",
        "order_type": "MARKET"
    });

    // Add another stock
    kite.add({
        "exchange": "NSE",
        "tradingsymbol": "SBIN",
        "quantity": 1,
        "order_type": "LIMIT",
        "transaction_type": "SELL",
        "price": 105
    });

    // Add a Bracket Order
    kite.add({
        "tradingsymbol": "RELIANCE",
        "exchange": "NSE",
        "transaction_type": "BUY",
        "order_type": "LIMIT",
        "product": "MIS",
        "price": 915.15,
        "quantity": 1,
        "variety": "bo",
        "stoploss": 5,
        "squareoff": 7,
        "trailing_stoploss": 1.5,
        "readonly": true
    });

    // Register an (optional) callback.
    kite.finished(function(status, request_token) {
        alert("Finished. Status is " + status);
    });

    // Render the in-built button inside a given target
    kite.renderButton("#default-button");

    // OR, link the basket to any existing element you want
    kite.link("#custom-button");
});
您可以创建一篮子股票并让插件呈现执行它的 Kite 按钮,或将篮子链接到您自己的按钮(或任何 HTML 元素)。

该插件异步加载其资产,因此在完全加载后初始化自定义 KiteConnect 调用非常重要。您需要使用 KiteConnect.ready() 函数来实现这一点。

标签: javascriptpythonpost

解决方案


对于问题的第一部分,如何生成json结构,您可以使用json标准库中的模块。然后根据您的 json-string 在哪里存储为字符串变量或文本文件,您可以使用json.loadsjson.load将其转换为 python 对象。检查文档以获取详细信息。

import json


# string from file
with open('file', 'r') as fd:
   py = json.load(fd.read())
   print(type(py))
   # do smt

# from variable string
js_text ="""
[{
      "variety": "regular",
      "tradingsymbol": "INFY",
      "exchange": "NSE",
      "transaction_type": "BUY",
      "order_type": "MARKET",
      "quantity": 10,
      "readonly": false
    }, # ... as above
]"""


py = json.loads(js_text)
print(type(py))

对于第二部分,您应该提供一个最小的工作示例......太多的可能性

编辑:第二部分

同样,有很多可能性......您可以尝试使用requests模块(不是来自标准库)。此外,您应该查看响应以了解连接所需的内容和方式。这是一个指示性示例

url = # smt
headers = {} # such as user-agent, ...
req = requests.post(url, json=js_text[0], headers=headers) # post request

最终尝试json={'json_payload': js_text[0]}

...并提供一些代码快照!

在这里你可以找到文档requests


推荐阅读