public async Task <AccessTokenResponse> GetAccessToken( RequestTokenResponse requestToken, RedirectToAuthResponse redirectToAuth) { SortedDictionary <string, string> requestParams = new SortedDictionary <string, string>(); requestParams.Add(OAuthVerifierParameter, redirectToAuth.OAuthVerifier); var handler = new AuthHeaderFilter(this.consumerInfo, requestToken, AccessTokenUrl, requestParams); var response = await PostRequest(AccessTokenUrl, requestParams, handler); // result: // oauth_token=15244042-e0MDgWWgvAsJDVGTrwTbjKJYUOsnUdhNpqccnhBX8&oauth_token_secret=atrv7CXDUJymKxwVyanAVOTAXz0VyDtAx2aXNo9VVfq4i&user_id=15244042&screen_name=kumar0001 MatchCollection mc = Regex.Matches(response, @"^oauth_token=(?<token>[^&]+?)&oauth_token_secret=(?<secret>[^&]+?)&user_id=(?<userid>[^&]+?)&screen_name=(?<screenname>.+?)$", RegexOptions.IgnoreCase | RegexOptions.Singleline); if (mc.Count == 1) { Match m = mc[0]; return(new AccessTokenResponse() { OAuthAccessToken = m.Groups["token"].Value, OAuthAccessTokenSecret = m.Groups["secret"].Value, UserId = m.Groups["userid"].Value, ScreenName = m.Groups["screenname"].Value, }); } else { throw new TwitterOAuthException(String.Format("invalid response: {0}", response)); } }
// https://dev.twitter.com/docs/api/1/post/oauth/request_token public async Task <RequestTokenResponse> GetRequestToken() { SortedDictionary <string, string> requestParams = new SortedDictionary <string, string>(); var handler = new AuthHeaderFilter(this.consumerInfo, RequestTokenUrl, requestParams); string response = await PostRequest(RequestTokenUrl, requestParams, handler); // result: // oauth_token=UC9NrLRmLge4dBFExQOQ4UGuv6ytvSfpdpgfkoTaBU&oauth_token_secret=TmlhJukIcjPbIsLNRw4vQUFVYjot5jaXABFHiR18&oauth_callback_confirmed=true MatchCollection mc = Regex.Matches(response, @"^oauth_token=(?<token>[^&]+?)&oauth_token_secret=(?<secret>[^&]+?)&oauth_callback_confirmed=(?<confirmed>.+?)$", RegexOptions.IgnoreCase | RegexOptions.Singleline); RequestTokenResponse result; if (mc.Count == 1) { Match m = mc[0]; var requestToken = m.Groups["token"].Value; var requestTokenSecret = m.Groups["secret"].Value; var confirmed = m.Groups["confirmed"].Value; result = new RequestTokenResponse() { OAuthRequestToken = requestToken, OAuthRequestTokenSecret = requestTokenSecret, Confirmed = Boolean.Parse(confirmed), }; } else { throw new TwitterOAuthException(String.Format("invalid response: {0}", response)); } return(result); }
// https://dev.twitter.com/docs/api/1.1/post/statuses/update public async Task <string> UpdateStatus( AccessTokenResponse oAuthAcessToken, string tweetString) { string response = String.Empty; SortedDictionary <string, string> requestParams = new SortedDictionary <string, string>(); requestParams.Add(StatusParameter, tweetString); var handler = new AuthHeaderFilter(this.consumerInfo, oAuthAcessToken, UpdateStatusUrl, requestParams); response = await PostRequest(UpdateStatusUrl, requestParams, handler); // result // {"created_at":"Sun Jun 29 00:44:49 +0000 2014","id":483048408681152513,"id_str":"483048408681152513","text":"\u30c6\u30b9\u30c8PG\u304b\u3089Tweet at 2014\/06\/29 09:44:39.061 (1509971026)","source":"\u003ca href=\"http:\/\/app.strawhat.net\/TwitterSimpleClient\" rel=\"nofollow\"\u003eTwitterSimpleClient\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":15244042,"id_str":"15244042","name":"\u306e\u3076@\u3054\u6ce8\u6587\u306f\u3072\u3050\u307e\u3067\u3059\u304b","screen_name":"kumar0001","location":"Japan\/Nagoya","description":"\u30c6\u30c7\u30a3\u30d9\u30a2\u5236\u4f5c\uff08\u8da3\u5473\uff09\u3068SE\uff08\u672c\u696d\uff09\u3084\u3063\u3066\u308b\u4e09\u5341\u8def\u7537\u3067\u3059\u3002\u30c4\u30a4\u30fc\u30c8\u306e\u30b8\u30e3\u30f3\u30eb\u304c\u3044\u308d\u3044\u308d\u306a\u306e\u3067\u3054\u6ce8\u610f\u3092\u3000\u300a\u30ad\u30fc\u30ef\u30fc\u30c9\u300b\u30c6\u30c7\u30a3\u30d9\u30a2\u5236\u4f5c, \u718a(\u30b0\u30ea\u30ba\u30ea\u30fc\u30fb\u30a2\u30e1\u30ea\u30ab\u30af\u30ed\u30af\u30de)\uff0f\u30d6\u30bf, A\u30c1\u30e3\u30f3\u30cd\u30eb, IT(C#\/WP8\/Silverlight\/WPF), \u30ed\u30fc\u30bc\u30f3\u30e1\u30a4\u30c7\u30f3, \u72fc\u3068\u9999\u8f9b\u6599","url":"http:\/\/t.co\/kZjLv4nMsC","entities":{"url":{"urls":[{"url":"http:\/\/t.co\/kZjLv4nMsC","expanded_url":"http:\/\/www.strawhat.net\/","display_url":"strawhat.net","indices":[0,22]}]},"description":{"urls":[]}},"protected":false,"followers_count":658,"friends_count":749,"listed_count":48,"created_at":"Thu Jun 26 13:50:28 +0000 2008","favourites_count":6947,"utc_offset":32400,"time_zone":"Tokyo","geo_enabled":false,"verified":false,"statuses_count":87359,"lang":"ja","contributors_enabled":false,"is_translator":false,"is_translation_enabled":false,"profile_background_color":"9AE4E8","profile_background_image_url":"http:\/\/abs.twimg.com\/images\/themes\/theme16\/bg.gif","profile_background_image_url_https":"https:\/\/abs.twimg.com\/images\/themes\/theme16\/bg.gif","profile_background_tile":false,"profile_image_url":"http:\/\/pbs.twimg.com\/profile_images\/461630005156392960\/BARks8-s_normal.jpeg","profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/461630005156392960\/BARks8-s_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/15244042\/1398896172","profile_link_color":"0084B4","profile_sidebar_border_color":"BDDCAD","profile_sidebar_fill_color":"DDFFCC","profile_text_color":"333333","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":false,"follow_request_sent":false,"notifications":false},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"favorite_count":0,"entities":{"hashtags":[],"symbols":[],"urls":[],"user_mentions":[]},"favorited":false,"retweeted":false,"lang":"ja"} return(response); }