ツイートの取得

ようやくやってきましたTLの取得っ!

長かったー凄く長かったー。

まぁ結局ツイートの取得に半日悩んだわけですが。

最初に使用した処理はお手本にもあるこちら。

var stream = tokens.Streaming.StartStream(CoreTweet.Streaming.StreamingType.User,
new StreamingParameters(replies => "all"));

foreach(var message in stream)
{
 if(message is StatusMessage)
 {
  var status = (message as StatusMessage).Status;
  Console.WriteLine(string.Format("{0}:{1}", status.User.ScreenName

   ,status.Text));
 }
 else if(message is EventMessage)
 {
  var ev = message as EventMessage;
  Console.WriteLine(string.Format("{0}:{1}->{2}",
  ev.Event, ev.Source.ScreenName, ev.Target.ScreenName));
 }
}

※参考

C#でTwitterアプリを作る 第3回 Streaming - LINQになりたい

だけど問題はお手本にもあるようにこのままだと同期処理なので延々foreachが回る。一度上限数を決めてbreakする仕様にもしてみたけれど、上限まで満たないとツイートが流れてくるのを待つのでやっぱりレスポンスが遅い。なので調べてみたら非同期処理もちゃんとある。

非同期メソッドを使う · CoreTweet/CoreTweet Wiki · GitHub

拡張無しでも使える処理だからこれで何とかなる!と喜んだのもつかの間、どうにもコンパイルエラーになって処理が通らない。

結論として私がC#よく分かってなかっただけだったわけですが。

悩んだ末の現在のコード

public async void HomeTimelineAsync(){
 foreach (var status in await

  tokens.Statuses.HomeTimelineAsync(count => 10))
 {
  String str = null;
  str = string.Format("{0}:{1}", status.User.ScreenName, status.Text);
  if (str != null)
  {
   str = str+"\n"+this.textBox1.Text;
   this.textBox1.Text = str;
  }
 }
}

ミソは太字の部分。このasync つけたメソッド内でawait指定したtaskの処理を待つって代物。HomeTimelineAsyncはその時取れるTLから10件取得するようになっている、のかな?多分。

とりあえずテキストボックス置いて中に追記で書かせてますが見づらいのでその辺りも考えてもうちょい試行錯誤します。

というかもうちょっとちゃんと説明書き読めという話。