Чтобы получить информацию из Twitter или другого провайдера (google ..), вам необходимо предоставить безопасную авторизацию на основе Oauth 1.0 или 2.0
См. Twitter Документация по аутентификации
Чтобы упростить задачу, вы можете помочь базовой библиотеке Matlus См. Проект кода в google
Они предоставили очень хороший пример.Я использовал его и добился успеха.
По сути, вам нужно пройти эти этапы
- Зарегистрируйте ваше приложение в Twitter и получите ключ клиента и секретный ключ клиента
- См. Авторизациядокумент в твиттере - ссылка - см. раздел Введение в OAuth
- запрос на запрос токена
- запрос на авторизацию пользователя
- запрос на токен доступа
Мой пример кода с использованием этой библиотеки
protected void Page_Load(object sender, EventArgs e)
{
realm = Request.Url.Scheme + "://" + Request.Url.DnsSafeHost + Request.ApplicationPath;
if (!IsPostBack)
{
if (Request.QueryString["oauth_token"] ==null)
{
MakeRequestForToken();
}
else
{
HandleAuthorizeTokenResponse();
}
}
}
private void MakeRequestForToken()
{
string consumerKey = null;
string consumerSecret = null;
string requestTokenEndpoint = null;
string requestTokenCallback = null;
string authorizeTokenUrl = null;
consumerKey = "my customer key";
consumerSecret = "my customer secret key";
//Twitter
requestTokenEndpoint = "https://api.twitter.com/oauth/request_token";
requestTokenCallback = GetRouteableUrlFromRelativeUrl("oAuthGoolgecsSharp/GoogleOauthTry.aspx");
//Twitter
authorizeTokenUrl = "https://api.twitter.com/oauth/authorize";
if (String.IsNullOrEmpty(consumerKey) || String.IsNullOrEmpty(consumerSecret))
throw new ArgumentException("Please set up your consumer key and consumer secret for the selected provider", "consumerKey or consumerSecret");
// Step 1: Make the call to request a token
var oAuthConsumer = new OAuthConsumer();
var requestToken = oAuthConsumer.GetOAuthRequestToken(requestTokenEndpoint, realm, consumerKey, consumerSecret, requestTokenCallback);
PersistRequestToken(requestToken);
// Step 2: Make a the call to authorize the request token
Response.Redirect(authorizeTokenUrl + "?oauth_token=" + requestToken.Token);
}
/// <summary>
/// Step 3: Exchange the Request Token for an Access Token
/// </summary>
private void HandleAuthorizeTokenResponse()
{
string consumerKey = null;
string consumerSecret = null;
string accessTokenEndpoint = null;
string token = null;
string verifier = null;
provider = "Google";
token = Request.QueryString["oauth_token"];
verifier = Request.QueryString["oauth_verifier"];
//Google
//accessTokenEndpoint = "https://www.google.com/accounts/OAuthGetAccessToken";
//Twitter
accessTokenEndpoint = "https://api.twitter.com/oauth/access_token";
if (String.IsNullOrEmpty(consumerKey) || String.IsNullOrEmpty(consumerSecret))
throw new ArgumentException("Please set up your consumer key and consumer secret for the selected provider", "consumerKey or consumerSecret");
// Exchange the Request Token for an Access Token
var oAuthConsumer = new OAuthConsumer();
var accessToken = oAuthConsumer.GetOAuthAccessToken(accessTokenEndpoint, realm, consumerKey, consumerSecret, token, verifier, GetRequesttoken().TokenSecret);
this.SaveAccessTokken(accessToken);
Response.Redirect("~/TaksList.aspx");
}
RequestToken GetRequesttoken()
{
var requestToken = (RequestToken)Session["RequestToken"];
Session.Remove("RequestToken");
return requestToken;
}
void PersistRequestToken(RequestToken requestToken)
{
Session["RequestToken"] = requestToken;
}
string GetRouteableUrlFromRelativeUrl(string relativeUrl)
{
var url = HttpContext.Current.Request.Url;
return url.Scheme + "://" + url.Authority + VirtualPathUtility.ToAbsolute("/" + relativeUrl);
}
private void SaveAccessTokken(AccessToken tokken)
{
Session.Add("AccessTokken",tokken);
}
- Создание веб-запроса - например http://api.twitter.com/1/statuses/home_timeline.json
- создание подписи с использованием OauthBase.cs
- Создать заголовок авторизации с помощью OAuthUtils.cs с вызовом метода GetUserInfoAuthorizationHeader
- Поместить авторизацию в заголовок запроса
- Отправить запрос и получить данные
См. Мой пример кода private AccessToken _accessToken = null;
protected void Page_Load(object sender, EventArgs e)
{
_accessToken = (AccessToken)Session["AccessTokken"];
string _customerkey = "my customer key";
string _customerSecret = "my customer secret key";
string nostring = "";
string nnString = "";
OAuthBase oauth = new OAuthBase();
//Twitter
Uri t = new Uri("http://api.twitter.com/1/statuses/home_timeline.xml");
string u = oauth.GenerateSignature(t, _customerkey, _customerSecret, _accessToken.Token,
_accessToken.TokenSecret, "GET", oauth.GenerateTimeStamp(),
oauth.GenerateNonce(), out nostring, out nnString);
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(nostring);
request.Method = "GET";
string realm = Request.Url.Scheme + "://" + Request.Url.DnsSafeHost + Request.ApplicationPath;
OAuthUtils util = new OAuthUtils();
AuthorizeHeader h = util.GetUserInfoAuthorizationHeader(t.ToString(), realm, _customerkey, _customerSecret,
_accessToken.Token, _accessToken.TokenSecret,
SignatureMethod.HMACSHA1, "GET");
request.Headers.Add("Authorization",h.ToString());
Response.Write(request.Headers["Authorization"].ToString() + "<br />");
try
{
WebResponse response = request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
string responseString = reader.ReadToEnd();
reader.Close();
Response.Write(responseString);
}
catch (Exception ex)
{
Response.Write(ex.ToString());
//throw;
}
}