嗨,我不能在C#中使用Rest Api向Twitter发布直接消息,请帮助我... [英] Hi I Am Not Able To Post Direct Message To Twitter Using Rest Api In C#, Please Help Me Out..
本文介绍了嗨,我不能在C#中使用Rest Api向Twitter发布直接消息,请帮助我...的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
// aouth
var oauth_token = XXXX; // user
var oauth_token_secret = XXXX;
var oauth_consumer_key = XXXX跨度>; // 这是我的应用
var oauth_consumer_secret = XXXX;
// 请求详细信息
var oauth_version = 1.0;
var oauth_signature_method = HMAC-SHA1 跨度>;
var oauth_nonce = Convert.ToBase64String( new ASCIIEncoding()。GetBytes(DateTime.Now。 Ticks.ToString()));
var timeSpan = DateTime.UtcNow - new DateTime( 1970 , 1 , 1 , 0 , 0 , 0 , 0 ,DateTimeKind.Utc);
var oauth_timestamp = Convert.ToInt64(timeSpan.TotalSeconds).ToString();
// var resource_url =https://api.twitter.com/1.1/statuses/update。 json;
var resource_url = https://api.twitter.com/1.1/direct_messages/new.json跨度>;
var text = 测试消息< /跨度>;
var screen_name = screenname跨度>;
// 加密oAuth签名
< span class =code-keyword> var baseFormat = oauth_consumer_key = {0}& oauth_nonce = {1}& oauth_signature_method = {2} +
& oauth_timestamp = { 3}&安培;组oauth_token = {4}&安培; oauth_version = {5}&安培; SCREEN_NAME = {6}&安培;状态= {7}跨度>;
// & screen_name = {7}& status = {6}
var baseString = string .Format(baseFormat,
oauth_consumer_key,
oauth_nonce ,
oauth_signature_method,
oauth_timestamp,
oauth_token,
oauth_version,
Uri.EscapeDataString(screen_name),
Uri.EscapeDataString(text)
);
baseString = string .Concat( POST&,Uri.EscapeDataString(resource_url),
& ,Uri.EscapeDataString(baseString));
// 加密数据
var compositeKey = string .Concat(Uri.EscapeDataString(oauth_consumer_secret),
&,Uri.EscapeDataString(oauth_token_secret));
string oauth_signature;
使用(HMACSHA1 hasher = new HMACSHA1(ASCIIEncoding.ASCII.GetBytes(compositeKey)))
{
oauth_signature = Convert.ToBase64String(
hasher.ComputeHash(ASCIIEncoding.ASCII.GetBytes(baseString)));
}
// 完成Auth标头
var headerFormat = OAuth oauth_nonce = \\ \\{0} \,oauth_signature_method = \{1} \, +
oauth_timestamp = \{2} \,oauth_consumer_key = \{3} \, +
oauth_token = \{4} \,oauth_signature = \{5} \, +
< span class =code-string> oauth_version = \{6} \;
var authHeader = string .Format(headerFormat,
Uri .EscapeDataString(oauth_nonce),
Uri.EscapeDataString(oauth_signature_method),
Uri.EscapeDataString(oauth_timestamp),
Uri.EscapeDataString(oauth_consumer_key),
Uri.EscapeDataString(oauth_token),
Uri.EscapeDataString(oauth_signature),
Uri.EscapeDataString(oauth_version)
);
// 禁用exptend 100 continue header
var postBody = text = + Uri.EscapeDataString(text);
ServicePointManager.Expect100Continue = false ;
HttpWebRequest request =(HttpWebRequest)WebRequest.Create(resource_url);
request.Headers.Add( 授权,authHeader);
request.Method = POST;
request.ContentType = application / x-www-form-urlencoded;
使用(Stream stream = request.GetRequestStream())
{
byte [] content = ASCIIEncoding.ASCII.GetBytes(postBody);
stream.Write(content, 0 ,content.Length);
}
尝试
{
WebResponse response = request.GetResponse();
ViewBag.Message = response.ToString();
}
catch (WebException e)
{
ViewBag.Message = e.Status;
}
return 查看();
}
public ActionResult关于()
{
ViewBag.Message = 您的应用程序描述页面。;
return 查看();
}
public ActionResult联系人()
{
ViewBag.Message = 您的联系页面。;
}
解决方案
请尝试以下方式:
1)使用text代替状态发送消息
& text = {7}
2)在postBody中添加screen_name。
var postBody =text =+ Uri.EscapeDataString(text)+& screen_name =+ Uri.EscapeDataString(screen_name);
这将解决问题。如果您得到解决方案,请发布。谢谢!块引用>
//aouth var oauth_token = "XXXX"; //user var oauth_token_secret = "XXXX"; var oauth_consumer_key = "XXXX"; //this is my app var oauth_consumer_secret = "XXXX"; //Request details var oauth_version = "1.0"; var oauth_signature_method = "HMAC-SHA1"; var oauth_nonce = Convert.ToBase64String(new ASCIIEncoding().GetBytes(DateTime.Now.Ticks.ToString())); var timeSpan = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); var oauth_timestamp = Convert.ToInt64(timeSpan.TotalSeconds).ToString(); // var resource_url = "https://api.twitter.com/1.1/statuses/update.json"; var resource_url = "https://api.twitter.com/1.1/direct_messages/new.json"; var text = "test message"; var screen_name = "screenname"; //encrypted oAuth signature var baseFormat = "oauth_consumer_key={0}&oauth_nonce={1}&oauth_signature_method={2}" + "&oauth_timestamp={3}&oauth_token={4}&oauth_version={5}&screen_name={6}&status={7}"; //&screen_name={7} &status={6} var baseString = string.Format(baseFormat, oauth_consumer_key, oauth_nonce, oauth_signature_method, oauth_timestamp, oauth_token, oauth_version, Uri.EscapeDataString(screen_name), Uri.EscapeDataString(text) ); baseString = string.Concat("POST&", Uri.EscapeDataString(resource_url), "&", Uri.EscapeDataString(baseString)); //Encrypt data var compositeKey = string.Concat(Uri.EscapeDataString(oauth_consumer_secret), "&", Uri.EscapeDataString(oauth_token_secret)); string oauth_signature; using (HMACSHA1 hasher = new HMACSHA1(ASCIIEncoding.ASCII.GetBytes(compositeKey))) { oauth_signature = Convert.ToBase64String( hasher.ComputeHash(ASCIIEncoding.ASCII.GetBytes(baseString))); } //Finish Auth header var headerFormat = "OAuth oauth_nonce=\"{0}\", oauth_signature_method=\"{1}\", " + "oauth_timestamp=\"{2}\", oauth_consumer_key=\"{3}\", " + "oauth_token=\"{4}\", oauth_signature=\"{5}\", " + "oauth_version=\"{6}\""; var authHeader = string.Format(headerFormat, Uri.EscapeDataString(oauth_nonce), Uri.EscapeDataString(oauth_signature_method), Uri.EscapeDataString(oauth_timestamp), Uri.EscapeDataString(oauth_consumer_key), Uri.EscapeDataString(oauth_token), Uri.EscapeDataString(oauth_signature), Uri.EscapeDataString(oauth_version) ); //Disable exprect 100 continue header var postBody = "text=" + Uri.EscapeDataString(text); ServicePointManager.Expect100Continue = false; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(resource_url); request.Headers.Add("Authorization", authHeader); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; using (Stream stream = request.GetRequestStream()) { byte[] content = ASCIIEncoding.ASCII.GetBytes(postBody); stream.Write(content, 0, content.Length); } try { WebResponse response = request.GetResponse(); ViewBag.Message = response.ToString(); } catch (WebException e) { ViewBag.Message = e.Status; } return View(); } public ActionResult About() { ViewBag.Message = "Your application description page."; return View(); } public ActionResult Contact() { ViewBag.Message = "Your contact page."; }解决方案Please try bellow :
1) Use "text" instead of "status" to send message
&text={7}
2) Add "screen_name" in postBody.
var postBody = "text=" + Uri.EscapeDataString(text) + "&screen_name=" + Uri.EscapeDataString(screen_name);
This will solve the problem. If you get solution please post it. Thanks!
这篇关于嗨,我不能在C#中使用Rest Api向Twitter发布直接消息,请帮助我...的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文