原有基金怎么导入天天基金 (天天基金网自选基金怎样保存)

这个系列之前的文章:

  • 使用某基金网站的API查询基金净值的历史数据
  • 如何使用程序将某基金的历史净值导入到本地进行分析

前一篇文章,我们已经把天天基金网上某基金的历史净值,全部通过分页API调用的方式,*载下**到了本地:

天天基金怎么查看当天净值,如何导出天天基金净值

用分号分隔的四个字段,分别是:

  • 历史日期
  • 当天的基金单位净值
  • 当天的基金累积净值
  • 当天的涨/跌幅

每个text文件存储了一页的API调用结果。

为了便于下一步的统计,我用nodejs,将这些小text文件合并成一个大的text文件。

这个逻辑位于函数mergeFiles里。首先调用fs.readdirSync,采用同步读取的方式,将data文件夹下所有的文件名读取出来,存储在数组subs里,然后遍历这个数组,将每个text文件的内容全部读取出来,存放在变量sWholeContent里。这些文件内容以换行符\n分隔,因此,我在parseFileContent函数里,首先利用\n将每行的内容拆开:

天天基金怎么查看当天净值,如何导出天天基金净值

然后再利用";"作为分隔符,读出当天的基金净值历史数据:

天天基金怎么查看当天净值,如何导出天天基金净值

最后合并而成的单一text文件如下图所示:

天天基金怎么查看当天净值,如何导出天天基金净值

完整代码如下:

const fs = require('fs');
var ValuePerDay = require("../model/ValuePerDay.js");
var fileWriteTool = require("./fileWriteTool.js");

/*
return: an array containing fund value data
*/
function mergeFiles(sFundCode){
	let pwd = process.cwd() + "/data";
	let sMergedFilePath = pwd + "/" + sFundCode + ".txt";
	let aResult = [];
	let subs = fs.readdirSync(pwd);
	// we don't need to sort explicitly, as readdirSync
	// use the same order in file system
	for( var i = 0; i < subs.length; i++){
		let sFilePath = pwd + "/" + subs[i];
		let sWholeContent = fs.readFileSync(sFilePath,'utf-8');
		aResult.push(parseFileContent(sWholeContent));
	}
	fileWriteTool(aResult,sMergedFilePath);
}

function parseFileContent(sContent){
	const aLines = sContent.split("\n");
	for( var i = 0; i < aLines.length; i++){
		const aFundValue = aLines[i].split(";");
		const oFundValue = new ValuePerDay(aFundValue[0],
			aFundValue[1], aFundValue[2], 
			formatRate(aFundValue[3]));
		return oFundValue;
	}
}

function formatRate(sRaw){
	if( sRaw === ""){
		return 0;
	}
	return parseFloat(sRaw.replace("%", ""));
}

module.exports = mergeFiles;