static public void newMain() { int errorSleep = 1000; int sleepTime = 1000; List <FinanceData> financeDataList = new List <FinanceData>(); for (int code = 1300; code <= 9999; code++) { try { bool pageCheck; var yahoo = new YahooFinance.YahooFinance(code, out pageCheck); if (pageCheck == false) { Console.WriteLine("{0} は存在しません。", code); System.Threading.Thread.Sleep(errorSleep); continue; } var codeList = yahoo.MakeCodeList(); //codeListが存在しない場合(現状 空ページorETF) if (codeList == null) { Console.WriteLine("{0} はETFか存在しません。", code); System.Threading.Thread.Sleep(errorSleep); continue; } //1301の日付が今日じゃない場合、飛ばす if (codeList.date != DateTime.Now.Date && codeList.code == 1301) { Console.WriteLine("今日の日付ではありません 停止します(確認待ち)"); Console.ReadLine(); return; } //ファイナンスデータを入れる FinanceData financeData = new FinanceData() { codeList = codeList }; var price = yahoo.MakePrice(codeList); if (price == null) { Console.WriteLine("{0} はPrice情報がありません", code); //ファイナンスデータを入れる financeDataList.Add(financeData); System.Threading.Thread.Sleep(errorSleep); continue; } //ファイナンスデータを入れる financeData.price = price; if (price.codeList.sector == "ETF") { Console.WriteLine("{0} はETF、tradeIndex情報がありません", code); //ファイナンスデータを入れる financeDataList.Add(financeData); System.Threading.Thread.Sleep(errorSleep); continue; } var tradeIndex = yahoo.MakeTradeIndex(price); // ETFは取得しない if (tradeIndex == null) { Console.WriteLine("{0} はtradeIndex情報がありません", code); //ファイナンスデータを入れる financeDataList.Add(financeData); System.Threading.Thread.Sleep(errorSleep); continue; } //ファイナンスデータを入れる financeData.tradeIndex = tradeIndex; //ファイナンスデータを入れる financeDataList.Add(financeData); Console.WriteLine("{0} 完了", code); System.Threading.Thread.Sleep(sleepTime); } catch (Exception e) { Console.WriteLine("10分待機 {0} に コード:{1} で {2}", DateTime.Now, code, e); System.Threading.Thread.Sleep(600000); code--; continue; } } //ここにDB登録を書く using (var db = new CodeListDbContext()) { List <CodeList> codeListList = db.CodeLists.ToList(); foreach (var finance in financeDataList) { var codeList = codeListList.Where(x => x.code == finance.codeList.code).FirstOrDefault(); if (codeList == null) { if (finance.tradeIndex != null) { db.TradeIndexs.Add(finance.tradeIndex); continue; } if (finance.price != null) { db.Prices.Add(finance.price); continue; } db.CodeLists.Add(finance.codeList); } codeList.date = finance.codeList.date; finance.price.codeList = codeList; if (finance.tradeIndex != null) { db.TradeIndexs.Add(finance.tradeIndex); continue; } if (finance.price != null) { db.Prices.Add(finance.price); continue; } db.CodeLists.Add(finance.codeList); } db.SaveChanges(); } }
static void oldMain() { int errorSleep = 1000; int sleepTime = 1000; using (var db = new CodeListDbContext()) { List <CodeList> codeListList = db.CodeLists.ToList(); List <Price> priceList = db.Prices.ToList(); List <TradeIndex> tradeIndexList = db.TradeIndexs.ToList(); for (int code = 1300; code <= 9999; code++) { try { bool pageCheck; var yahoo = new YahooFinance.YahooFinance(code, out pageCheck); if (pageCheck == false) { Console.WriteLine("{0} は存在しません。", code); System.Threading.Thread.Sleep(errorSleep); continue; } var codeList = yahoo.MakeCodeList(); //codeListが存在しない場合(現状 空ページorETF) if (codeList == null) { Console.WriteLine("{0} はETFか存在しません。", code); System.Threading.Thread.Sleep(errorSleep); continue; } //1301の日付が今日じゃない場合、飛ばす if (codeList.date != DateTime.Now.Date && codeList.code == 1301) { Console.WriteLine("今日の日付ではありません 停止します(確認待ち)"); Console.ReadLine(); return; } //コードリストが存在するか確認する CodeList dbCodeList; if (codeListCheck(codeListList, codeList)) { dbCodeList = db.CodeLists.Single(x => x.code == codeList.code); dbCodeList.name = codeList.name; dbCodeList.market = codeList.market; dbCodeList.sector = codeList.sector; dbCodeList.date = codeList.date; } else { db.CodeLists.Add(codeList); dbCodeList = codeList; } //CodeList更新 db.SaveChanges(); var price = yahoo.MakePrice(dbCodeList); if (price == null) { Console.WriteLine("{0} はPrice情報がありません", code); System.Threading.Thread.Sleep(errorSleep); continue; } var updatePrice = priceCheck(priceList, price); if (updatePrice == null) { updatePrice = price; db.Prices.Add(updatePrice); } else { var tmpPrice = db.Prices.SingleOrDefault(x => x.id == updatePrice.id); tmpPrice.lastClosePrice = price.lastClosePrice; tmpPrice.closePrice = price.closePrice; tmpPrice.closePriceDate = price.closePriceDate; tmpPrice.highPrice = price.highPrice; tmpPrice.highPriceDate = price.highPriceDate; tmpPrice.limitHighPrice = price.limitHighPrice; tmpPrice.limitLowPrice = price.limitLowPrice; tmpPrice.lowPrice = price.lowPrice; tmpPrice.lowPriceDate = price.lowPriceDate; tmpPrice.openPrice = price.openPrice; tmpPrice.openPriceDate = price.openPriceDate; tmpPrice.tradingVolume = price.tradingVolume; tmpPrice.volume = price.volume; updatePrice = tmpPrice; } //Price更新 db.SaveChanges(); var tradeIndex = yahoo.MakeTradeIndex(updatePrice); // ETFは取得しない if (tradeIndex == null) { Console.WriteLine("{0} はtradeIndex情報がありません", code); System.Threading.Thread.Sleep(errorSleep); continue; } var updateTradeIndex = tradeindexCheck(tradeIndexList, tradeIndex); if (updateTradeIndex == null) { updateTradeIndex = tradeIndex; db.TradeIndexs.Add(updateTradeIndex); } else { var tmpTradeIndex = db.TradeIndexs.SingleOrDefault(x => x.id == updateTradeIndex.id); tmpTradeIndex.marginBuy = tradeIndex.marginBuy; tmpTradeIndex.marginCell = tradeIndex.marginCell; tmpTradeIndex.marketCapitalization = tradeIndex.marketCapitalization; tmpTradeIndex.minimumPrice = tradeIndex.minimumPrice; tmpTradeIndex.minimumUnit = tradeIndex.minimumUnit; tmpTradeIndex.outstandingShares = tradeIndex.outstandingShares; tmpTradeIndex.price = tradeIndex.price; tmpTradeIndex.ratioMarginBalance = tradeIndex.ratioMarginBalance; tmpTradeIndex.WoWMarginBuy = tradeIndex.WoWMarginBuy; tmpTradeIndex.WoWMarginCell = tradeIndex.WoWMarginCell; tmpTradeIndex.yearHighPrice = tradeIndex.yearHighPrice; tmpTradeIndex.yearLowPrice = tradeIndex.yearLowPrice; updateTradeIndex = tmpTradeIndex; } //TradeIndex更新 db.SaveChanges(); Console.WriteLine("{0} 完了", code); System.Threading.Thread.Sleep(sleepTime); } catch (System.Net.WebException e) { Console.WriteLine("10分待機 {0} に コード:{1} で {2}", DateTime.Now, code, e); System.Threading.Thread.Sleep(600000); code--; continue; } } } }