【覚書】Auth認証を作る
Twitter から UserStream API の廃止が行われていますが、リアルタイムにツイートを取得する必要性が少ないのか、それほどの混乱にはなっていない。
代替えはいろいろ出ていますがどうにも使い勝手が悪い。
そこまでリアルタイムにこだわりがあるわけではない。実際に、ツイートが、”2分”遅れたとして、何か困る事象になるのだろうか?
もし、それほどリアルタイムにこだわる必要があるサービスの提供を考えるのなら、Twitter という選択肢を選ばないだろう。確かに、不特定多数に同時に情報を発信するという概念から言えば、Twitter は優秀なプラットフォームだと思う。
話が横道にそれてしまったが、利用規約やAPI仕様変更の多さから毛嫌いされることが多い Twitter ですが、当然の事だと受け入れて、できることを、できる範囲で楽しめばいいと割り切っています。
APIの仕様から、1分に一回程度は、タイムラインの取得ができるのですから、これを安全に行う方法で考えればよい。
前置きが長くなったが、C#を使って、タイムラインとDMを取得して、ユーザに通知するためだけのサービスを作る。
- 複数アカウントに対応する
- 5分未満で新着が把握できる
- タイムラインの取得を行って、自分以外の投稿を知らせる
- タイムラインを取得して、コメントが付いたら知らせる
- DMが届いたら知らせる
ぐらいかな?
あと、画像や動画があれば認識するくらいで大丈夫かな?
ツイートもできるだろうけど、今は必要ないかな。BOTとか作るのなら必須だろうけど、Windowsフォームアプリではあまり意味がなさそうだからな。
まずは、認証部分を作ろう。
C#には、CoreTweet という強力なパッケージが用意されている。NuGet で取得しておく。
Twitterアプリのためのキーの取得は、https://apps.twitter.com/ で行っておく。電話番号認証されていないアカウントでは作成できない。
フォームアプリを作成して、メインとなる部分
private CoreTweet.OAuth.OAuthSession session { get; set; }
を宣言する。
適当に、ボタンを二つと、テキストボックスを一つを配置して、一つのボタンを”認証”とした。そこに、
session = CoreTweet.OAuth.Authorize(Properties.Resources.ConsumerKey, Properties.Resources.ConsumerSecret); var url = session.AuthorizeUri; // -> user open in browser frmPin mPin = new frmPin(url.ToString()); mPin.Show(); とでも、書いておこう。 アプリキーの設定を行って、認証用のURLを取得した。
それをあらかじめ作っておいた、Webブラウザだけを張り付けたフォームに渡して起動する。単純に Shell に取得してきたURLを渡してもよいが、デフォルトブラウザで起動するのが美しくないので、別枠にした。デフォルトブラウザでは、Twitter を広げているのだろう。そうなると、ログイン状態を維持した状態にできなくなってします。
今回は、PIN の入力にしたが、ASP.NET や PHP が使えるサーバがあるのなら、認証をそっちに投げてしまって、キーだけ取得したり、コールバックを受け付ける仕組みにしてもよいとは思う。
個人的には、そのほうが美しいとは思うが、認証を行うという機能充足を考えると、PIN入力でも十分だと思われる。
PINの入力をテキストボックスに行わせた後(自分で作って、自分で使うので、エラーや細かい操作性を無視している。客に渡したり、不特定多数に使わせるのなら、PINではなく、コールバックのほうがいいのは当然である。そうなると、URLの取得から、サイト側で行う必要があり、面倒になってしまった)を、もう一つのボタンで処理を行う。
string strPin = txtPin.Text; // var tokens = CoreTweet.OAuth.GetTokens(session, strPin); // txtAccessToken.Text = tokens.AccessToken.ToString(); txtAccessSecret.Text = tokens.AccessTokenSecret.ToString(); 別途フォームに張り付けていた、二つのテキストボックスに取得してきたトークンを張り付けているが、当然これからも永続的に使うのなら、DBに入れるなりする必要がある。 私は、今後の事も考えて、設定用のXMLでも作ろうかと思っている。 認証はこれで終わり。 あとは、取得したトークンを利用するのだが、続きはまた気になって作ったときにでも・・・
積読本や購入予定の書籍の情報を投稿しています
小説/開発/F1&雑談アカウントは、フォロバを返す可能性が高いアカウントです