認証からツイートまで
サンプルを参考にOAuth認証してみる。
https://github.com/danielcrenna/tweetsharp
var service = new TwitterService(ConsumerKey, ConsumerSecret); var requestToken = service.GetRequestToken(); Uri uri = service.GetAuthenticationUrl(requestToken); Process.Start(uri.ToString());
ブラウザが開いてPINを貰ったら
var access = service.GetAccessToken(requestToken, PIN); service.AuthenticateWith(access.Token, access.TokenSecret);
PINをGetAccessTokenにリクエストトークンと一緒に渡せばok
access.Tokenとaccess.TokenSecretをファイル等に保存して完了。
次回起動からは、
var service = new TwitterService(ConsumerKey, ConsumerSecret); service.AuthenticateWith(tokenValue, tokenSecret);
これでserviceを使ってAPIを呼んでいきます。
これもサンプルを参考に、
var tweets = service.ListTweetsOnHomeTimeline(new ListTweetsOnHomeTimelineOptions { Count = 200 });
引数にはオプションを指定します。
どんなオプションがあるのかはAPIドキュメントで確認。
IEnumerable
foreach (var tweet in tweets) { Console.WriteLine(tweet.Text); }
TwitterStatusには色々入ってて、例えばツイートはTextに、スクリーン名はUser.ScreenNameに入ってます。
jsonで帰ってくるものと同一だと思うので、上記のAPIドキュメントを参考に、必要なものを取得します。
あと、TwitterSharpのサンプルはたまに間違ってたり、そもそもドキュメントが無いので、ソース見るかメソッド名から判断していきます。
ツイートする時は、
service.SendTweet(new SendTweetOptions { Status = "ツイートしたよ" });
オプションのStatusにツイート内容を指定すればok
それぞれには非同期で動作するメソッドも付属してるみたい。
例えばタイムライン取得の場合、
var result = new Action<IEnumerable<TwitterStatus>, TwitterResponse>(HomeTimeline_Result); var option = new ListTweetsOnHomeTimelineOptions(); option.Count = 200; service.ListTweetsOnHomeTimeline(option, result); private void HomeTimeline_Result(IEnumerablet, TwitterResponse r) { //TL取得完了後 }
ListTweetsOnHomeTimelineにオプションとdelegateを渡してやればok
ただ、完了後も別スレッドなので、コントロールを操作する時とかは、
var ac = new Action<IEnumerable<TwitterStatus>, TwitterResponse>(hoge); Invoke(ac, t, r); private void hoge(IEnumerable<TwitterStatus> tweets, TwitterResponse r) { //ここで操作 }
Invoke()を使って操作する。
基本的な動作は今までの流れでやればいけるかな?
ただ、APIには実装されてるけどTwitterSharpには実装されてないメソッドがあるっぽい。
C#でも無いしAPI1.1でもないんだけど、
http://www.tryphp.net/category/phpapplication_twitter-api/
日本語でまとまってるので公式ドキュメントと併せて見て参考になった。