Exemple #1
0
            //流速を求める処理
            private int getFlowSpeed(PrepareState ps)
            {
                //初期化
                SearchResult   result       = null;
                DateTimeOffset oldTimeStamp = new DateTimeOffset();

                try
                {
                    //検索実行
                    result = ps.getTokens().Search.Tweets(count => (int)ps.getTweetNum(), q => ps.getKeyword());

                    //末尾ツイートの時刻を取得
                    oldTimeStamp = getTimeStamp(result, ps);
                }
                catch (Exception)
                {
                    //取得件数が0件の場合は-1を返す
                    return(-1);
                }

                //末尾ツイートのUNIXタイムを取得
                long unixTimeEnd = getUnixTimeEnd(oldTimeStamp);

                //現在のUNIXタイムを取得
                long unixTimeNow = getUnixTimeNow();

                //現在時刻と古いツイートの時刻の差分を求める
                long sec = unixTimeNow - unixTimeEnd;

                //流速計算(30分または1時間あたり)
                double flow = (ps.getTweetNum() / (double)sec) * ps.getPeriod();

                //流速を返す
                return((int)flow);
            }
Exemple #2
0
            //表示するメッセージ内容の作成処理
            private StringBuilder createDispMsg(PrepareState ps, int flowSpeed)
            {
                StringBuilder sb = new StringBuilder();

                sb.Append("\"");
                sb.Append(ps.getKeyword());
                sb.Append("\"の流速が閾値を超過。\n流速: ");
                sb.Append(flowSpeed);
                sb.Append(" tweet/hour\n");
                sb.Append("取得率: ");
                sb.Append(ps.getPercentage());
                sb.Append("%");

                return(sb);
            }
Exemple #3
0
            //常駐時のSleepと流速計測および出力を行う
            private void intervalCheck()
            {
                //キーワード別のインスタンス配列を作成
                PrepareState[] psAr = new PrepareState[5];
                for (int i = 0; i < 5; i++)
                {
                    psAr[i] = new PrepareState(i);
                }

                //手動終了されるまで繰り返し
                while (true)
                {
                    //sleepはミリ秒指定なので1000で乗算
                    System.Threading.Thread.Sleep(FlowCheckTest.Properties.Settings.Default.SleepTime * 1000);

                    //インスタンス4つを順番に渡して実行する
                    for (int i = 0; i < psAr.Length; i++)
                    {
                        //流速を取得
                        int flowSpeed = getFlowSpeed(psAr[i]);

                        //流速が閾値を超えたらタスクトレイから出力
                        if (flowSpeed >= psAr[i].getThreshold())
                        {
                            dispNotify(createDispMsg(psAr[i], flowSpeed));
                        }
                        //流速が-1ならエラー表示
                        else if (flowSpeed == -1)
                        {
                            dispError();
                        }

                        //1ループごとに1分間のSleepを行う
                        System.Threading.Thread.Sleep(60 * 1000);
                    }
                }
            }
Exemple #4
0
            DateTimeOffset getTimeStamp(SearchResult result, PrepareState ps)
            {
                //謎の初期化
                DateTimeOffset oldTweetTimeStamp = new DateTimeOffset();
                int            tweetCnt          = 0;

                //ツイートだけ時刻を取得(取得漏れを考慮して最後尾は取得しない)
                foreach (var tweet in result)
                {
                    oldTweetTimeStamp = tweet.CreatedAt;
                    tweetCnt++;
                }

                //ツイート取得率算出のため、ツイート数をインスタンスへセット
                ps.calcPercentage(tweetCnt, (int)ps.getTweetNum());

                //1件もツイートが取得できなかった場合、Exceptionを投げる
                if (tweetCnt == 0)
                {
                    throw new Exception();
                }

                return(oldTweetTimeStamp);
            }