基金知识每日一学(基金知识干货)

OKX欧易app

欧易APP下载

注册下载欧易okx交易所,即可领取6万元盲盒奖励,100%中奖!!

APP下载   官网注册

本老汉从去年3月份从成都天府五街天府软件园的程序开发岗后退下来,一直靠送外卖维持生计。不少头条朋友私信我想跟我学编程,老汉都谢绝了,原因是自己肚子里就这点货,怕耽误了大家,误人子弟。

基金知识每日一学(基金知识干货)

还有些朋友对编程一无所知,不知道计算机代码可以帮助我们做哪些事情。本老汉今天就来举一个例子,用计算机代码获取指定基金的历史数据。

再次声明,本老汉编程水平很烂,所以才被公司优化,被迫送外卖为生。因此如果以前的程序员同行刷到了这篇文章,请不要对我蹩脚的代码大惊小怪。如果我和你们的水平一样,那多半现在仍然继续在成都天府五街天府软件园做开发,而不是现在这样送外卖,收破烂为生。

基金知识每日一学(基金知识干货)

需求分析

我们在天天基金网等网站,可以输入基金代码,查看基金历史数据:

基金知识每日一学(基金知识干货)

假设我想用代码获得的就是每只基金过去一段时间每天的涨跌幅和净值:

基金知识每日一学(基金知识干货)

该从哪里分析入手呢?我们用编程的方式实现需求,无非就是想通过代码来帮助我们完成本来需要人工操作才能完成的动作。那么首先就要明确,当我们人工操作的时候,背后发生了什么事情?

我们使用 Chrome 浏览器随便打开一个基金的历史数据页面,然后使用快捷键 F12 开启 Chrome 的开发者工具。切换到 network 选项卡。我们在页面点击 2 进行翻页,查看这个基金下一页的历史数据。可以预见到,点击这个按钮后,网页会从后台服务器发起数据请求,以渲染并显示下一页的页面。

如何找到读取基金历史数据的 API endpoint?

我们使用 Chrome 开发者工具的目的,就是观察出网页发送往后台服务器的 API 请求的 url,然后编写代码,调用这个 url,就能在我们的代码里获取到同样的数据了。

基金知识每日一学(基金知识干货)

每当浏览器里有 API 请求通过 HTTP 发送到后台服务器时,这些请求都能在 Chrome 开发者工具 network 标签页里被观察到。我们点击 2 页面时,网页端需要从后台服务器请求第二页的数据,这个请求的 url 在 network 里显示得很清楚了:

基金知识每日一学(基金知识干货)

我们把这个 url 复制下来:

http://api.fund.eastmoney.com/f10/lsjz?callback=jQuery18309641173802216549_1669605580528&fundCode=007745&pageIndex=2&pageSize=20&startDate=&endDate=&_=1669607599676

可以分析 url 里面的参数。callback=jQuery18309641173802216549_1669605580528 这一段是用于前端网页渲染的 jQuery 回调信息,而我们的目的是编写代码直接调用 API,而不考虑前端渲染,因此可以忽略这个参数。

  • fundCode=007745,这个很清楚,fundCode 意思是基金代码,等号后面就是基金的6 位代码。
  • pageIndex=2,意思是告诉服务器,我要读取第二页数据。
  • pageSize=20,分页大小,意思是每一页即每一次 API 请求,返回基金 20 天内的历史数据。

这个 url 在我们程序员编程领域,有个专门术语叫做 API endpoint.

把 url 粘贴到浏览器地址栏里,回车,可以看到下面的输出:

https://fundf10.eastmoney.com/F10DataApi.aspx?type=lsjz&code=007745&page=1&edate=2099-02-17

其中红线描绘出的矩形框里就是 API 在服务器端执行并返回给浏览器的数据,也正是我们期望写代码获取的内容。

基金知识每日一学(基金知识干货)

而 records 662 意思就是这个基金总共有 662 天的历史数据,总共分成 67 页显示,每页默认显示10条数据。

如何创建基金历史数据的抽象模型?

现在我们可以开始编写代码了。所谓编程,第一步就是用代码创建模型来描述现实生活中的业务实体。

比如一只基金,每天显示在网站上的历史数据,无非就是日期,累计净值,单位净值,当天的涨跌率这 4 个字段,因为我选择了使用 Node.js 来编程,所以首先创建一个 JavaScript 函数,名叫 ValuePerDay. 那么我每次用 new ValuePErtDay 新建一个实例,这个实例就用来描述某基金某一天的详细数据。

基金知识每日一学(基金知识干货)

有了基金数据模型后,接下来我们需要使用代码向后台服务器,基于找到的 url 发起对应的 HTTP 请求,读取基金历史数据。

如何使用代码读取基金历史数据?

因为是 Node.js,本老汉选择了 request 这个工具库。

定义一个名叫 sendRequest 的函数,方便其他模块重用。输入参数为 sRequestUrl 即前文分析的 API endpoint.

我们新建一个 Promise 对象,将发送 API 这个异步操作封装到 Promise 的实体内,使用 request 工具库发送请求,并将 response 通过 Promise 实体内参数 resolve 传递给调用者。

sendRequest 完成实现如下图所示:

基金知识每日一学(基金知识干货)

我们在创建一个名叫 getRawDataWithHTMLFormatPerPage 的函数,这个函数接收两个输入参数,分别是基金历史数据的页码数和基金代码。在函数实现体内,根据前文介绍的逻辑,将传递进来的页面数和基金代码拼凑成完整的 API endpoint,然后将这个拼凑好的 endpoint 即存储在下图 urlForPageRequest 的变量传递到我们之前编写的 sendRequest 模块里。

如何解析通过 API 读取回来的基金历史数据?

基金读取 API 返回的是一个 HTML 格式的字符串,我们感兴趣的基金历史数据就包含在这个 HTML 字符串里,我们需要用代码将其解析出来,将结果存储到一个 JavaScript 数组 aResultPage 里。这个解析逻辑,就实现在下图第 10 行的 parsePerDayDataFromHTMLResponse 里。

基金知识每日一学(基金知识干货)

API response 解析逻辑实现如下。首先代码第 1 行,我导入了 jsdom 工具库,从而让我能够在 Node.js 运行环境里,像浏览器环境里一样访问 document API 来解析 HTML 格式的字符串数据。

基金知识每日一学(基金知识干货)

有了 JSDOM 之后,我在代码第 26 行将 HTML 响应字符串传递到其构造函数内,就可以通过 window.document.body 访问到 DOM 数据结构了,接下来没什么技术含量,找到 td 节点,把里面的基金数据读取出来,通过构造 ValuePerDay 实例对象,将数据存储到 aResultPerPage 输出数组就行了。

基金知识每日一学(基金知识干货)

如何编写测试代码

最后我们来写一段测试代码测试。假设我们想批量读取两只基金的历史数据,那么就在一个 for 循环里,依次调用我们写好的 getRawDataWithHTMLFormatPerPage,这些历史数据包含在 then 指定的回调函数的输入参数 data 里,我们通过 console.log 打印出来,结果如下:

基金知识每日一学(基金知识干货)

本老汉后续文章,会简单介绍,如何把这些打印在控制台的基金历史数据,输出到 HTML 页面里便于分析,感谢大家的阅读。

基金知识每日一学(基金知识干货)

免责声明: 文章源于会员发布,不作为任何投资建议

如有侵权请联系我们删除,本文链接:https://www.vrvkongtiao.com/baike/22701.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
币讯财经币讯财经
上一篇 2022年12月15日 下午1:48
下一篇 2022年12月15日

相关推荐

  • lgnore中文意思(ignore中文意思)

    疼痛是人的本能,有了痛觉,我们才能更好地管理自己的身体。 在描述疼痛上,中文较于英文更“user-friendly”。咱们中国人描述疼痛无非就是“疼”字或“痛”字,比如: 牙疼(痛);头疼(痛);肚子疼(痛)。 “疼”和“痛”可以替换,没啥区别,学习起来也比较方便。但是在英文中,描述“疼痛”就有很多不同的词了,最常见的有以下四个词: pain、ache、hu…

    2023年4月8日
    298
  • 怎么在电脑上下载微信(怎么在电脑上下载微信)

    IT之家 9 月 23 日消息,近期,微信 Windows PC 内测版迎来 3.8.0 版本,不过目前仅限内测群白名单申请用户。支持提取翻译图片文字,转发消息可预览,批量管理收藏内容等。 下面是微信 3.8.0 版本新增功能 – 可以提取和翻译图片中的文字内容; – 邀请人进群时可以分享群里的聊天记录; – 群管理者可以…

    2023年4月6日
    200
  • 挣钱平台软件(赚钱软件平台)

    几年前,趣头条刚兴起的时候,有人推荐我玩,说能挣钱,拉人或者刷文章都有钱,我看着同事每天扒瞎的刷,眼睛都刷痛死了,每天就几毛钱,那时候我开始月工资上涨,所以压根不感兴趣,觉得浪费时间,还不如刷电视剧打发时间。 疫情的持续发展加上行业的改革,最后老板转让了,去年我失业了。持续失业1个月左右,我开始焦虑,三个多月后,我终于找到了一份工作,也就是在这份工作中,我重…

    百科大全 2022年12月15日
    186
  • 电脑怎么打字切换中文(台式电脑怎么打字切换中文)

    输入文字——计算机键盘的操作 一、键盘的布局 键盘是计算机中最基本的输入设备,最常见的键盘布局如图所示。按照功能不同,可以将键盘分为4 个键区,分别是主键盘区、编辑键区、功能键区和数字键区。 1.主键盘区 主键盘区又称标准打字区,由26 个英文字母键、0~9 十个数字键、“ `、~、!、@”等符号键、空格键和若干控制功能键组成。 其中,各控制功能键的功能如下…

    2023年4月4日
    278
  • 植物大战僵尸植物介绍(植物大战僵尸花园战争2)

    植物大战僵尸游戏内的僵尸种类达数十种,每种有自己独特的技能,: 普通僵尸、旗帜僵尸、路障僵尸、撑杆僵尸、铁桶僵尸、读报僵尸、铁栅门僵尸、橄榄球僵尸、舞王僵尸、伴舞僵尸、鸭子救生圈僵尸、潜水僵尸、雪橇车僵尸、雪橇僵尸小队、海豚骑士僵尸、玩偶匣僵尸、气球僵尸、矿工僵尸、蹦蹦僵尸、雪人僵尸、飞贼僵尸、梯子僵尸、投石车僵尸、伽刚特尔、小鬼僵尸、僵尸博士、红眼伽刚特尔…

    2023年4月3日
    267

联系我们

dudu818907@gmail.com

在线咨询: QQ交谈

邮件:dudu818907@gmail.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信