javascript - 如何从带有 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() 函数来实现这一点。
解决方案
对于问题的第一部分,如何生成json
结构,您可以使用json
标准库中的模块。然后根据您的 json-string 在哪里存储为字符串变量或文本文件,您可以使用json.loads
或json.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
推荐阅读
- python-sphinx - 如何在 Sphinx 乳胶中的父内容之后放置包含的第一个内容从 toctree
- visual-studio - NetStandard.Library NuGet 包和项目属性中的 Target Framework 有什么关系?
- scala - 如何在 spark 中处理这个用例(运行窗口数据)
- docker - 如何在 docker compose 中禁用外部网络调用?
- python - 使用 Python 在 Django 中接收 NoReverseMatch 错误
- r - 在参数由数据框指定的地方使用 mapply
- c++ - 擦除()向量中的元素不起作用
- javascript - 在 For 循环中检查元素是否存在 SetInterval
- python-3.x - 没有名为“numpy.testing.decorators”的模块
- c# - 给定所需的排序层次结构,如何自定义对字符串列表进行排序?