CoreTweet.Streamingに関する文献
リンク
- C#でTwitterアプリを作る 第3回 Streaming - LINQになりたい 2014-03-25
- .NET Twitter ライブラリ「CoreTweet」 - Qiita 2014/06/30
- CoreTweetでストリーミングを処理するためのRx入門 - アジョブジ星通信 2014-08-26
- ストリーミング API を使う · CoreTweet/CoreTweet Wiki · GitHub 2014 Sep 10
作法
- Nugetパッケージ
- CoreTweet
- CoreTweet.Streaming.Reactive
- using
- CoreTweet;
- CoreTweet.Streaming;
- CoreTweet.Streaming.Reactive;
- System.Reactive.Linq;
- System.Threading.Tasks;
リンク先で提示されているサンプルソース
// using System; // using System.Reactive.Linq; // using System.Threading.Tasks; // using CoreTweet; // using CoreTweet.Streaming; // using CoreTweet.Streaming.Reactive; var stream = t.Streaming.StartObservableStream(StreamingType.User).Publish(); stream.OfType<FriendsMessage>() .Subscribe(x => Console.WriteLine("フォロー中: " + string.Join(", ", x))); stream.OfType<StatusMessage>() .Subscribe(x => Console.WriteLine("{0}: {1}", x.Status.User.ScreenName, x.Status.Text)); var disposable = stream.Connect(); await Task.Delay(30 * 1000); disposable.Dispose();ストリーミング API を使う · CoreTweet/CoreTweet Wiki · GitHub
ぼくのかんがえたそーすはえらーおちする
stream.OfType
型 'System.InvalidOperationException' の例外が WindowsBase.dll で発生しましたが、ユーザー コード内ではハンドルされませんでした
追加情報:このオブジェクトは別のスレッドに所有されているため、呼び出しスレッドはこのオブジェクトにアクセスできません。
この例外のハンドラーがある場合は、プログラムを安全に続行できます。
private void startUserStream_Click(object sender, RoutedEventArgs e) { viewTextBox.Clear(); try { var stream = tokens.Streaming.StartObservableStream(CoreTweet.Streaming.StreamingType.User).Publish(); disposable = stream.Connect(); stream.OfType<StatusMessage>().Subscribe(x => viewTextBox.AppendText( string.Format("{0}: {1}{2}" , x.Status.User.ScreenName , x.Status.Text , Environment.NewLine))); } catch (Exception ex) { viewTextBox.AppendText(ex.Message); } } private void stopUserStream_Click(object sender, RoutedEventArgs e) { try { disposable.Dispose(); } catch (Exception ex) { viewTextBox.AppendText(ex.Message); } }
後日談(2014年10月19日)
解決した.Reactive Extensionsについて学べば良かった.
- Reactive Extensions(Rx)入門 − @IT(2011/11/01)
- Rx入門 | xin9le.net
- Reactive Extensions再入門 その48「連続して発生する値の監視」 - かずきのBlog@hatena 2012-03-24
- Reactive extensions入門v0.1 Oct 24, 2012
場当たり的には,いくつかのページで共通するそれらしいコードを入れて打開できる.
.ObserveOn(SynchronizationContext.Current)Rx入門 (22) – TwitterのTimelineを表示 | xin9le.net
Sync... の所属を調べてusingに追加した.SynchronizationContext クラス (System.Threading)
using using System.Threading;
private void startUserStream_Click(object sender, RoutedEventArgs e) { viewTextBox.Clear(); try { connectable = tokens.Streaming.StartObservableStream(StreamingType.User).Publish(); connectable.OfType<StatusMessage>() .Select(m => m.Status) .ObserveOn(SynchronizationContext.Current) .Subscribe(status => viewTextBox.AppendText(string.Format("{0}: {1}{2}" , status.User.ScreenName , status.Text , Environment.NewLine))); disposable = connectable.Connect(); } catch (Exception ex) { viewTextBox.AppendText(ex.Message); } }