Beispiel #1
0
        private bool FinanceInformation(string collectionName, Func <string, bool> callback)
        {
            Console.WriteLine("{0} Collector Start : {1}", collectionName, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
            var file      = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "stocklist.json");
            var stockText = File.ReadAllText(file);
            var stockJson = JsonValue.Parse(stockText);

            foreach (var stock in stockJson)
            {
                try
                {
                    var result = new SetDataSourceReq();
                    result.rawdata      = new List <JsonDictionary>();
                    result.source       = collectionName;
                    result.category     = "종목코드";
                    result.collected_at = "날짜";

                    var code = stock.Value["code"].ReadAs <string>();
                    var name = stock.Value["name"].ReadAs <string>();
                    var type = stock.Value["type"].ReadAs <string>();
                    var cnt  = stock.Value["cnt"].ReadAs <string>();
                    var url  = "http://companyinfo.stock.naver.com/v1/company/ajax/cF1001.aspx?cmp_cd={code}&fin_typ=0&freq_typ=Y";

                    var reqParam = new RequestParameter()
                    {
                        Url            = url.Replace("{code}", code),
                        ContentType    = "text/html",
                        EncodingOption = "UTF8",
                        Method         = "GET"
                    };

                    var          htmlCode = HttpsRequest.Instance.GetResponseByHttps(reqParam);
                    HtmlDocument doc      = new HtmlDocument();
                    doc.LoadHtml(htmlCode);
                    var titleNodes = doc.DocumentNode.SelectNodes("//th[contains(@class,'bg txt title')]");
                    var dateNodes  = doc.DocumentNode.SelectNodes("//th[contains(@class,' bg')]");
                    var dataNodes  = doc.DocumentNode.SelectNodes("//td[contains(@class,'num')]");


                    for (int i = 1; i < dateNodes.Count; i++)
                    {
                        var finance = new JsonDictionary();

                        var dateNode = dateNodes[i];
                        var dateText = dateNode.InnerText.Replace("\r", "").Replace("\n", "").Replace("\t", "").Replace("&nbsp;", "");
                        if (string.IsNullOrWhiteSpace(dateText))
                        {
                            continue;
                        }
                        var dateValue = dateText.Substring(0, 7);
                        var date      = DateTime.Parse(dateValue);
                        var unixtime  = EnvironmentHelper.GetUnixTime(date) / 1000;

                        finance.Add("종목코드", code);
                        finance.Add("종목유형", type);
                        finance.Add("종목명", name);
                        finance.Add("상장주식수", cnt);
                        finance.Add("날짜", unixtime);

                        for (int j = 0; j < titleNodes.Count; j++)
                        {
                            var titleNode = titleNodes[j];
                            var dataNode  = dataNodes[j * (dateNodes.Count - 1) + (i - 1)];

                            var key   = titleNode.InnerText.Replace("\r", "").Replace("\n", "").Replace("\t", "").Replace("&nbsp;", "");
                            var value = dataNode.InnerText.Replace("\r", "").Replace("\n", "").Replace("\t", "").Replace("&nbsp;", "").Replace(",", "");

                            if (string.IsNullOrWhiteSpace(value))
                            {
                                continue;
                            }
                            finance.Add(key, value);
                        }

                        if (finance.GetDictionary().Keys.Count < 5)
                        {
                            continue;
                        }
                        result.rawdata.Add(finance);
                    }
                    if (result.rawdata.Count > 0)
                    {
                        ThreadPool.QueueUserWorkItem((a) =>
                        {
                            var setSourceQuery = MariaQueryBuilder.SetDataSource(result);
                            MariaDBConnector.Instance.SetQuery("DynamicQueryExecuter", setSourceQuery);
                        });
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Finance Collector Error");
                }
            }
            callback.DynamicInvoke("test");
            Console.WriteLine("{0} Collector End : {1}", collectionName, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
            return(true);
        }