Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)
Paste
Pasted as C# by 13470 ( 16 years ago )
using System;
using System.Net;
using System.Linq;
using System.Text;
using System.Windows;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Security.Cryptography;
using OAuthLibrary;
/**
using System.Collections.Generic;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
**/
namespace twi
{
/// <summary>
/// Логика взаимодействия для Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
Auth();
}
private static void Auth()
{
var url = "http://twitter.com/oauth/request_token";
var timestamp = OAuth.CreateTimestamp().ToString();
var nonce = OAuth.CreateNonce().ToString();
var oauthParameters = new NameValueCollection
{
{"oauth_timestamp", timestamp},
{"oauth_nonce", nonce},
{"oauth_version", "1.0"},
{"oauth_signature_method", "HMAC-SHA1"},
{"oauth_consumer_key", "tjbyyXz3M8w3s2HrlbwCDg"}
};
url = OAuth.NormalizeUrl(url);
var parameters = OAuth.NormalizeRequestParameters(oauthParameters);
var signatureBase = OAuth.ConcatenateRequestElements("GET", url, parameters);
var signature = OAuth.CreateSignature(signatureBase, "atMbq2EyhSMg5BhGU1nUWi6gf172p4Bi04BcUue4c", null);
oauthParameters.Add("oauth_signature", signature);
var header = new StringBuilder();
header.Append("OAuth realm="Twitter API" ");
for (var i = 0; i < oauthParameters.Count; i++)
{
var key = oauthParameters.GetKey(i);
var pair = key + "="" + oauthParameters[key] + """;
header.Append(pair);
if (i < oauthParameters.Count - 1)
{
header.Append(",");
}
}
var request = (HttpWebRequest)WebRequest.Create(url);
request.Headers["Authorization"] = header.ToString();
}
}
}
namespace OAuthLibrary
{
public static class OAuth
{
public static long CreateTimestamp() // Generating Timestamp
{
var now = DateTime.UtcNow;
var then = new DateTime(1970, 1, 1);
var timespan = (now - then);
var timestamp = (long)timespan.TotalSeconds;
return timestamp;
}
private const string ALPHANUMERIC =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
public static string CreateNonce() // Generating nonce
{
var sb = new StringBuilder();
var random = new Random();
for (var i = 0; i <= 12; i++)
{
var index = random.Next(ALPHANUMERIC.Length);
sb.Append(ALPHANUMERIC[index]);
}
return sb.ToString();
}
public static string NormalizeUrl(string url)
{
Uri uri;
if (Uri.TryCreate(url, UriKind.Absolute, out uri))
{
string port = "";
if (uri.Scheme.Equals("http") && uri.Port != 80 ||
uri.Scheme.Equals("https") && uri.Port != 443 ||
uri.Scheme.Equals("ftp") && uri.Port != 20)
{
port = ":" + uri.Port;
}
url = uri.Scheme + "://" + uri.Host + port + uri.AbsolutePath;
}
return url;
}
public static string NormalizeRequestParameters
(NameValueCollection parameters)
{
var sb = new StringBuilder();
var list = new List <NameValuePair>();
foreach(var name in parameters.AllKeys)
{
var value = Uri.EscapeDataString(parameters[name]);
var item = new NameValuePair { Name = name, Value = value };
if (list.Contains(item))
{
throw new ArgumentException(
"Cannot add duplicate parameters");
}
list.Add(item);
}
list.Sort((left, right) =>
{
if (left.Name.Equals(right.Name))
{
return left.Value.CompareTo(right.Value);
}
return left.Name.CompareTo(right.Name);
});
foreach(var item in list)
{
sb.Append(item.Name + "=" + item.Value);
if (list.IndexOf(item) < list.Count - 1)
{
sb.Append("&");
}
}
return sb.ToString();
}
public static string ConcatenateRequestElements
(string method, string url, string parameters)
{
url = Uri.EscapeDataString(url);
parameters = Uri.EscapeDataString(parameters);
var sb = new StringBuilder();
sb.Append(method.ToUpper()).Append("&");
sb.Append(url).Append("&");
sb.Append(parameters);
return sb.ToString();
}
public static string CreateSignature
(string signatureBase, string consumerSecret, string tokenSecret)
{
if (tokenSecret == null)
{
tokenSecret = string.Empty;
}
consumerSecret = Uri.EscapeDataString(consumerSecret);
tokenSecret = Uri.EscapeDataString(tokenSecret);
var key = String.Concat(consumerSecret, "&", tokenSecret);
var keyBytes = Encoding.UTF8.GetBytes(key);
var signatureMethod = new HMACSHA1(keyBytes);
var data = Encoding.ASCII.GetBytes(signatureBase);
var hash = signatureMethod.ComputeHash(data);
var signature = Convert.ToBase64String(hash);
signature = Uri.EscapeDataString(signature);
return signature;
}
private class NameValuePair
{
public string Name { get; set; }
public string Value { get; set; }
public bool Equals(NameValuePair other)
{
return Equals(other.Name, Name) && Equals(other.Value, Value);
}
public override bool Equals(object obj)
{
return Equals((NameValuePair)obj);
}
public override int GetHashCode()
{
return 0;
}
}
}
}
Revise this Paste