From 17a79edb0b7b2303a402accd22a8c3d36036b6f7 Mon Sep 17 00:00:00 2001 From: Kimura Youichi Date: Sat, 29 Apr 2017 02:00:47 +0900 Subject: [PATCH] =?utf8?q?SettingCommon.xml=20=E3=81=AB=20bit.ly=20?= =?utf8?q?=E3=81=AE=E3=82=A2=E3=82=AF=E3=82=BB=E3=82=B9=E3=83=88=E3=83=BC?= =?utf8?q?=E3=82=AF=E3=83=B3=E3=81=AE=E9=A0=85=E7=9B=AE=E3=82=92=E8=BF=BD?= =?utf8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit アクセストークンが設定されている場合は API キーより優先して使用する --- OpenTween/Api/BitlyApi.cs | 47 +++++++++++++++++++++++++++++--------- OpenTween/Setting/SettingCommon.cs | 4 ++++ OpenTween/ShortUrl.cs | 4 +++- OpenTween/Tween.cs | 2 ++ 4 files changed, 45 insertions(+), 12 deletions(-) diff --git a/OpenTween/Api/BitlyApi.cs b/OpenTween/Api/BitlyApi.cs index b8993e42..4dcb73ed 100644 --- a/OpenTween/Api/BitlyApi.cs +++ b/OpenTween/Api/BitlyApi.cs @@ -34,6 +34,8 @@ namespace OpenTween.Api { public static readonly Uri ApiBase = new Uri("https://api-ssl.bitly.com/"); + public string EndUserAccessToken { get; set; } + public string EndUserLoginName { get; set; } public string EndUserApiKey { get; set; } @@ -54,8 +56,6 @@ namespace OpenTween.Api { var query = new Dictionary { - ["login"] = this.EndUserLoginName, - ["apiKey"] = this.EndUserApiKey, ["format"] = "txt", ["longUrl"] = srcUri.OriginalString, }; @@ -63,18 +63,26 @@ namespace OpenTween.Api if (!string.IsNullOrEmpty(domain)) query["domain"] = domain; - var uri = new Uri(ApiBase, "/v3/shorten?" + MyCommon.BuildQueryString(query)); - using (var response = await this.http.GetAsync(uri).ConfigureAwait(false)) - { - response.EnsureSuccessStatusCode(); + var uri = new Uri("/v3/shorten", UriKind.Relative); + var responseText = await this.GetAsync(uri, query).ConfigureAwait(false); - var result = await response.Content.ReadAsStringAsync() - .ConfigureAwait(false); + if (!Regex.IsMatch(responseText, @"^https?://")) + throw new WebApiException("Failed to create URL.", responseText); + + return new Uri(responseText.TrimEnd()); + } - if (!Regex.IsMatch(result, @"^https?://")) - throw new WebApiException("Failed to create URL.", result); + public async Task GetAsync(Uri endpoint, IEnumerable> param) + { + var paramWithToken = param.Concat(this.CreateAccessTokenParams()); + + var requestUri = new Uri(new Uri(ApiBase, endpoint), "?" + MyCommon.BuildQueryString(paramWithToken)); - return new Uri(result.TrimEnd()); + using (var request = new HttpRequestMessage(HttpMethod.Get, requestUri)) + using (var response = await this.http.SendAsync(request).ConfigureAwait(false)) + { + return await response.Content.ReadAsStringAsync() + .ConfigureAwait(false); } } @@ -109,5 +117,22 @@ namespace OpenTween.Api return false; } + + private IEnumerable> CreateAccessTokenParams() + { + if (string.IsNullOrEmpty(this.EndUserAccessToken)) + { + return new[] + { + new KeyValuePair("login", this.EndUserLoginName), + new KeyValuePair("apiKey", this.EndUserApiKey), + }; + } + + return new[] + { + new KeyValuePair("access_token", this.EndUserAccessToken), + }; + } } } diff --git a/OpenTween/Setting/SettingCommon.cs b/OpenTween/Setting/SettingCommon.cs index 8abdaf7a..33fe8419 100644 --- a/OpenTween/Setting/SettingCommon.cs +++ b/OpenTween/Setting/SettingCommon.cs @@ -196,6 +196,10 @@ namespace OpenTween public bool GetFav = true; public string BilyUser = ""; public string BitlyPwd = ""; + + /// Bitly API アクセストークン + public string BitlyAccessToken { get; set; } = ""; + public bool ShowGrid = false; public bool UseAtIdSupplement = true; public bool UseHashSupplement = true; diff --git a/OpenTween/ShortUrl.cs b/OpenTween/ShortUrl.cs index b3ee02df..4f126425 100644 --- a/OpenTween/ShortUrl.cs +++ b/OpenTween/ShortUrl.cs @@ -65,6 +65,7 @@ namespace OpenTween /// public int PurgeCount { get; set; } + public string BitlyAccessToken { get; set; } public string BitlyId { get; set; } public string BitlyKey { get; set; } @@ -447,11 +448,12 @@ namespace OpenTween // bit.ly 短縮機能実装のプライバシー問題の暫定対応 // ログインIDとAPIキーが指定されていない場合は短縮せずにPOSTする // 参照: http://sourceforge.jp/projects/opentween/lists/archive/dev/2012-January/000020.html - if (string.IsNullOrEmpty(this.BitlyId) || string.IsNullOrEmpty(this.BitlyKey)) + if (!string.IsNullOrEmpty(this.BitlyAccessToken) && (string.IsNullOrEmpty(this.BitlyId) || string.IsNullOrEmpty(this.BitlyKey))) return srcUri; var bitly = new BitlyApi { + EndUserAccessToken = this.BitlyAccessToken, EndUserLoginName = this.BitlyId, EndUserApiKey = this.BitlyKey, }; diff --git a/OpenTween/Tween.cs b/OpenTween/Tween.cs index 245444f4..998b739d 100644 --- a/OpenTween/Tween.cs +++ b/OpenTween/Tween.cs @@ -811,6 +811,7 @@ namespace OpenTween tw.AllAtReply = SettingManager.Common.AllAtReply; AllrepliesToolStripMenuItem.Checked = tw.AllAtReply; ShortUrl.Instance.DisableExpanding = !SettingManager.Common.TinyUrlResolve; + ShortUrl.Instance.BitlyAccessToken = SettingManager.Common.BitlyAccessToken; ShortUrl.Instance.BitlyId = SettingManager.Common.BilyUser; ShortUrl.Instance.BitlyKey = SettingManager.Common.BitlyPwd; @@ -3731,6 +3732,7 @@ namespace OpenTween tw.RestrictFavCheck = SettingManager.Common.RestrictFavCheck; tw.ReadOwnPost = SettingManager.Common.ReadOwnPost; ShortUrl.Instance.DisableExpanding = !SettingManager.Common.TinyUrlResolve; + ShortUrl.Instance.BitlyAccessToken = SettingManager.Common.BitlyAccessToken; ShortUrl.Instance.BitlyId = SettingManager.Common.BilyUser; ShortUrl.Instance.BitlyKey = SettingManager.Common.BitlyPwd; TwitterApiConnection.RestApiHost = SettingManager.Common.TwitterApiHost; -- 2.11.0