Twitter api を使用してアプリケーションを開発しています。これには、ユーザーが存在するかどうかを確認するメソッドの作成が含まれます。これが私のコードです:
public static bool checkUserExists(string user)
{
//string URL = "https://twitter.com/" + user.Trim();
//string URL = "http://api.twitter.com/1/users/show.xml?screen_name=" + user.Trim();
//string URL = "http://google.com/#hl=en&sclient=psy-ab&q=" + user.Trim();
string URL = "http://api.twitter.com/1/users/show.json?screen_name=" + user.Trim();
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(URL);
try
{
var webResponse = (HttpWebResponse)webRequest.GetResponse();
return true;
}
//this part onwards does not matter
catch (WebException ex)
{
if (ex.Status == WebExceptionStatus.ProtocolError && ex.Response != null)
{
var resp = (HttpWebResponse)ex.Response;
if (resp.StatusCode == HttpStatusCode.NotFound)
{
return false;
}
else
{
throw new Exception("Unknown level 1 Exception", ex);
}
}
else
{
throw new Exception("Unknown level 2 Exception", ex);
}
}
}
問題は、Google 検索クエリを含め、コメントされている URL のいずれかを使用して、メソッドを呼び出しても 2、3 回以上機能しない (応答がない) ことです (Twitter が原因である可能性があると思いました)。 API 制限)。デバッグ時に、次の場所でスタックしていることを示しています。
var webResponse = (HttpWebResponse)webRequest.GetResponse();
これが私がそれを呼び出す方法です:
Console.WriteLine(TwitterFollowers.checkUserExists("handle1"));
Console.WriteLine(TwitterFollowers.checkUserExists("handle2"));
Console.WriteLine(TwitterFollowers.checkUserExists("handle3"));
Console.WriteLine(TwitterFollowers.checkUserExists("handle4"));
Console.WriteLine(TwitterFollowers.checkUserExists("handle5"));
Console.WriteLine(TwitterFollowers.checkUserExists("handle6"));
せいぜい2〜3行の出力が得られます。誰かが間違っていることを指摘できますか?
更新 1:
15 秒ごとに 1 つのリクエストを送信しましたが (十分に制限内)、それでもエラーが発生します。一方、リクエストを送信し、アプリを閉じて再度実行すると、非常にうまく機能します (平均して、5 秒ごとに 1 つのリクエストが発生します)。レート制限は 1 時間あたり 150 回の呼び出しTwitter FAQです。
また、しばらく待ったところ、レベル 2 でこの例外が発生しました: http://pastie.org/3897499
更新 2: 意外に聞こえるかもしれませんが、フィドラーを実行すると完全に動作します。このプロセスをターゲットにするかどうかに関係なく!