2013/04/29

[C#]Twitterizerを使う

,
 Twitterizer(Twitterに関するライブラリ)を使ってみたお話です。と言うよりは、.NETのバージョンによるdllがホニャララな問題に苦戦した跡地です。

 動機は、某botが凍結され新垢が作られ、ふと、そういう一斉ブロックツールとか無いかなあ、と思ったことです。
 
 Twitterizerの使い方は簡単で、GitHubからZipをDLし、解答してできたフォルダのうち/Twitteizer2/Twitterizer2.csprojをビルド?すればobj/Debug/Twitterizer2.dllが作成されるので、それを参照に追加でとりあえずは使えました。(/Debug/Twitterizer2/Full/Twitterizer2.dllを使うべき?)
 VS2012で/Twitterizer.slnを開くと、一部(Twitterizer2.Async.SilverlightとTwitterizer2.Streaming.Silverlight)が使用不可と出るので、それを使った奴は知りません…
 StreamingAPIを使うためには、Twitterizer2.Streaming.dllを使う必要があります。また、Newtonsoft.Json.dllも必要です(GettingStarted.txtに書いてある)。

※2013/07/31追記 API 1.0は使えなくなりました。1.1に移行する必要があります。Twitterizerは開発が止まっているのか(GitHubよく読んでないからわからん)、有志の方による1.1に対応したdllを使う必要があります。随分古く何もない記事なんですけど、Twitterizerでググったら意外と上位に出てきてしまったので…書いておきます
 

 Twitterizerを使うにあたって、以下のサイトが参考になりました。

[C#] TwitterizerでスクリーンネームからTwitterのIDを取得する http://bit.ly/ZKGZ6P
Twitter タイムラインの取得、投稿 (C#) | 夏研ブログ http://bit.ly/ZKH76i
Twitterizerで特定ユーザーのフォロワーを取得する|Paco's style http://amba.to/ZKHaPw
Twitterizerメモ – 非同期処理 | サツキふぁくとりー http://bit.ly/ZKHfTc
Twitterizer で UserStream を取得する。 | みむらの手記手帳 http://bit.ly/ZKHhuo
C#でtwitterizerをつかってみた2 Twitterizerを使ったMyTwitterToolsクラス[.NET][C#][twitterizer][twitterAPI] - merusaiaのゲーム開発(奮闘)日記 http://bit.ly/ZKHkX6

 別にあとに残しておくほどのコードを書いてませんが、こんな感じで自分のIDなども取得出来ます。

/// <summary>
/// ユーザーのScreenNameやアイコンを、ラベル1,2に表示する
/// <summary>
/// <param name="token" />アクセストークン
private async void showUserProfile(OAuthTokens token)
{
    var r = TwitterAccount.VerifyCredentials(token);
    if (r.Result == RequestResult.Success)
    {
        label1.Text = r.ResponseObject.ScreenName;
        label2.Text = r.ResponseObject.Name;
        await Task.Run(() => pictureBox1.Load(r.ResponseObject.ProfileImageLocation));
        pictureBox1.Show();
    }
}

 で、最初既に存在していたdllを使ったところ、dllのバージョンの違い?によるエラーに悩まされました。エラーが出たのはTwitterUser.Show()を呼び出した時に発生した例外で、その内容は
ファイルまたはアセンブリ 'System.Windows, Version=2.0.5.0,Culture=neutral, PublicKeyToken=7cec85d7bea7798e'、またはその依存関係の 1つが読み込めませんでした。
といったもの。ググって出てきた解決策(UACに再登録すること。参考)してもエラーは直りませんでした。
こんなエラーが出ます…

 以下は私の考えですが、Versionが2.0なのは.NET Framework2.0用?で、試しに追加参照にSystem.Windows.dllで2.0のものを追加しても、ビルド時に下のようなエラーが出てしまう。競合してる模様。
"System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" と "System.Runtime.Serialization, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e" の間の競合を解決する方法がありません。一時的に、"System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" を選択します。

 で、結局Twitterizer2を自分でビルドしたらエラーは直りました。

苦戦した跡
こんな感じになってた

 一時期Twitterizer2ではなくTweetSharpにしようとしましたが、どうにもAPIリファレンスも見つからず、あまりにも資料を見つけられなかったので投げました。まず、OAuth認証するときにPINコード入力するようにするのが不明(TwitterDevelopmentでアプリケーションがWebなのかClientなのか指定できなくなっている?)なので…

 パッケージの復元は既定で無効になっています。確認のため、Visual Studio の [オプション] ダイアログ ボックスを開き、Package Manager ノードをクリックして、[NuGet がビルド中に存在しないパッケージをダウンロードするのを許可する] チェック ボ…
というエラーが出た場合は、VS2012だと何故か[Package Manager]が無いので、手動でNuGetフォルダをコピーした記憶があります。
 
 呟くまで、は c# - How to get the Twitter Usertimeline with Tweetsharp - Stack Overflow http://bit.ly/11rnIEe とかが参考になりました。

0 コメント to “[C#]Twitterizerを使う”

コメントを投稿