Twitter:C#でユーザー名とパスワードを確認する
質問
バウンティ質問
C#3.5ウィンドウフォームアプリケーションを使用しています。受け入れられた回答に記載されているコードを使用しています。エラーが発生しています
リモートサーバーからエラーが返されました:(401)Unauthorized。
ユーザー名とパスワードが本当に感謝されることを確認するサンプルコード
バウンティ質問の終了
次のユースケースを持つアプリケーションがあります。ユーザーが最初にアプリケーションの使用を開始するときに、ユーザー名とパスワードを入力します。その後、はるかに後の段階で、アプリケーションがステータスを更新する場合があります。
現在、私はTwitterizerを使用していますが、質問は使用している特定のライブラリの範囲を超えていると思います。関連する2行のコードは次のとおりです。
Twitter twitter = new Twitter("username", "password", "source");
twitter.Status.Update("update");
ユーザー名/パスワードが正しくない場合、Twitterオブジェクトの構築は例外をスローしません。これはおそらく、この時点で何も送信されないためです。一方、ユーザー名/パスワードが無効な場合、ステータスの更新は例外をスローします。
私の問題は、更新を投稿するときではなく、ユーザー入力の時点でユーザー名/パスワードを検証したいことです。
(Twitterizerなどで)何も投稿せずにユーザー名/パスワードを検証するにはどうすればよいですか?
解決
peSHIrが述べたように、verify_credentials APIをざっと見て、私はちょっとしたルーチンを作成しました。遅くなりましたが、数回テストすることができ、動作しているようです。
関数では、HttpResponseCode.OKを取得した場合はtrueを返し、他の何かを取得した場合または例外がスローされた場合はfalseを返します。 twitterがuid / passwordを好まない場合は、401エラー(許可なし)で例外がスローされます。
public bool CheckTwitterCredentials(string UserName, string Password)
{
// Assume failure
bool Result = false;
// A try except block to handle any exceptions
try {
// Encode the user name with password
string UserPass = Convert.ToBase64String(
System.Text.Encoding.UTF8.GetBytes(UserName + ":" + Password));
// Create our HTTP web request object
HttpWebRequest Request =
(HttpWebRequest)WebRequest.Create("http://twitter.com/account/verify_credentials.xml");
// Set up our request flags and submit type
Request.Method = "GET";
Request.ContentType = "application/x-www-form-urlencoded";
// Add the authorization header with the encoded user name and password
Request.Headers.Add("Authorization", "Basic " + UserPass);
// Use an HttpWebResponse object to handle the response from Twitter
HttpWebResponse WebResponse = (HttpWebResponse)Request.GetResponse();
// Success if we get an OK response
Result = WebResponse.StatusCode == HttpStatusCode.OK;
} catch (Exception Ex) {
System.Diagnostics.Debug.WriteLine("Error: " + Ex.Message);
}
// Return success/failure
return Result;
}
他のヒント
API呼び出し account / verify_credentials 。使用するAPIライブラリがすでにこれをサポートしていることを願っています。Twitterはサードパーティのプログラマーを本当に嫌っているため、悪名高いので、Twitterで何かする理由がない限り、離れてください...
他のTwitterライブラリを使用しましたが、有効性についてユーザー名とパスワードのチェックをサポートしているライブラリはありません。これは、認証を必要とする何かをしようとしない限り、Twitter APIにユーザー名とパスワードを検証する機能がないためかもしれません。
できることの1つは、フレンドリストまたは認証を必要とする他の方法を取得することです。
Twitter APIは、長年ユーザー名/パスワードをサポートしていません。代わりに、OAuthがあります。これにより、ユーザーは、アプリケーションがユーザーに代わって行動することを承認できます。 Twitterには account / verify_credentials エンドポイントがあり、これを使用して次のことを確認できます。トークンを持っているユーザーがまだアプリを承認しています。 LINQ to Twitterでこのエンドポイントを呼び出す方法の例を次に示します。
var accounts =
from acct in twitterCtx.Account
where acct.Type == AccountType.VerifyCredentials
select acct;
詳細については、 Account / VerifyCredentials のドキュメントをご覧ください。 :
@ joe-mayoからの通知に従って、OAuthに切り替える必要があります。 twitterはAPIのv1を期限切れにし、次のURL https://dev.twitter.com/ docs / faq#17750 。
これは、C#でtwitterのユーザー名とパスワードを検証する関数です。
public bool isTwitterValid(string username, string password)
{
try
{
string user = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(username + ":" + password));
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://twitter.com/statuses/verify.xml");
request.Method = "POST";
request.ServicePoint.Expect100Continue = false;
request.Headers.Add("Authorization", "Basic " + user);
request.ContentType = "application/x-www-form-urlencoded";
WebResponse response = request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
string responseString = reader.ReadToEnd();
reader.Close();
}
catch (Exception ex)
{
if (ex.Message.Contains("404")) { return true; }
}
return false;
}