UNPKG

hqchart

Version:

stock chart

733 lines (614 loc) 21.8 kB
"use strict"; /* 微信接口的个股新闻 */ function JSNewsResource() { this.Domain = "https://opensource.zealink.com"; //API域名 this.CacheDomain = "https://opensourcecache.zealink.com"; //缓存域名 } var g_JSNewsResource = new JSNewsResource(); function JSNews() {} JSNews.SetDomain = function (domain, cacheDomain) { if (domain) g_JSNewsResource.Domain = domain; if (cacheDomain) g_JSNewsResource.CacheDomain = cacheDomain; }; //获取新闻列表 JSNews.GetNews = function (symbol, newsType) { switch (newsType) { case NEWS_TYPE.STOCK_NEWS: return new StockNews(symbol); case NEWS_TYPE.ANNOUNCEMENT_ANALYSE: return new AnnouncementAnalyse(symbol); case NEWS_TYPE.STOCK_INTERACT: return new StockInteract(symbol); case NEWS_TYPE.STOCK_NEGATIVE: return new StockNegative(symbol); case NEWS_TYPE.STOCK_REPORT: return new StockReport(symbol); } }; //获取新闻内容 JSNews.GetContent = function (id, newsType) { switch (newsType) { case NEWS_TYPE.STOCK_NEWS: return new StockNewsContent(id); } }; //新闻类型 var NEWS_TYPE = { STOCK_NEWS: 1, //个股新闻 ANNOUNCEMENT_ANALYSE: 2, //公告解读 STOCK_INTERACT: 3, //互动易 STOCK_NEGATIVE: 4, //负面新闻 STOCK_REPORT: 5 //新闻资讯基类 };function INewsBase(symbol) { this.Symbol = symbol; //股票代码 this.Name; //股票名称 this.Callback; //回调 function(info,news) info: {Start:请求的新闻起始位置 , End:新闻的结束位置 } , news 对应的 新闻类 this.Data = new Array(); //新闻数据 { Date:日期, Title:标题 , Source:来源, ID:新闻ID} this.Count; //一共的新闻个数 this.CacheCount; //已下载的新闻个数 this.PageSize = 10; //每页的新闻个数 this.ApiUrl; //数据请求地址 this.StartDate; //开始时间 this.EndDate; //结束时间 //设置默认的查询区间 this.SetDefautQueryDate = function () { // 取最近1年的数据 var date = new Date(); this.StartDate = (date.getFullYear() - 1) * 10000 + (date.getMonth() + 1) * 100 + date.getDate(); this.EndDate = date.getFullYear() * 10000 + (date.getMonth() + 1) * 100 + date.getDate(); }; //把查询的股票统一转化为数组 this.GetQuerySymbol = function () { var arySymbol = new Array(); if (typeof this.Symbol == 'string') arySymbol.push(this.Symbol); //单个股票 else arySymbol = this.Symbol.slice(0); return arySymbol; }; //是否是最后一页 this.IsEndPage = function () { if (this.Count == null || this.Count <= 0) return true; return this.CacheCount >= this.Count; }; //获取第1页 this.GetFirstPage = function () {}; //下拉获取下一页 this.GetNextPage = function () {}; } //新闻详情基类 function INewsContent(id) { this.ID = id; //新闻id this.Symbol; //股票代码 this.Name; //股票名称 this.ApiUrl; this.Callback; //回调 function(this) this.Data; //数据 { Symbol:代码, Name:名称, Title:标题, Content:内容, Date:日期 .....} this.Error; //如果调用失败 把错误信息写这里 this.GetContent = function () {}; } var RECV_DATA_TYPE = { NEWS_DATA: 1 //个股新闻数据 //个股新闻 };function StockNews(symbol) { this.newMethod = INewsBase; //派生 this.newMethod(symbol); delete this.newMethod; var date = new Date(); this.EndDate = date.getFullYear() * 10000 + (date.getMonth() + 1) * 100 + date.getDate(); //获取结束时间 this.StartDate = (date.getFullYear() - 1) * 10000 + (date.getMonth() + 1) * 100 + date.getDate(); this.ApiUrl = g_JSNewsResource.Domain + '/API/NewsStockList'; var self = this; //获取第1页 this.GetFirstPage = function () { //清空数据 this.Data = []; this.Count = 0; this.CacheCount = 0; $.ajax({ url: this.ApiUrl, data: { "symbol": [this.Symbol], "filed": ["name", "symbol", "releasedate", "title", "id", "source"], "querydate": { "StartDate": this.StartDate, "EndDate": this.EndDate }, "search": null, "calccount": -1, "start": 0, "end": 10, "userid": null }, method: "POST", dataType: "json", success: function success(data) { self.RecvData(data); }, error: function error(request) { this.RecvError(request); } }); }; this.RecvData = function (data) { if (this.Count <= 0) this.Count = data.count; var info = {}; info.Start = this.Data.length; info.End = this.Data.length; var list = data.list; for (var i in list) { var item = list[i]; this.Data.push({ ID: item.id, Name: item.name, Releasedate: item.releasedate, Source: item.source, Symbol: item.symbol, Title: item.title }); if (i > 0) ++info.End; } this.CacheCount = this.Data.length; this.InvokeCallback(info); //通知页面 }; this.RecvError = function (request) { console.log("[StockInteract::RecvError] ", request); }; this.InvokeCallback = function () { if (typeof this.Callback != 'function') return; var info = {}; this.Callback(info, this); }; //下拉获取下一页 this.GetNextPage = function () { var self = this; var start = this.Data.length; var end = start + this.PageSize; $.ajax({ url: this.ApiUrl, data: { "symbol": [this.Symbol], "filed": ["name", "symbol", "releasedate", "title", "id", "source"], "querydate": { "StartDate": this.StartDate, "EndDate": this.EndDate }, "search": null, "calccount": -1, "start": start, "end": end, "userid": null }, method: "POST", dataType: "json", success: function success(data) { self.RecvData(data); }, error: function error(request) { self.RecvError(request); } }); }; } //公告新闻 function StockReport(symbol) { this.newMethod = INewsBase; //派生 this.newMethod(symbol); delete this.newMethod; this.ApiUrl = g_JSNewsResource.Domain + '/API/ReportListByES'; //走公司内网查询接口 this.ReportType = []; //公告类型数组 //获取第1页 this.GetFirstPage = function () { //清空数据 this.Data = []; this.Count = 0; this.CacheCount = 0; var self = this; var arySymbol = this.GetQuerySymbol(); if (!this.StartDate || !this.EndDate) this.SetDefautQueryDate(); var reportType = null; if (this.ReportType && this.ReportType.length > 0) reportType = this.ReportType[0]; //暂时只支持1个类型 $.ajax({ url: this.ApiUrl, data: { "symbol": arySymbol, "filed": ["symbol", "name", "releasedate", "title", "id", "source"], "querydate": { "startDate": this.StartDate, "endDate": this.EndDate }, "search": null, "calccount": 1, //返回一共的数据个数 "start": 0, "end": this.PageSize, "userid": null, 'type': reportType }, method: "POST", dataType: "json", success: function success(data) { self.RecvData(data); }, error: function error(request) { self.RecvError(request); } }); }; this.RecvData = function (recvData) { var data = recvData; if (this.Count <= 0) this.Count = data.count; //一共的新闻个数 var info = {}; info.Start = this.Data.length; info.End = this.Data.length; for (var i in data.report) { var item = data.report[i]; this.Data.push({ Name: item.name, Symbol: item.symbol, ID: item.id, Data: item.releasedate.substring(0, 4) + "-" + item.releasedate.substring(4, 6) + "-" + item.releasedate.substring(6, 8), Title: item.title, Source: item.source, Type: item.type, Showurl: item.showurl }); if (i > 0) ++info.End; } this.CacheCount = this.Data.length; // this.InvokeCallback(info); this.InvokeCallback(this.Data); }; this.RecvError = function (request) { console.log("[StockReport::RecvError] ", request); }; this.InvokeCallback = function (info) { if (typeof this.Callback != 'function') return; this.Callback(info, this); }; //下拉获取下一页 this.GetNextPage = function () { var self = this; var arySymbol = this.GetQuerySymbol(); if (!this.StartDate || !this.EndDate) this.SetDefautQueryDate(); var start = this.Data.length; var end = start + this.PageSize; $.ajax({ url: this.ApiUrl, data: { "symbol": arySymbol, "filed": ["symbol", "name", "releasedate", "title", "id", "source"], "querydate": { "startDate": self.StartDate, "endDate": self.EndDate }, "search": null, "calccount": 0, //下页页不需要统计个数了 "start": start, "end": end, "userid": null }, method: "POST", dataType: "json", success: function success(data) { self.RecvData(data); }, error: function error(request) { self.RecvError(request); } }); }; } //个股公告分析 function AnnouncementAnalyse(symbol) { this.newMethod = INewsBase; //派生 this.newMethod(symbol); delete this.newMethod; this.ApiUrl = g_JSNewsResource.Domain + '/API/AnnualReportAllType'; this.Error = null; this.GetFirstPage = function () { this.Error = null; //清空错误信息 this.Data = []; this.Name = null; var self = this; var date = new Date(); // 取最近3年的数据 var start = (date.getFullYear() - 3) * 10000 + (date.getMonth() + 1) * 100 + date.getDate(); var end = date.getFullYear() * 10000 + (date.getMonth() + 1) * 100 + date.getDate(); $.ajax({ url: this.ApiUrl, data: { "symbol": this.Symbol, "querydate": { "StartDate": start, "EndDate": end } }, method: "POST", dataType: "json", success: function success(data) { self.RecvData(data); }, error: function error(request) { self.RecvError(request); } }); }; this.RecvData = function (data) { if (data.list == null) return this.InvokeCallback(); for (var i in data.list) { var item = data.list[i]; if (item == null || item.info == null || item.info.length <= 0) continue; var analyseData = { Name: item.typename, Data: new Array() }; for (var j in item.info) { var subItem = item.info[j]; analyseData.Data.push({ Date: subItem.date, Content: subItem.abstract }); if (this.Name == null) this.Name = subItem.name; } this.Data.push(analyseData); } this.InvokeCallback(); //通知页面 }; this.RecvError = function (request) { console.log('[AnnouncementAnalyse:RecvError] ', "request"); this.Error = "请求失败"; }; this.InvokeCallback = function () { if (typeof this.Callback != 'function') return; var info = {}; this.Callback(info, this); }; } //互动易 function StockInteract(symbol) { this.newMethod = INewsBase; //派生 this.newMethod(symbol); delete this.newMethod; this.ApiUrl = g_JSNewsResource.Domain + '/API/NewsInteract'; //获取第1页 this.GetFirstPage = function () { //清空数据 this.Data = []; this.Count = 0; this.CacheCount = 0; var self = this; // 取最近1年的数据 var date = new Date(); var startDate = (date.getFullYear() - 1) * 10000 + (date.getMonth() + 1) * 100 + date.getDate(); var endDate = date.getFullYear() * 10000 + (date.getMonth() + 1) * 100 + date.getDate(); $.ajax({ url: this.ApiUrl, data: { "symbol": [this.Symbol], "filed": ["symbol", "questioner", "question", "questondate", "answerer", "answer", "answerdate", "id"], "querydate": { "StartDate": startDate, "EndDate": endDate }, "search": null, "calccount": 1, //返回一共的数据个数 "start": 0, "end": this.PageSize, "userid": null }, method: "POST", dataType: "json", success: function success(data) { self.RecvData(data); }, error: function error(request) { self.RecvError(request); } }); }; this.RecvData = function (data) { if (this.Count <= 0) this.Count = data.count; //一共的新闻个数 var info = {}; info.Start = this.Data.length; info.End = this.Data.length; for (var i in data.list) { var item = data.list[i]; this.Data.push({ ID: item.id, Data: item.questondate, Title: item.question, Author: item.questioner, Data2: item.answerdate, Author2: item.answerer, Content: item.answer }); if (i > 0) ++info.End; } this.CacheCount = this.Data.length; this.InvokeCallback(info); }; this.RecvError = function (request) { console.log("[StockInteract::RecvError] ", request); }; this.InvokeCallback = function (info) { if (typeof this.Callback != 'function') return; this.Callback(info, this); }; //下拉获取下一页 this.GetNextPage = function () { var self = this; // 取最近1年的数据 var date = new Date(); var startDate = (date.getFullYear() - 1) * 10000 + (date.getMonth() + 1) * 100 + date.getDate(); var endDate = date.getFullYear() * 10000 + (date.getMonth() + 1) * 100 + date.getDate(); var start = this.Data.length; var end = start + this.PageSize; $.ajax({ url: this.ApiUrl, data: { "symbol": [this.Symbol], "filed": ["symbol", "questioner", "question", "questondate", "answerer", "answer", "answerdate", "id"], "querydate": { "StartDate": startDate, "EndDate": endDate }, "search": null, "calccount": 1, //返回一共的数据个数 "start": start, "end": end, "userid": null }, method: "POST", dataType: "json", success: function success(data) { self.RecvData(data); }, error: function error(request) { self.RecvError(request); } }); }; } //新闻详情 function StockNewsContent(id) { this.newMethod = INewsContent; //派生 this.newMethod(id); delete this.newMethod; this.ApiUrl = g_JSNewsResource.Domain + "/API/NewsStockDetail2"; this.GetContent = function () { var self = this; //清空数据 this.Name = null; this.Error = null; this.Data = null; $.ajax({ url: this.ApiUrl, data: { "userid": null, "id": this.ID, "symbol": this.Symbol, "filed": ["name", "symbol", "releasedate", "title", "id", "content", "link", "source"] }, method: "POST", dataType: "json", success: function success(data) { self.RecvData(data); }, error: function error(request) { self.RecvError(request); } }); }; this.RecvData = function (data) { var detail = data.detail; if (detail == null) return this.InvokeCallback(); //把API数据格式 转换成自己的对外的统一格式, this.Data = {}; this.Data.Date = detail.releasedate; this.Data.Content = detail.content; this.Data.Title = detail.title; this.Data.Source = detail.source; //新闻关联的其他股票列表 var relation = new Array(); for (var i in data.stocklist) { var item = data.stocklist[i]; relation.push({ Symbol: item.symbol, Name: item.name }); } this.Data.Relation = relation; this.Name = detail.name; this.InvokeCallback(); }; this.RecvError = function (reqeust) { this.Error = "请求失败"; this.InvokeCallback(); }; this.InvokeCallback = function () { if (typeof this.Callback != 'function') return; this.Callback(this); }; } //负面新闻 function StockNegative(symbol) { this.newMethod = INewsBase; //派生 this.newMethod(symbol); delete this.newMethod; this.ApiUrl = g_JSNewsResource.Domain + '/API/NewsNegative'; //获取第1页 this.GetFirstPage = function () { //清空数据 this.Data = []; this.Count = 0; this.CacheCount = 0; var self = this; var arySymbol = this.GetQuerySymbol(); if (!this.StartDate || !this.EndDate) this.SetDefautQueryDate(); $.ajax({ url: this.ApiUrl, data: { "symbol": arySymbol, "filed": ["symbol", "name", "releasedate", "title", "id", "source"], "querydate": { "StartDate": this.StartDate, "EndDate": this.EndDate }, "search": null, "calccount": 1, //返回一共的数据个数 "start": 0, "end": this.PageSize, "userid": null }, method: "POST", dataType: "json", success: function success(data) { self.RecvData(data); }, error: function error(request) { self.RecvError(request); } }); }; this.RecvData = function (data) { if (this.Count <= 0) this.Count = data.count; //一共的新闻个数 var info = {}; info.Start = this.Data.length; info.End = this.Data.length; for (var i in data.list) { var item = data.list[i]; this.Data.push({ ID: item.id, Data: item.releasedate, Title: item.title, Source: item.source }); if (i > 0) ++info.End; } this.CacheCount = this.Data.length; this.InvokeCallback(info); }; this.RecvError = function (request) { console.log("[StockInteract::RecvError] ", request); }; this.InvokeCallback = function (info) { if (typeof this.Callback != 'function') return; this.Callback(info, this); }; //下拉获取下一页 this.GetNextPage = function () { var self = this; var arySymbol = this.GetQuerySymbol(); if (!this.StartDate || !this.EndDate) this.SetDefautQueryDate(); var start = this.Data.length; var end = start + this.PageSize; $.ajax({ url: this.ApiUrl, data: { "symbol": arySymbol, "filed": ["symbol", "name", "releasedate", "title", "id", "source"], "querydate": { "StartDate": startDate, "EndDate": endDate }, "search": null, "calccount": 0, //下页页不需要统计个数了 "start": start, "end": end, "userid": null }, method: "POST", dataType: "json", success: function success(data) { self.RecvData(data); }, error: function error(request) { self.RecvError(request); } }); }; } /* 测试 var news=JSNews.GetNews('600000.sh',NEWS_TYPE.STOCK_NEWS); news.Callback=UpdateNews; news.GetFirstPage(); function UpdateNews(info,news) { //获取请求的数据位置 var start=info.Start; var end=info.End; //取新闻列表 for(var i=start;i<end && i<news.Data.length;++i) { var item =news.Data[i]; } } */