2012-01-19 3 views
0

트위터에 대한 업데이트를 게시하려면 다음 코드를 사용하고 있습니다. 트위터에 대한 최신 소식

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"); 

는 하나

+0

아마도 그 비밀 키를 SO에 게시하는 것은 좋지 않을 것입니다. 제가 대신 해주었습니다. 이들이 모의 데이터 인 경우 알려 주시면 변경 사항을 되돌릴 것입니다. –

+0

감사합니다, 그냥 거짓 응용 프로그램, – user1157685

+0

이것은 도움이 될 수 있습니다 : [트위터로 업데이트] (http://www.gutgames.com/post/Using-OAuth-to-Send-Updates-to-Twitter-Using-C. aspx) –

답변

0

을 트위터에 상태 업데이트를 게시 할 수있는 코드를 좀 도와 줄래 그리고 당신은 또한 (기본값은 읽기 전용) 읽기/쓰기로 응용 프로그램 당신을 등록해야합니다,

또는 당신은 항상 것 401 오류 코드를 수신하십시오.

행운을 비네.

UPDATE : 이것은 내 코드

OK입니다.

먼저 유틸리티 클래스입니다. 인터넷에서 이러한 메소드를 많이 찾을 수 있다고 생각합니다.

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 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_.~"; 
      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 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
      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(); 
     } 
    } 

이 콘솔 응용 프로그램입니다, u는 그럼 당신은 다음을 위해 당신에게 토큰과 토큰 비밀을 사용하여 PIN 코드

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)); 
    } 
} 

에 의해 토큰을 얻을하는 데 사용할 수 있습니다.

+0

내 응용 프로그램을 읽고 쓰도록 변경했지만 업데이트를 게시 할 수 없습니다. 해당 종류의 오류가 없습니다. – user1157685

+0

응용 프로그램 레지스터를 만드는 데 관련된 단계를 알려줍니다. – user1157685

+0

나는 이러한 시도를했습니다. 그것을 debuuging 한 후, 나는 그 로컬 호스트의 URL을 트위터 API에 url을 입력 한 다음, 그 URL, 액세스 토큰을 사용했다 .i는 약간 혼란 스럽다. 바로 토큰에 어떻게 접근 할 수 있는가? – user1157685

관련 문제