Foxtable(狐表)用户栏目专家坐堂 → API接口问题


  共有2688人关注过本帖树形打印复制链接

主题:API接口问题

帅哥哟,离线,有人找我吗?
hgzvip
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:67 积分:750 威望:0 精华:0 注册:2015/9/5 18:02:00
API接口问题  发帖心情 Post By:2021/1/25 2:13:00 [只看该作者]

老师,我想通过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,我该如何编写代码呢?





 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106097 积分:539590 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:67 积分:750 威望:0 精华:0 注册:2015/9/5 18:02:00
  发帖心情 Post By: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

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106097 积分:539590 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/1/25 10:36:00 [只看该作者]

弹窗显示是哪个事件出的错?

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106097 积分:539590 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/1/25 10:52:00 [只看该作者]

返回的数据应该是普通字符串,而不是json数据,不要使用josn来解析,直接拆分字符串,类似:http://www.foxtable.com/webhelp/topics/2629.htm

 回到顶部
帅哥哟,离线,有人找我吗?
hgzvip
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:67 积分:750 威望:0 精华:0 注册:2015/9/5 18:02:00
  发帖心情 Post By: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
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:67 积分:750 威望:0 精华:0 注册:2015/9/5 18:02:00
  发帖心情 Post By: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编辑过]

 回到顶部