C#での自作twitter パート1:OAuth認証



ある時点で、 Twitterマイクロブログネットワーク用のクライアントプログラムを作成したいという要望があり、プログラミング言語としてC#が選ばれました。

OAuthは、第三者(ユーザー)にユーザー名とパスワードを与えることなく、ユーザーの保護されたリソースへのアクセスを第三者に提供できるオープンな認証プロトコルであることを思い出してください。 この場合のサードパーティは、当然のことながらアプリケーションを使用します。

原則として、このガイドはTwitterでのOAuth承認だけでなく、悪名高いFriendFeedなど、OAuthを使用する他のポータルにも適しています。



OAuthプロトコルを使用した承認プロセスは 、Habréで十分に詳細に検討されています

Twitterアカウントでログインするには、 Twitter Developersにアプリケーションを登録する必要があります。

アンケートに記入し、[アプリケーションの登録]ボタンをクリックすると、アプリケーションページにリダイレクトされます。 コンシューマーキーコンシューマーシークレットの 2行に興味があります。すぐに必要になるため、何らかの方法で保存する必要があります。

そして今、いくつかの理論。 実際、承認プロセスは条件付きで3つの段階に分けることができます。

1.初期値oauth_tokenおよびoauth_secretを取得するために、 api.twitter.com / oauth / request_tokenにリクエストを行います。

2.これらの値を受け取った後、ブラウザウィンドウで別のリクエストを行いますが、すでにapi.twitter.com/oauth/authorizeで、ユーザーはTwitterアカウントからユーザー名/パスワードを入力するように求められます。素晴らしいアプリケーションは、ユーザーアカウント情報ともちろん2つのボタンを使用したいと考えています。拒否と確認用です。 確認ボタンをクリックすると、PINコードが書き込まれるページが開きます。 ユーザーはアプリケーションにPINコードを渡す必要があります。

3.ユーザーがアプリケーションにPINコードを入力した後、api.twitter.com / oauth / access_tokenに3番目の要求を行って、システム内のユーザーを識別するために使用されるoauth_tokenとoauth_secretを取得する必要があります。

すべてを順番に行い、記事の終わりまでに、OAuth認証を渡すことができるアプリケーションを取得する必要があります。

次に、プログラムを作成するプロセスに移ります。

新しいコンソールアプリケーションを作成します。

だから、最初に我々は、このタイプについてクエリを行う必要がありapi.twitter.com/oauth/request_token?oauth_consumer_key= <?>&Oauth_signature_method = <?>&Oauth_signature = <?>&Oauth_timestamp = <?>&Oauth_nonce = <?>&Oauth_version = <? >

ここで<?>はあなたの値です。 いくつかの値を取得するために、小さくても非常に成功したOAuthBase.csクラスを使用しました

それをダウンロードして、アプリケーションフォルダーに入れてください。



リクエストを行い、ダウンロードしたクラスを操作するため、プログラムヘッダーに次の行が必要です。

using System;<br> using OAuth;<br> using System.Net;<br> using System.IO;<br> using System.Text; <br><br> * This source code was highlighted with Source Code Highlighter .







ここで、クエリ文字列を作成し、その値を文字列型request_urlの変数に割り当てて、最初のリクエストを実行する必要があります。



// : <br> Uri uri = new Uri ( "http://api.twitter.com/oauth/request_token" );<br> string consumerKey = " consumerKey" ;<br> string consumerSecret = " consumerSecret" ;<br> // OAuthBase <br>OAuthBase oAuth = new OAuthBase();<br> // <br> string timeStamp = oAuth.GenerateTimeStamp();<br> string nonce = oAuth.GenerateNonce();<br> string normUri;<br> string normParams;<br> string sig = oAuth.GenerateSignature(uri, consumerKey, consumerSecret, string .Empty, string .Empty, "GET" , timeStamp, nonce, OAuth.OAuthBase.SignatureTypes.HMACSHA1, out normUri, out normParams);<br> // <br> string request_url = <br> "http://api.twitter.com/oauth/request_token" + "?" +<br> "oauth_consumer_key=" + consumerKey + "&" +<br> "oauth_signature_method=" + "HMAC-SHA1" + "&" +<br> "oauth_signature=" + sig + "&" +<br> "oauth_timestamp=" + timeStamp + "&" +<br> "oauth_nonce=" + nonce + "&" +<br> "oauth_version=" + "1.0" ;<br> Console .WriteLine( "Req: " + request_url); // <br> Console .WriteLine( "--------------------------------------------------------" );<br> // <br>HttpWebRequest Request = (HttpWebRequest) HttpWebRequest.Create(request_url);<br>HttpWebResponse Response = (HttpWebResponse)Request.GetResponse(); <br>StreamReader Reader = new StreamReader(Response.GetResponseStream(), Encoding .GetEncoding(1251));<br> string outline = Reader.ReadToEnd(); <br> Console .WriteLine( "Out: " + outline);<br> Console .WriteLine( "--------------------------------------------------------" );<br> // <br> char [] delimiterChars = { '&' , '=' };<br> string [] words = outline.Split(delimiterChars);<br> string oauth_token = words[1]; <br> string oauth_token_secret = words[3];<br> string oauth_callback_confirmed = words[5];<br> // <br> Console .WriteLine( "oauth_token = " + oauth_token); <br> Console .WriteLine( "oauth_token_secret = " + oauth_token_secret); <br> Console .WriteLine( "oauth_callback_confirmed = " + oauth_callback_confirmed);<br> Console .WriteLine( "--------------------------------------------------------" ); <br><br> * This source code was highlighted with Source Code Highlighter .







これで、2番目のステップに進むことができます。ユーザーはPINコードを入力するように求められます



// <br> // PIN <br>request_url = "http://api.twitter.com/oauth/authorize?oauth_token=" + oauth_token;<br> Console .WriteLine( "Req: " + request_url);<br> Console .WriteLine( "--------------------------------------------------------" );<br>System.Diagnostics.Process.Start(request_url); // PIN- <br> Console .Write( "Enter PIN: " );<br> string oauth_verifier = Console .ReadLine(); // oauth_verifier — PIN-. <br> Console .WriteLine( "--------------------------------------------------------" ); <br><br> * This source code was highlighted with Source Code Highlighter .







最後のリクエストである、保存してアカウントデータにアクセスする必要がある答え



// <br>request_url = <br> "http://api.twitter.com/oauth/access_token" + "?" +<br> "oauth_consumer_key=" + consumerKey + "&" +<br> "oauth_token=" + oauth_token + "&" +<br> "oauth_signature_method=" + "HMAC-SHA1" + "&" +<br> "oauth_signature=" + sig + "&" +<br> "oauth_timestamp=" + timeStamp + "&" +<br> "oauth_nonce=" + nonce + "&" +<br> "oauth_version=" + "1.0" + "&" +<br> "oauth_verifier=" + oauth_verifier;<br> Console .WriteLine( "Req: " + request_url);<br> Console .WriteLine( "--------------------------------------------------------" ); <br> // <br>Request = (HttpWebRequest) HttpWebRequest.Create(request_url);<br>Response = (HttpWebResponse)Request.GetResponse(); <br>Reader = new StreamReader(Response.GetResponseStream(), Encoding .GetEncoding(1251));<br>outline = Reader.ReadToEnd(); <br> Console .WriteLine( "Out: " + outline);<br> Console .WriteLine( "--------------------------------------------------------" );<br> // <br>words = outline.Split(delimiterChars);<br>oauth_token = words[1]; <br>oauth_token_secret = words[3];<br> string user_id = words[5];<br> string screen_name = words[7];<br> // <br> Console .WriteLine( "oauth_token = " + oauth_token); <br> Console .WriteLine( "oauth_token_secret = " + oauth_token_secret); <br> Console .WriteLine( "user_id = " + user_id);<br> Console .WriteLine( "screen_name = " + screen_name); <br><br> * This source code was highlighted with Source Code Highlighter .







受信した必要なデータはこれですべてです。 Twitter APIとの通信については、今後の記事で説明します。 値を含む行の出力は、承認プロセスとその理解の可視性を向上させるために作成されます。 ハイフンの付いた行が挿入されるため、出力テキストは目で1本の実線にマージされません。



UPD:それにもかかわらず、著者は自分でHabrへの招待を受けました。 ようこそshpaker



All Articles