public async void addHistory(string liveId) { //番組情報取得API var nicoLiveProgramInfo = new NicoLiveProgramInfo(); var result = await nicoLiveProgramInfo.getProgramInfo(liveId); //履歴機能 if (Properties.Settings.Default.program_history != "") { //追加 var historyList = Properties.Settings.Default.program_history; var historyJSONArray = JsonConvert.DeserializeObject <List <ProgramHistoryListViewData> >(historyList); historyJSONArray.Insert(0, new ProgramHistoryListViewData { Content = result.data.title, LiveId = liveId, BeginAt = result.data.beginAt, webSiteName = "ニコニコ生放送" }); //JSON配列に変換 Properties.Settings.Default.program_history = JsonConvert.SerializeObject(historyJSONArray); } else { //初めての履歴/// var historyJSONArray = JsonConvert.DeserializeObject <List <ProgramHistoryListViewData> >("[]"); historyJSONArray.Insert(0, new ProgramHistoryListViewData { Content = result.data.title, LiveId = liveId, BeginAt = result.data.beginAt, webSiteName = "ニコニコ生放送" }); //JSON配列に変換 Properties.Settings.Default.program_history = JsonConvert.SerializeObject(historyJSONArray); } Properties.Settings.Default.Save(); loadHisotry(); }
private async void AddAdmissionDialog_SecondaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args) { var id = AddAdmissionDialogProgramID.Text; //予約枠自動入場 手動追加 APIで自動取得 押したとき //APIを叩く(https://live2.nicovideo.jp/watch/{LiveID}/programinfo) var nicoProgramInfo = new NicoLiveProgramInfo(); var json = await nicoProgramInfo.getProgramInfo(id); if (json != null) { //予約枠? if (json.data.status == "reserved") { AddAdmissionDialogProgramTitle.Text = json.data.title; //UnixTime->DateTime var dateTime = DateTimeOffset.FromUnixTimeSeconds(json.data.beginAt).LocalDateTime; //TimeSpan作ってTimePickerに反映させる var timeSpan = new TimeSpan(dateTime.Hour, dateTime.Minute, 0); //適用 AddAdmissionDialogDatePicker.Date = dateTime; AddAdmissionDialogTimePicker.Time = timeSpan; //何故か消えるので再表示 await AddAdmissionDialog.ShowAsync(); } else { //予約枠以外は追加できないようにする ContentDialog errorDiaog = new ContentDialog { Title = "予約枠以外は利用できません。", CloseButtonText = "閉じる" }; await errorDiaog.ShowAsync(); } } }
public void connectFilterStream(MainWindow page) { //ログイン情報取得 if (Properties.Settings.Default.consumer_key != "") { //スレッド止める時に使うらしい。 tokenSource = new CancellationTokenSource(); cancelToken = tokenSource.Token; var consumer_key = Properties.Settings.Default.consumer_key; var consumer_secret = Properties.Settings.Default.consumer_secret; var access_token = Properties.Settings.Default.access_token; var access_token_secret = Properties.Settings.Default.access_token_secret; var twitter = CoreTweet.Tokens.Create(consumer_key, consumer_secret, access_token, access_token_secret); //ID取得 var account_list = Properties.Settings.Default.account_list; var accountJSONArray = JsonConvert.DeserializeObject <List <NicoFavListJSON> >(account_list); List <long> ids = new List <long>(); foreach (var id in accountJSONArray) { ids.Add(long.Parse(id.ID)); } //FilterStreamの検証用。 //ids = getTakusan23Followers(); //FilterStream Task task = new Task(async() => { try { Console.WriteLine("接続を開始"); var stream = twitter.Streaming.Filter(follow: ids).OfType <StatusMessage>().Select(x => x.Status); foreach (var tw in stream) { //キャンセルされてるか if (!cancelToken.IsCancellationRequested) { //キャンセルされていないときは続ける //本人以外(RTなんかも拾ってしまう)のツイートには反応しない if (ids.Contains(tw.User.Id ?? 0)) { /* * Debug.WriteLine("-------------------"); * Debug.WriteLine(tw.User.Name); * Debug.WriteLine(tw.Text); * Debug.WriteLine("-------------------"); */ //他の配信サイトでも利用できる配信サイトを読み込む otherLive.loadOtherLiveURL(); otherLive.loadOtherLiveClient(); await page.Dispatcher.BeginInvoke((Action)(async() => { //UIスレッドで動く //番組をブラウザで開いたかチェック var opend = false; //レスポンスのEntitiesにニコ生のURLがあるかも? var entities = tw.Entities.Urls; foreach (var url in entities) { if (!string.IsNullOrEmpty(findProgramId(url.ExpandedUrl))) { //ニコ生の場合は番組IDを正規表現で取り出す //生主が予約枠の宣伝ツイートをしたときは予約枠自動入場に追加する。 //でもAPIを叩いて結果を待ってるのは遅いのでとりあえず無条件でブラウザ起動します。回線弱者 lunchBrowser(findProgramId(url.ExpandedUrl)); showNotification(tw); setMicrosoftTimeline(tw); //API叩く。 var result = await nicoLiveProgramInfo.getProgramInfo(findProgramId(url.ExpandedUrl)); if (result.data.status == "reserved") { //設定で切り替えるようにする。 if (Properties.Settings.Default.setting_filterstream_addadmission == "" || Boolean.Parse(Properties.Settings.Default.setting_filterstream_addadmission) == true) { //初期状態ではtrueなので。 //予約枠だあ! autoAdmissionList.addAdmission(result.data.title, findProgramId(url.ExpandedUrl), result.data.beginAt, false); //通知 page.NotifyIcon.ShowBalloonTip("予約枠のツイートを見つけました。予約枠自動入場に追加します。", tw.Text, Hardcodet.Wpf.TaskbarNotification.BalloonIcon.None); } } else { //番組開始ツイートだあ! //履歴追加 programHistory.addHistory(findProgramId(url.ExpandedUrl)); opend = true; //通知 page.NotifyIcon.ShowBalloonTip("番組が開始しました。入場します!", tw.Text, Hardcodet.Wpf.TaskbarNotification.BalloonIcon.None); } } else { if (Properties.Settings.Default.setting_otherlive_mode != "") { //他の配信サイトでも有効の場合はここ if (Boolean.Parse(Properties.Settings.Default.setting_otherlive_mode)) { //ニコ生以外はこっちに来る。 //URLで探す。 foreach (var i in otherLive.urlList) { //forEachで回す if (url.ExpandedUrl.Contains(i)) { //あった! opend = true; //開く launchBrowserOtherLive(url.ExpandedUrl); //履歴追加 programHistory.addOtherLiveHistory(tw, url.ExpandedUrl); //通知 page.NotifyIcon.ShowBalloonTip("番組が開始しました。入場します!", tw.Text, Hardcodet.Wpf.TaskbarNotification.BalloonIcon.None); } } //もし無かったとき if (opend == false) { //クライアント名で探す foreach (var i in otherLive.clientList) { //forEachで回す if (tw.Source.Contains(i)) { //あった! opend = true; launchBrowserOtherLive(url.ExpandedUrl); //履歴追加 programHistory.addOtherLiveHistory(tw, url.ExpandedUrl); //通知 page.NotifyIcon.ShowBalloonTip("番組が開始しました。入場します!", tw.Text, Hardcodet.Wpf.TaskbarNotification.BalloonIcon.None); } } } } } } } if (opend == false) { //上のEntities.urls[]で取れるはずだけど番組IDだけとかでも動くように //ここはニコ生だけ。 if (!string.IsNullOrEmpty(findProgramId(tw.Text))) { //生主が予約枠の宣伝ツイートをしたときは予約枠自動入場に追加する。 //でもAPIを叩いて結果を待ってるのは遅いのでとりあえず無条件でブラウザ起動します。回線弱者 lunchBrowser(findProgramId(tw.Text)); showNotification(tw); setMicrosoftTimeline(tw); //API叩く。 var result = await nicoLiveProgramInfo.getProgramInfo(findProgramId(tw.Text)); if (result.data.status == "reserved") { //予約枠だあ! autoAdmissionList.addAdmission(result.data.title, findProgramId(tw.Text), result.data.beginAt, false); } else { //番組開始ツイートだあ! //履歴追加 programHistory.addHistory(findProgramId(tw.Text)); opend = true; //通知 page.NotifyIcon.ShowBalloonTip("番組が開始しました。入場します!", tw.Text, Hardcodet.Wpf.TaskbarNotification.BalloonIcon.None); } } } })); } } else { //キャンセルされたので終了 return; } } } catch (TwitterException e) { await page.Dispatcher.BeginInvoke((Action)(() => { //ダイアログ System.Windows.Forms.MessageBox.Show("リアルタイム更新を有効にできませんでした。\nTwitter APIの制限にかかった可能性があります。少し待ってみて下さい。", "エラー"); })); } }, cancelToken); task.Start(); } else { //ログインしてね showLoginMessage(); } }