C# 我的Twitter oauthToken和oauthTokenSecret在哪里?

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应用程序设置或帐户设置中找不到它。我在哪里可以找到这两

我刚刚为一个过于简单的会议演示创建了一个Twitter“应用程序”,其中我的软件工具应该通过dotnet以编程方式向Twitter发送帖子。我正在使用github的
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>