/// <summary> /// 登録されているデータの公開フラグと実績値を更新 /// </summary> /// <param name="myData"></param> /// <param name="webData"></param> /// <returns></returns> public IndexCalendar MergeMyDataToNowData(IndexCalendar myData, IndexCalendar webData) { IndexCalendar result = myData; result.Processed = webData.Processed; result.ActualValue = webData.ActualValue; return(result); }
public void Run(string[] guidList) { try { List <IndexCalendar> indexCalendarList = new List <IndexCalendar>(); DateTime afterFiveMinutes = DateTime.Now.AddMinutes(5); //必要な指標が全て揃うか5分経つまでデータを取得し続ける while (true) { for (int i = 0; i <= guidList.Length - 1; i++) { if (!indexCalendarList.Any(x => x.GuidKey == Guid.Parse(guidList[i]))) { var task = Logic.IndexCalendar.GetMql5JsonAsync(); task.Wait(); IndexCalendar myData = Logic.IndexCalendar.GetMyIndexData(guidList[i]); IndexCalendar webData = Logic.IndexCalendar.ResponseBodyToEntityModel(task.Result, myData.IdKey); if (webData == null) { continue; } IndexCalendar indexData = Logic.IndexCalendar.MergeMyDataToNowData(myData, webData); indexCalendarList.Add(indexData); } } if (indexCalendarList.Count == guidList.Length || afterFiveMinutes <= DateTime.Now) { break; } //リクエストを投げ続けないために30秒待機 Thread.Sleep(300000); } if (indexCalendarList.Count > 0) { Logic.BeginTransaction(); Logic.IndexCalendar.RegisteredIndexData(indexCalendarList); //Twitterに投稿 var tokens = Tokens.Create(Define.Tweeter.ConsumerKey, Define.Tweeter.ConsumerSecret, Define.Tweeter.AccessToken, Define.Tweeter.AccessSecret); for (int i = 0; i < indexCalendarList.Count; i++) { string tweetText = "[" + indexCalendarList[i].CurrencyCode + "]" + indexCalendarList[i].EventName + "\r\n今回値→[" + indexCalendarList[i].ActualValue + "]\r\n予想 →[" + indexCalendarList[i].ForecastValue + "]\r\n前回値→[" + indexCalendarList[i].PreviousValue + "]"; tokens.Statuses.Update(status => tweetText); } Logic.Commit(); } } catch (Exception e) { Logic.Rollback(); Log.Logger.Error(e.Message); Log.Logger.Error(e.StackTrace); if (e.InnerException != null) { Log.Logger.Error(e.InnerException.Message); Log.Logger.Error(e.InnerException.StackTrace); } } }