All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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