Skip to content
This repository has been archived by the owner on Sep 1, 2023. It is now read-only.

ストリーミング API を使う

Acid Chicken (硫酸鶏) edited this page Aug 30, 2018 · 7 revisions

Tokens.Streaming からストリーミング API にアクセスすることができます。 StreamingApi クラスのメソッドは以下の API に対応します。

メッセージを処理する

各メソッドの戻り値は IEnumerable<StreamingMessage> です。 StreamingMessage はストリーミングで受信するメッセージを表す基底クラスです。 MessageType プロパティでメッセージの種類を確認でき、メッセージのインスタンスを以下のクラスにキャストできることが保証されます。

サンプルコード

このコードでは「茶」が含まれるツイートを 10 件取得して標準出力に出力して切断します。

// using System;
// using System.Linq;
// using CoreTweet;
// using CoreTweet.Streaming;

foreach(var m in t.Streaming.Filter(track: "")
            .OfType<StatusMessage>()
            .Select(x => x.Status)
            .Take(10))
    Console.WriteLine("お茶についてのツイート {0}: {1}", m.User.ScreenName, m.Text);

IObservable による API アクセス

.NET Framework 3.5 以外では、通常のストリーミング API のメソッド名に「AsObservable」がついたメソッドを呼び出すことで IObservable による非同期イベントストリームを取得することができます。 これらのメソッドの戻り値は IObservable<StreamingMessage> となります。 Subscribe 時に返される IDisposableDispose() を呼ぶことで切断することが出来ます。

サンプルコード

このコードでは 30 秒間、フォロー中のユーザの一覧とツイートを標準出力に出力した後に切断します。このサンプルには Reactive Extensions を使用しています。 (User Streamは廃止されたため、このサンプルコードはもはや動作しません。)

// using System;
// using System.Reactive.Linq;
// using System.Threading.Tasks;
// using CoreTweet;
// using CoreTweet.Streaming;

var stream = t.Streaming.UserAsObservable().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();