//初期化
 public StockDataControl()
 {
     //分割・併合Context
     bunkatuCon = new GetBunkatuContext().GetContext();
     //株価Context
     yahooCon = new YahooFinanceDbContext();
 }
예제 #2
0
        static public SortableBindingList <ViewItem> TradeIndexsWhereCode(int code)
        {
            var yahooCon = new YahooFinanceDbContext();
            var result   = new SortableBindingList <ViewItem>();

            foreach (var tradeIndex in yahooCon.TradeIndexs.Where(x => x.code == code))
            {
                result.Add
                (
                    ToViewItem(tradeIndex)
                );
            }
            return(result);
        }
예제 #3
0
        static public SortableBindingList <ViewItem> TradeIndexsWhereDatetime(DateTime datetime)
        {
            var yahooCon = new YahooFinanceDbContext();
            var result   = new SortableBindingList <ViewItem>();

            foreach (var tradeIndex in yahooCon.TradeIndexs.Where(x => x.date == datetime.Date))
            {
                result.Add
                (
                    ToViewItem(tradeIndex)
                );
            }
            return(result);
        }
예제 #4
0
 public YahooFinanceToGUIViewItem()
 {
     _yahooFinanceDbContext = new YahooFinanceDbContext();
     _guiViewItems          = new SortableBindingList <GUIViewItem>();
     _codeTradeIndexDic     = new Dictionary <int, List <TradeIndex> >();
 }
        static void Main(string[] args)
        {
            var con      = new YahooFinanceDbContext();    //時価総額取得用のDBクラス
            var tweetCon = new TwitterCon();               //ツイッター操作クラス
            var kaiziCon = new KabutanPostgreSQLContext(); //開示用PostgreSQL操作クラス
            IEnumerable <KaiziItem> kaiziItems;            //開示内容保存用List
            string latestPdfURL = kaiziCon.LatestPDFURL(); //最もDatetimeが新しいPDFのURL(同時刻の場合は主キーIDが最新のもの優先)

            int  kabutanMaxPage = 99;                      //株探適時開示MAXページ数
            bool pageBreakFlag  = true;

            while (true)
            {
                //trueならツイート&DB登録を続ける
                pageBreakFlag = true;
                //最新PDFURL又は指定ページ数に到達するまで適時開示のツイート&DB登録
                for (int page = 1; page <= kabutanMaxPage && pageBreakFlag; page++)
                {
                    //株探適時開示ページ取得
                    kaiziItems = KaiziClient.WebDownloadKaiziItems(page);
                    //株探ツイート+DB操作
                    foreach (var kaiziItem in kaiziItems)
                    {
                        //通知済の時点でツイートとDB登録をしない
                        //(ツイートはしないけどDBだけ登録処理書くかも それは別プログラム?)
                        if (kaiziItem.PDFURL == latestPdfURL)
                        {
                            //DB登録&ツイート終了
                            pageBreakFlag = false;
                            break;
                        }
                        //最新の時価総額取得
                        var  capTradeIndex = con.TradeIndexs.Where(x => x.code == kaiziItem.Code).OrderByDescending(x => x.date).FirstOrDefault();
                        long latestMarketCapitalization = 0;
                        if (capTradeIndex == null)
                        {
                            latestMarketCapitalization = 0;
                        }
                        else
                        {
                            latestMarketCapitalization = capTradeIndex.marketCapitalization;
                        }
                        //DB登録
                        if (kaiziCon.IsDuplicatePDFURL(kaiziItem.PDFURL) == false)
                        {
                            kaiziCon.KaiziItems.Add(kaiziItem);
                        }
                        //ツイート関連
                        string strMarketCap = "-";
                        //0除算エラー回避
                        if (latestMarketCapitalization != 0)
                        {
                            strMarketCap = string.Format($"{latestMarketCapitalization / 100000000.0:0.00}");
                        }
                        var tweetText = string.Format($"{kaiziItem.Code} {kaiziItem.Name} {strMarketCap}億\r\n{kaiziItem.Title}");
                        tweetCon.Tweet(tweetText, kaiziItem.PDFURL);
                        Console.WriteLine($"{DateTime.Now} Tweet" + tweetText + "\r\n" + kaiziItem.PDFURL);
                    }
                    //規制対策
                    Thread.Sleep(500);
                }
                //適時開示DB更新
                kaiziCon.SaveChanges();
                //最新通知済開示内容を記録
                latestPdfURL = kaiziCon.LatestPDFURL();       //最もDatetimeが新しいPDFのURL(同時刻の場合は主キーIDが最新のもの優先
                Thread.Sleep(10000);
            }
        }
 public StockExchangeRepository(YahooFinanceDbContext context)
 {
     _context = context;
 }