C# 在twitter上发布更新
要将更新发布到twitter,我使用以下代码C# 在twitter上发布更新,c#,C#,要将更新发布到twitter,我使用以下代码 OAuthTokens tokens = new OAuthTokens(); tokens.AccessToken = // My access token //; tokens.AccessTokenSecret = // My access token secret //; tokens.ConsumerKey = // My consumer key //; tokens.ConsumerSecret = // My consumer sec
OAuthTokens tokens = new OAuthTokens();
tokens.AccessToken = // My access token //;
tokens.AccessTokenSecret = // My access token secret //;
tokens.ConsumerKey = // My consumer key //;
tokens.ConsumerSecret = // My consumer secret//;
TwitterResponse<TwitterStatus> tweetResponse = TwitterStatus.Update(tokens, "Hello, #Twitterizer");
OAuthTokens tokens=新的OAuthTokens();
tokens.AccessToken=//我的访问令牌//;
tokens.AccessTokenSecret=//我的访问令牌密码//;
tokens.ConsumerKey=//我的消费者密钥//;
tokens.ConsumerSecret=//我的消费者秘密//;
TwitterResponse tweetResponse=TwitterStatus.Update(标记为“你好,#Twitterizer”);
有人能帮我把状态更新发布到twitter上吗?你还需要将你的应用注册为读/写(默认为只读) 或者您将始终收到401错误代码 祝你好运 更新: 好的,这是我的代码 首先是实用类,我想你可以在互联网上找到很多这样的方法
class Auth {
const string REQUEST_TOKEN_URL = "https://twitter.com/oauth/request_token";
const string ACCESS_TOKEN_URL = "https://twitter.com/oauth/access_token";
const string AUTHORIZE_URL = "https://twitter.com/oauth/authorize";
private Random random = new Random();
public string ConsumerKey { get; private set; }
public string ConsumerSecret { get; private set; }
public string RequestToken { get; private set; }
public string RequestTokenSecret { get; private set; }
public string AccessToken { get; private set; }
public string AccessTokenSecret { get; private set; }
public string UserId { get; private set; }
public string ScreenName { get; private set; }
public Auth(string consumerKey, string consumerSecret) {
ServicePointManager.Expect100Continue = false;
ConsumerKey = consumerKey;
ConsumerSecret = consumerSecret;
}
public Auth(string consumerKey, string consumerSecret, string accessToken, string accessTokenSecret, string userId, string screenName) {
ServicePointManager.Expect100Continue = false;
ConsumerKey = consumerKey;
ConsumerSecret = consumerSecret;
AccessToken = accessToken;
AccessTokenSecret = accessTokenSecret;
UserId = userId;
ScreenName = screenName;
}
public void GetRequestToken() {
SortedDictionary<string, string> parameters = GenerateParameters("");
string signature = GenerateSignature("", "GET", REQUEST_TOKEN_URL, parameters);
parameters.Add("oauth_signature", UrlEncode(signature));
string response = HttpGet(REQUEST_TOKEN_URL, parameters);
Dictionary<string, string> dic = ParseResponse(response);
RequestToken = dic["oauth_token"];
RequestTokenSecret = dic["oauth_token_secret"];
}
public string GetAuthorizeUrl() {
return AUTHORIZE_URL + "?oauth_token=" + RequestToken;
}
public void GetAccessToken(string pin) {
SortedDictionary<string, string> parameters = GenerateParameters(RequestToken);
parameters.Add("oauth_verifier", pin);
string signature = GenerateSignature(RequestTokenSecret, "GET", ACCESS_TOKEN_URL, parameters);
parameters.Add("oauth_signature", UrlEncode(signature));
string response = HttpGet(ACCESS_TOKEN_URL, parameters);
Dictionary<string, string> dic = ParseResponse(response);
AccessToken = dic["oauth_token"];
AccessTokenSecret = dic["oauth_token_secret"];
UserId = dic["user_id"];
ScreenName = dic["screen_name"];
}
public string Get(string url, IDictionary<string, string> parameters) {
SortedDictionary<string, string> parameters2 = GenerateParameters(AccessToken);
foreach (var p in parameters)
parameters2.Add(p.Key, p.Value);
string signature = GenerateSignature(AccessTokenSecret, "GET", url, parameters2);
parameters2.Add("oauth_signature", UrlEncode(signature));
return HttpGet(url, parameters2);
}
public string Post(string url, IDictionary<string, string> parameters) {
SortedDictionary<string, string> parameters2 = GenerateParameters(AccessToken);
foreach (var p in parameters)
parameters2.Add(p.Key, p.Value);
string signature = GenerateSignature(AccessTokenSecret, "POST", url, parameters2);
parameters2.Add("oauth_signature", UrlEncode(signature));
return HttpPost(url, parameters2);
}
private string HttpGet(string url, IDictionary<string, string> parameters) {
WebRequest req = WebRequest.Create(url + '?' + JoinParameters(parameters));
WebResponse res = req.GetResponse();
Stream stream = res.GetResponseStream();
StreamReader reader = new StreamReader(stream);
string result = reader.ReadToEnd();
reader.Close();
stream.Close();
return result;
}
string HttpPost(string url, IDictionary<string, string> parameters) {
byte[] data = Encoding.ASCII.GetBytes(JoinParameters(parameters));
WebRequest req = WebRequest.Create(url);
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = data.Length;
Stream reqStream = req.GetRequestStream();
reqStream.Write(data, 0, data.Length);
reqStream.Close();
WebResponse res = req.GetResponse();
Stream resStream = res.GetResponseStream();
StreamReader reader = new StreamReader(resStream, Encoding.UTF8);
string result = reader.ReadToEnd();
reader.Close();
resStream.Close();
return result;
}
private Dictionary<string, string> ParseResponse(string response) {
Dictionary<string, string> result = new Dictionary<string, string>();
foreach (string s in response.Split('&')) {
int index = s.IndexOf('=');
if (index == -1)
result.Add(s, "");
else
result.Add(s.Substring(0, index), s.Substring(index + 1));
}
return result;
}
private string JoinParameters(IDictionary<string, string> parameters) {
StringBuilder result = new StringBuilder();
bool first = true;
foreach (var parameter in parameters) {
if (first)
first = false;
else
result.Append('&');
result.Append(parameter.Key);
result.Append('=');
result.Append(parameter.Value);
}
return result.ToString();
}
private string GenerateSignature(string tokenSecret, string httpMethod, string url, SortedDictionary<string, string> parameters) {
string signatureBase = GenerateSignatureBase(httpMethod, url, parameters);
HMACSHA1 hmacsha1 = new HMACSHA1();
hmacsha1.Key = Encoding.ASCII.GetBytes(UrlEncode(ConsumerSecret) + '&' + UrlEncode(tokenSecret));
byte[] data = System.Text.Encoding.ASCII.GetBytes(signatureBase);
byte[] hash = hmacsha1.ComputeHash(data);
return Convert.ToBase64String(hash);
}
private string GenerateSignatureBase(string httpMethod, string url, SortedDictionary<string, string> parameters) {
StringBuilder result = new StringBuilder();
result.Append(httpMethod);
result.Append('&');
result.Append(UrlEncode(url));
result.Append('&');
result.Append(UrlEncode(JoinParameters(parameters)));
return result.ToString();
}
private SortedDictionary<string, string> GenerateParameters(string token) {
SortedDictionary<string, string> result = new SortedDictionary<string, string>();
result.Add("oauth_consumer_key", ConsumerKey);
result.Add("oauth_signature_method", "HMAC-SHA1");
result.Add("oauth_timestamp", GenerateTimestamp());
result.Add("oauth_nonce", GenerateNonce());
result.Add("oauth_version", "1.0");
if (!string.IsNullOrEmpty(token))
result.Add("oauth_token", token);
return result;
}
public string UrlEncode(string value) {
string unreserved = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~";
StringBuilder result = new StringBuilder();
byte[] data = Encoding.UTF8.GetBytes(value);
foreach (byte b in data) {
if (b < 0x80 && unreserved.IndexOf((char)b) != -1)
result.Append((char)b);
else
result.Append('%' + String.Format("{0:X2}", (int)b));
}
return result.ToString();
}
private string GenerateNonce() {
string letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
StringBuilder result = new StringBuilder(8);
for (int i = 0; i < 8; ++i)
result.Append(letters[random.Next(letters.Length)]);
return result.ToString();
}
private string GenerateTimestamp() {
TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
return Convert.ToInt64(ts.TotalSeconds).ToString();
}
}
然后您可以使用您的令牌和令牌密码进行下一步操作。我将应用程序更改为读写,但我无法发布任何更新,没有错误,没有类似的错误,您能告诉我创建应用程序注册表所涉及的步骤吗?我尝试过这样做。首先,我构建了一个应用程序。在对其进行解密之后,我用那个本地主机的url在twitter api中输入url,然后我用那个url访问令牌。我当时有点困惑我们怎么能访问令牌。是的,我也尝试过,一开始失败了。然后,我删除了我的应用程序,并按照以下步骤操作:1:注册为读/写;2:get pincode 3:get token and token secret 4:create post data(互联网上的解决方案太多)5:post data。然后最后成功。我还没有得到这个错误,你输入了正确的消费者密钥和消费者密钥吗?这可能会有帮助:可能不是一个好主意发布这些密钥,所以-我已经为你删除了它们。如果这些是模拟数据,请告诉我,我将恢复更改。谢谢你,这只是一个虚拟应用程序,
class Program {
const string CONSUMER_KEY = "yours CONSUMER_KEY";
const string CONSUMER_SECRET = "yours CONSUMER_SECRET";
static void Main(string[] args)
{
Auth auth = new Auth(CONSUMER_KEY, CONSUMER_SECRET);
auth.GetRequestToken();
Console.WriteLine("Get PinCode from here.");
Console.WriteLine(auth.GetAuthorizeUrl());
Console.Write("PinCode:");
string pin = Console.ReadLine().Trim();
auth.GetAccessToken(pin);
Console.WriteLine("AccessToken: " + auth.AccessToken);
Console.WriteLine("AccessTokenSecret: " + auth.AccessTokenSecret);
Console.WriteLine("UserId: " + auth.UserId);
Console.WriteLine("ScreenName: " + auth.ScreenName);
Console.WriteLine("yours status.");
string status = Console.ReadLine();
parameters.Clear();
parameters.Add("status", auth.UrlEncode(status));
Console.WriteLine(auth.Post("http://twitter.com/statuses/update.xml", parameters));
}
}