parent
f451796cf5
commit
43f1d77b9f
@ -0,0 +1,110 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.Linq;
|
||||
using System.Net.Http;
|
||||
using System.Text;
|
||||
using System.Web;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Common.OAuth;
|
||||
|
||||
namespace NzbDrone.Core.Notifications.Twitter
|
||||
{
|
||||
public interface ITwitterProxy
|
||||
{
|
||||
NameValueCollection GetOAuthToken(string consumerKey, string consumerSecret, string oauthToken, string oauthVerifier);
|
||||
string GetOAuthRedirect(string consumerKey, string consumerSecret, string callbackUrl);
|
||||
void UpdateStatus(string message, TwitterSettings settings);
|
||||
void DirectMessage(string message, TwitterSettings settings);
|
||||
}
|
||||
|
||||
public class TwitterProxy : ITwitterProxy
|
||||
{
|
||||
private readonly IHttpClient _httpClient;
|
||||
|
||||
public TwitterProxy(IHttpClient httpClient)
|
||||
{
|
||||
_httpClient = httpClient;
|
||||
}
|
||||
|
||||
public string GetOAuthRedirect(string consumerKey, string consumerSecret, string callbackUrl)
|
||||
{
|
||||
// Creating a new instance with a helper method
|
||||
var oAuthRequest = OAuthRequest.ForRequestToken(consumerKey, consumerSecret, callbackUrl);
|
||||
oAuthRequest.RequestUrl = "https://api.twitter.com/oauth/request_token";
|
||||
var qscoll = HttpUtility.ParseQueryString(ExecuteRequest(GetRequest(oAuthRequest, new Dictionary<string, string>())).Content);
|
||||
|
||||
return string.Format("https://api.twitter.com/oauth/authorize?oauth_token={0}", qscoll["oauth_token"]);
|
||||
}
|
||||
|
||||
public NameValueCollection GetOAuthToken(string consumerKey, string consumerSecret, string oauthToken, string oauthVerifier)
|
||||
{
|
||||
// Creating a new instance with a helper method
|
||||
var oAuthRequest = OAuthRequest.ForAccessToken(consumerKey, consumerSecret, oauthToken, "", oauthVerifier);
|
||||
oAuthRequest.RequestUrl = "https://api.twitter.com/oauth/access_token";
|
||||
|
||||
return HttpUtility.ParseQueryString(ExecuteRequest(GetRequest(oAuthRequest, new Dictionary<string, string>())).Content);
|
||||
}
|
||||
|
||||
public void UpdateStatus(string message, TwitterSettings settings)
|
||||
{
|
||||
var oAuthRequest = OAuthRequest.ForProtectedResource("POST", settings.ConsumerKey, settings.ConsumerSecret, settings.AccessToken, settings.AccessTokenSecret);
|
||||
|
||||
oAuthRequest.RequestUrl = "https://api.twitter.com/1.1/statuses/update.json";
|
||||
|
||||
var customParams = new Dictionary<string, string>
|
||||
{
|
||||
{ "status", message.EncodeRFC3986() }
|
||||
};
|
||||
|
||||
var request = GetRequest(oAuthRequest, customParams);
|
||||
|
||||
request.Headers.ContentType = "application/x-www-form-urlencoded";
|
||||
request.SetContent(Encoding.ASCII.GetBytes(GetCustomParametersString(customParams)));
|
||||
|
||||
ExecuteRequest(request);
|
||||
}
|
||||
|
||||
public void DirectMessage(string message, TwitterSettings settings)
|
||||
{
|
||||
var oAuthRequest = OAuthRequest.ForProtectedResource("POST", settings.ConsumerKey, settings.ConsumerSecret, settings.AccessToken, settings.AccessTokenSecret);
|
||||
|
||||
oAuthRequest.RequestUrl = "https://api.twitter.com/1.1/direct_messages/new.json";
|
||||
|
||||
var customParams = new Dictionary<string, string>
|
||||
{
|
||||
{ "text", message.EncodeRFC3986() },
|
||||
{ "screenname", settings.Mention.EncodeRFC3986() }
|
||||
};
|
||||
|
||||
var request = GetRequest(oAuthRequest, customParams);
|
||||
|
||||
request.Headers.ContentType = "application/x-www-form-urlencoded";
|
||||
request.SetContent(Encoding.ASCII.GetBytes(GetCustomParametersString(customParams)));
|
||||
|
||||
ExecuteRequest(request);
|
||||
}
|
||||
|
||||
private string GetCustomParametersString(Dictionary<string, string> customParams)
|
||||
{
|
||||
return customParams.Select(x => string.Format("{0}={1}", x.Key, x.Value)).Join("&");
|
||||
}
|
||||
|
||||
private HttpRequest GetRequest(OAuthRequest oAuthRequest, Dictionary<string, string> customParams)
|
||||
{
|
||||
var auth = oAuthRequest.GetAuthorizationHeader(customParams);
|
||||
var request = new HttpRequest(oAuthRequest.RequestUrl);
|
||||
|
||||
request.Headers.Add("Authorization", auth);
|
||||
|
||||
request.Method = oAuthRequest.Method == "POST" ? HttpMethod.Post : HttpMethod.Get;
|
||||
|
||||
return request;
|
||||
}
|
||||
|
||||
private HttpResponse ExecuteRequest(HttpRequest request)
|
||||
{
|
||||
return _httpClient.Execute(request);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in new issue