{
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; }
{
var query = new Dictionary<string, string>
{
- ["login"] = this.EndUserLoginName,
- ["apiKey"] = this.EndUserApiKey,
["format"] = "txt",
["longUrl"] = srcUri.OriginalString,
};
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<string> GetAsync(Uri endpoint, IEnumerable<KeyValuePair<string, string>> 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);
}
}
return false;
}
+
+ private IEnumerable<KeyValuePair<string, string>> CreateAccessTokenParams()
+ {
+ if (string.IsNullOrEmpty(this.EndUserAccessToken))
+ {
+ return new[]
+ {
+ new KeyValuePair<string, string>("login", this.EndUserLoginName),
+ new KeyValuePair<string, string>("apiKey", this.EndUserApiKey),
+ };
+ }
+
+ return new[]
+ {
+ new KeyValuePair<string, string>("access_token", this.EndUserAccessToken),
+ };
+ }
}
}
/// </summary>
public int PurgeCount { get; set; }
+ public string BitlyAccessToken { get; set; }
public string BitlyId { get; set; }
public string BitlyKey { get; set; }
// 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,
};
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;
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;