
quant.fans.provider.FinanceDataProvider Maven / Gradle / Ivy
The newest version!
package quant.fans.provider;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.joda.time.DateTime;
import quant.fans.common.DateRange;
import quant.fans.common.Utils;
import quant.fans.downloader.Downloader;
import quant.fans.model.StockData;
import java.util.List;
import java.util.Map;
/**
* author: eryk
* mail: [email protected]
* date: 15-8-30.
* 财务报表数据
*/
public class FinanceDataProvider {
//主要财务指标
private static String mainFinanceReport = "http://quotes.money.163.com/service/zycwzb_%s.html?type=report";
//盈利能力
private static String profitReport = "http://quotes.money.163.com/service/zycwzb_%s.html?type=report&part=ylnl";
//偿还能力
private static String debtReport = "http://quotes.money.163.com/service/zycwzb_%s.html?type=report&part=chnl";
//成长能力
private static String growReport = "http://quotes.money.163.com/service/zycwzb_%s.html?type=report&part=cznl";
//营运能力
private static String operateReport = "http://quotes.money.163.com/service/zycwzb_%s.html?type=report&part=yynl";
//财务报表摘要
private static String abstractFinanceReport = "http://quotes.money.163.com/service/cwbbzy_%s.html";
public static List get(String symbol, String startDate, String stopDate) {
Map> reports = collect(symbol);
List puts = Lists.newLinkedList();
for(Map.Entry> entry:reports.entrySet()){
StockData stockData = new StockData(symbol);
stockData.date = Utils.str2Date(entry.getKey(), "yyyy-MM-dd");
if(Utils.isInRange(stockData.date,startDate,stopDate)){
for(Map.Entry kv:entry.getValue().entrySet()){
if(Utils.isDouble(kv.getValue())){
stockData.put(kv.getKey(),Double.parseDouble(kv.getValue()));
}else{
stockData.put(kv.getKey(),Double.MIN_VALUE);
}
}
puts.add(stockData);
}
}
return puts;
}
public static List getYear(String symbol){
DateRange range = DateRange.getRange(365*20);
List stockDataList = get(symbol,range.start(),range.stop());
List stockDataYearList = Lists.newArrayList();
for(StockData stockData:stockDataList){
DateTime time = new DateTime(stockData.date);
if(time.getMonthOfYear()==12){
stockDataYearList.add(stockData);
}
}
return stockDataYearList;
}
private static Map> collect(String symbol) {
Map> report = Maps.newTreeMap();
String[] lines = Downloader.download(String.format(mainFinanceReport, symbol)).split("\n");
toReport(lines, report);
lines = Downloader.download(String.format(profitReport, symbol)).split("\n");
toReport(lines, report);
lines = Downloader.download(String.format(debtReport, symbol)).split("\n");
toReport(lines, report);
lines = Downloader.download(String.format(growReport, symbol)).split("\n");
toReport(lines, report);
lines = Downloader.download(String.format(operateReport, symbol)).split("\n");
toReport(lines, report);
lines = Downloader.download(String.format(abstractFinanceReport, symbol)).split("\n");
toReport(lines, report);
return report;
}
private static void toReport(String[] lines, Map> report) {
if(lines.length<=1){
return;
}
List columns = Lists.newArrayList();
for(int i=0;i maps = Maps.newTreeMap();
//行
for(int j=1;j
© 2015 - 2025 Weber Informatics LLC | Privacy Policy