以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  API接口问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=160215)

--  作者:hgzvip
--  发布时间:2021/1/25 2:13:00
--  API接口问题
老师,我想通过Foxtable对接聚宽的API接口,查了很多问题帖子,尝试了很久,都找不到答案,希望老师能解答一下,不胜感激。


API文档的网址:https://www.joinquant.com/help/api/help#JQDataHttp:%E7%AE%80%E4%BB%8B


接口https://dataapi.joinquant.com/apis

参数

字段解释示例
method方法名get_token
mob账号账号是申请JQData时所填手机号,获取token需要
pwd密码密码聚宽官网登录密码,获取token需要
token用户凭证5b6a9ba7b0f572bb6c287e280ed
code标的代码000001.XSHG
date日期或开始日期2018-12-18

请求数据接口前需要调用get_token方法获取token 请求方式为post,请求格式为json格式的body字符串



获得token的实例是:

{ "method": "get_token", "mob": "135xxxxxxx", "pwd": "xxxxxxxxxx", }





比如我想通过按一个按钮,返回用户凭证token,我该如何编写代码呢?





--  作者:有点蓝
--  发布时间:2021/1/25 9:00:00
--  
Dim hc As New HttpClient("https://dataapi.joinquant.com/apis")
hc
.ContentType = "application/json"
Dim jo As New JObject
jo
("method") = "get_token"
jo
("mob") = "135xxxxxxx"
jo
("pwd") = "xxxxxxxxxx"
hc.Content = jo.ToString
Dim
 ret As String = hc.GetData()
MessageBox
.Show(ret)

--  作者:hgzvip
--  发布时间:2021/1/25 10:31:00
--  
非常感谢!以上代码成功返回token(就是还弄不明白为什么许多接口对接的代码都不一样),但是老师,又遇到新的问题了,当我加入token去申请数据时,显示出错,以下是我的代码和出错信息:

Dim tx1 As WinForm.TextBox = e.Form.Controls("TextBox1")
Dim ncb1 As WinForm.NumericComboBox = e.Form.Controls("NumericComboBox1")
Dim hc As New HttpClient("https://dataapi.joinquant.com/apis")
hc.C
Dim jo As New JObject
jo("method") = "get_price"
jo("mob") = "189xxxxxxxx"
jo("pwd") = "xxxxxx"
jo("token") = "5b6a9ba1b2f37bb322667f2f06cc0cb83d6b7038"
jo("code") = ncb1.value & ".XSHG" \'代码
jo("count") = "8" \'信息量
jo("unit") = "30m" \'信息类型
hc.Content = jo.ToString
Dim ret As String = hc.GetData()
tx1.text = ret

我想把回馈的信息显示在文本框内,但执行后,弹窗显示:
无法将类型为“System.String”的对象强制转换为类型“Newtonsoft.Json.Linq.JToken”。

请问是代码还缺少转换的语句吗?该如何解决?谢谢!


API文档实例中,返回的信息如下:
date,open,close,high,low,volume,money,paused,high_limit,low_limit,avg,pre_close 2018-07-09,9.27,9.50,9.53,9.27,22407527,212109327.00,0,10.20,8.34,9.47,9.27 2018-07-10,9.51,9.47,9.55,9.40,12534270,118668133.00,0,10.45,8.55,9.47,9.50

--  作者:有点蓝
--  发布时间:2021/1/25 10:36:00
--  
弹窗显示是哪个事件出的错?
--  作者:有点蓝
--  发布时间:2021/1/25 10:52:00
--  
返回的数据应该是普通字符串,而不是json数据,不要使用josn来解析,直接拆分字符串,类似:http://www.foxtable.com/webhelp/topics/2629.htm
--  作者:hgzvip
--  发布时间:2021/1/25 12:02:00
--  
老师我这个代码是写在一个按钮上的,另外窗口上加了一个多行文本框,返回的详细信息如下:

.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2020.5.29.8
错误所在事件:窗口,窗口1,Button3,Click
详细错误信息:
无法将类型为“System.String”的对象强制转换为类型“Newtonsoft.Json.Linq.JToken”。




另外,API文档说明中,指出返回的信息类型:返回csv格式文本数据,少数接口为json格式字符串
[此贴子已经被作者于2021/1/25 12:04:16编辑过]

--  作者:hgzvip
--  发布时间:2021/1/25 12:14:00
--  
老师我找到问题了,我窗口上有一个数字输入框控件NumericComboBox1,代码部分引用了这个框的Value,我不用这个数值框,换成一个TextBox1控件,引用它的text,就可以了,只是不知道是什么原因:

Dim tx1 As WinForm.TextBox = e.Form.Controls("TextBox1")
Dim tx2 As WinForm.TextBox = e.Form.Controls("TextBox2")
Dim hc As New HttpClient("https://dataapi.joinquant.com/apis")
hc.C o n t entType = "application/json" ‘这一句为啥在贴里显示不出来
Dim jo As New JObject
jo("method") = "get_price"
jo("mob") = "189xxxxxxxx"
jo("pwd") = "xxxxxx"
jo("token") = "5b6a9ba1b2f37bb322667f2f06cc0cb83d6b7038"
jo("code") = tx2.text & ".XSHG" \'代码
jo("count") = "8"
jo("unit") = "30m"
hc.Content = jo.ToString
Dim ret As String = hc.GetData()
tx1.text = ret


感谢老师的解答,谢谢!
[此贴子已经被作者于2021/1/25 12:16:54编辑过]