C# 我的Twitter oauthToken和oauthTokenSecret在哪里?
我刚刚为一个过于简单的会议演示创建了一个Twitter“应用程序”,其中我的软件工具应该通过dotnet以编程方式向Twitter发送帖子。我正在使用github的C# 我的Twitter oauthToken和oauthTokenSecret在哪里?,c#,.net,twitter,twitter-oauth,C#,.net,Twitter,Twitter Oauth,我刚刚为一个过于简单的会议演示创建了一个Twitter“应用程序”,其中我的软件工具应该通过dotnet以编程方式向Twitter发送帖子。我正在使用github的LinqToTwitter库。我很容易找到我的消费者密钥(API密钥),消费者密钥(API密钥),accessToken和accessTokenSecret,如下: 但是LinqToTwitter还需要一个oauthToken和oauthTokenSecret,我在Twitter应用程序设置或帐户设置中找不到它。我在哪里可以找到这两
LinqToTwitter
库。我很容易找到我的消费者密钥(API密钥)
,消费者密钥(API密钥)
,accessToken
和accessTokenSecret
,如下:
但是LinqToTwitter还需要一个oauthToken
和oauthTokenSecret
,我在Twitter应用程序设置或帐户设置中找不到它。我在哪里可以找到这两个值?我找到了一段非常有效的c#示例代码,并发现这两个额外的键是不必要的(或者可能是自动生成的)。下面是一段简单的代码,它非常适合在自己的帐户上发布twitter帖子:
using System;
using System.Configuration;
using System.IO;
using System.Net;
using System.Security.Cryptography;
using System.Text;
namespace TwitterTest
{
class Program
{
static void Main(string[] args)
{
var tweet = new Twitter();
tweet.SendTweet("Test from Visual Studio @ " + DateTime.Now);
Console.WriteLine("Tweet sent!");
Console.ReadLine();
}
}
public class Twitter
{
private string oAuthConsumerKey = ConfigurationManager.AppSettings["ConsumerKey"];
private string oAuthConsumerSecret = ConfigurationManager.AppSettings["ConsumerSecret"];
private string accessToken = ConfigurationManager.AppSettings["AccessToken"];
private string accessTokenSecret = ConfigurationManager.AppSettings["AccessTokenSecret"];
string oAuthUrl = "https://api.twitter.com/1.1/statuses/update.json";
public void SendTweet(string message)
{
string authHeader = GenerateAuthorizationHeader(message);
string postBody = "status=" + Uri.EscapeDataString(message);
HttpWebRequest authRequest = (HttpWebRequest)WebRequest.Create(oAuthUrl);
authRequest.Headers.Add("Authorization", authHeader);
authRequest.Method = "POST";
authRequest.UserAgent = "OAuth gem v0.4.4";
authRequest.Host = "api.twitter.com";
authRequest.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
authRequest.ServicePoint.Expect100Continue = false;
authRequest.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
using (Stream stream = authRequest.GetRequestStream())
{
byte[] content = Encoding.UTF8.GetBytes(postBody);
stream.Write(content, 0, content.Length);
}
WebResponse authResponse = authRequest.GetResponse();
authResponse.Close();
}
private string GenerateAuthorizationHeader(string status)
{
string signatureMethod = "HMAC-SHA1";
string version = "1.0";
string nonce = GenerateNonce();
double timestamp = ConvertToUnixTimestamp(DateTime.Now);
string dst = string.Empty;
dst = string.Empty;
dst += "OAuth ";
dst += string.Format("oauth_consumer_key=\"{0}\", ", Uri.EscapeDataString(oAuthConsumerKey));
dst += string.Format("oauth_nonce=\"{0}\", ", Uri.EscapeDataString(nonce));
dst += string.Format("oauth_signature=\"{0}\", ", Uri.EscapeDataString(GenerateOauthSignature(status, nonce, timestamp.ToString())));
dst += string.Format("oauth_signature_method=\"{0}\", ", Uri.EscapeDataString(signatureMethod));
dst += string.Format("oauth_timestamp=\"{0}\", ", timestamp);
dst += string.Format("oauth_token=\"{0}\", ", Uri.EscapeDataString(accessToken));
dst += string.Format("oauth_version=\"{0}\"", Uri.EscapeDataString(version));
return dst;
}
private string GenerateOauthSignature(string status, string nonce, string timestamp)
{
string signatureMethod = "HMAC-SHA1";
string version = "1.0";
string result = string.Empty;
string dst = string.Empty;
dst += string.Format("oauth_consumer_key={0}&", Uri.EscapeDataString(oAuthConsumerKey));
dst += string.Format("oauth_nonce={0}&", Uri.EscapeDataString(nonce));
dst += string.Format("oauth_signature_method={0}&", Uri.EscapeDataString(signatureMethod));
dst += string.Format("oauth_timestamp={0}&", timestamp);
dst += string.Format("oauth_token={0}&", Uri.EscapeDataString(accessToken));
dst += string.Format("oauth_version={0}&", Uri.EscapeDataString(version));
dst += string.Format("status={0}", Uri.EscapeDataString(status));
string signingKey = string.Empty;
signingKey = string.Format("{0}&{1}", Uri.EscapeDataString(oAuthConsumerSecret), Uri.EscapeDataString(accessTokenSecret));
result += "POST&";
result += Uri.EscapeDataString(oAuthUrl);
result += "&";
result += Uri.EscapeDataString(dst);
HMACSHA1 hmac = new HMACSHA1();
hmac.Key = Encoding.UTF8.GetBytes(signingKey);
byte[] databuff = System.Text.Encoding.UTF8.GetBytes(result);
byte[] hashbytes = hmac.ComputeHash(databuff);
return Convert.ToBase64String(hashbytes);
}
private string GenerateNonce()
{
string nonce = string.Empty;
var rand = new Random();
int next = 0;
for (var i = 0; i < 32; i++)
{
next = rand.Next(65, 90);
char c = Convert.ToChar(next);
nonce += c;
}
return nonce;
}
public static double ConvertToUnixTimestamp(DateTime date)
{
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
TimeSpan diff = date.ToUniversalTime() - origin;
return Math.Floor(diff.TotalSeconds);
}
}
}
使用系统;
使用系统配置;
使用System.IO;
Net系统;
使用System.Security.Cryptography;
使用系统文本;
名称空间twitter测试
{
班级计划
{
静态void Main(字符串[]参数)
{
var tweet=newtwitter();
SendTweet(“从VisualStudio@+DateTime.Now进行测试”);
Console.WriteLine(“Tweet已发送!”);
Console.ReadLine();
}
}
公共类推特
{
私有字符串oAuthConsumerKey=ConfigurationManager.AppSettings[“ConsumerKey”];
私有字符串OAuthConsumerCret=ConfigurationManager.AppSettings[“ConsumerCret”];
私有字符串accessToken=ConfigurationManager.AppSettings[“accessToken”];
私有字符串accessTokenSecret=ConfigurationManager.AppSettings[“accessTokenSecret”];
字符串OAuthull=”https://api.twitter.com/1.1/statuses/update.json";
公共无效SendTweet(字符串消息)
{
字符串authHeader=GenerateAuthorizationHeader(消息);
string postBody=“status=”+Uri.EscapeDataString(消息);
HttpWebRequest authRequest=(HttpWebRequest)WebRequest.Create(oauthull);
添加(“授权”,authHeader);
authRequest.Method=“POST”;
authRequest.UserAgent=“OAuth gem v0.4.4”;
authRequest.Host=“api.twitter.com”;
authRequest.ContentType=“application/x-www-form-urlencoded;charset=UTF-8”;
authRequest.ServicePoint.Expect100Continue=false;
authRequest.AutomaticDecompression=DecompressionMethods.GZip | DecompressionMethods.Deflate;
使用(Stream-Stream=authRequest.GetRequestStream())
{
byte[]content=Encoding.UTF8.GetBytes(postBody);
stream.Write(content,0,content.Length);
}
WebResponse authResponse=authRequest.GetResponse();
authResponse.Close();
}
私有字符串GenerateAuthorizationHeader(字符串状态)
{
字符串signatureMethod=“HMAC-SHA1”;
字符串version=“1.0”;
字符串nonce=generateOnce();
double timestamp=converttounix timestamp(DateTime.Now);
string dst=string.Empty;
dst=string.Empty;
dst+=“OAuth”;
dst+=string.Format(“oauth\u consumer\u key=\”{0}\,”,Uri.EscapeDataString(oAuthConsumerKey));
dst+=string.Format(“oauth\u nonce=\”{0}\”,“,Uri.EscapeDataString(nonce));
dst+=string.Format(“oauth\u签名=\”{0}\”,“,Uri.EscapeDataString(GenerateAuthSignature(status,nonce,timestamp.ToString()));
dst+=string.Format(“oauth\u签名\u方法=\”{0}\,”,Uri.EscapeDataString(signatureMethod));
dst+=string.Format(“oauth\u timestamp=\”{0}\”,“,timestamp);
dst+=string.Format(“oauth\u令牌=\”{0}\”,“,Uri.EscapeDataString(accessToken));
dst+=string.Format(“oauth\u version=\“{0}\”,Uri.EscapeDataString(version));
返回dst;
}
私有字符串GenerateAuthSignature(字符串状态、字符串nonce、字符串时间戳)
{
字符串signatureMethod=“HMAC-SHA1”;
字符串version=“1.0”;
字符串结果=string.Empty;
string dst=string.Empty;
dst+=string.Format(“oauth_consumer_key={0}&”,Uri.EscapeDataString(oAuthConsumerKey));
dst+=string.Format(“oauth_nonce={0}&”,Uri.EscapeDataString(nonce));
dst+=string.Format(“oauth_signature_method={0}&”,Uri.EscapeDataString(signatureMethod));
dst+=string.Format(“oauth_timestamp={0}&”,timestamp);
dst+=string.Format(“oauth_令牌={0}&”,Uri.EscapeDataString(accessToken));
dst+=string.Format(“oauth_version={0}&”,Uri.EscapeDataString(version));
dst+=string.Format(“status={0}”,Uri.EscapeDataString(status));
string signingKey=string.Empty;
signingKey=string.Format(“{0}&{1}”,Uri.EscapeDataString(OAuthConsumerCret),Uri.EscapeDataString(accessTokenSecret));
结果+=“发布&”;
结果+=Uri.EscapeDataString(OAuthull);
结果+=“&”;
结果+=Uri.EscapeDataString(dst);
HMACSHA1 hmac=新的HMACSHA1();
hmac.Key=Encoding.UTF8.GetBytes(signingKey);
byte[]databuff=System.Text.Encoding.UTF8.GetBytes(结果);
byte[]hashbytes=hmac.ComputeHash(databuff);
返回Convert.ToBase64String(hashbytes);
}
私有字符串生成器()
{
字符串nonce=string.Empty;
var rand=new Random();
int next=0;
对于(变量i=0;i<32;i++)
{
next=rand.next(65,90);
char c=Convert.ToChar(下一步);
nonce+=c;
}
返回当前值;
}
公共静态双时间戳(
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="ConsumerKey" value="xxx"/>
<add key="ConsumerSecret" value="xxx"/>
<add key="AccessToken" value="xxx"/>
<add key="AccessTokenSecret" value="xxx"/>
</appSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
</configuration>