如何从python和JSON文件将此表单提交到指定网站?

2024-10-04 11:29:33 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

场外订单执行» 场外订单执行功能允许您将用户重定向到Kite的exchange approved order页面,用户在该页面下订单并无缝返回到您的应用程序,就像支付网关一样。这样,您就不必为订单执行屏幕构建、维护和获得exchange批准。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工具列表,使用所需的订单参数进行交易,并将其作为表单字段发布,其中包含名称数据以及https://kite.zerodha.com/connect/basket的api_键

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

如果您正在准备web应用程序的basket客户端,那么可以使用Kite Publisher javascript插件使事情变得更简单

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

将异地执行链接到Kite Connect» 场外订单执行遵循与登录相同的流程,但登录后出现的订单篮除外。一旦用户下单完毕,购物篮将重定向回您注册的重定向登录,并带有请求密钥,与登录完全相同。您可以自由地使用此密钥创建新的Kite Connect会话以进行进一步的API交互,也可以完全忽略它

Publisher-JS插件» Kite Publisher Javascript插件允许您在网页中添加一键交易按钮。它的工作原理类似于一个结合了支付网关的购物篮,在您的网页上打开一个内嵌弹出窗口,引导用户完成交易,并将用户放回您的页面。如偏移顺序执行部分所述,可以从该流捕获请求\u令牌以启动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");
});
您可以创建一个股票篮子,让插件呈现一个执行它的风筝按钮,或者将篮子链接到您自己的按钮(或任何HTML元素)。

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


Tags: 订单apidataexchangetypeorderbutton按钮
1条回答
网友
1楼 · 发布于 2024-10-04 11:29:33

对于问题的第一部分,如何生成json结构,您可以使用标准库中的json模块。然后,根据json字符串的位置(存储为字符串变量或文本文件),可以使用json.loadsjson.load将其转换为python对象。有关详细信息,请查看docs

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]}

…并提供一些代码快照

在这里你能找到^{}的文件吗

相关问题 更多 >