使用https://api.twitter.com/1.1/direct_messages.json获取特定用户的直接消息 [英] Get Direct Messages for a particular user using https://api.twitter.com/1.1/direct_messages.json
问题描述
我正在使用https://api.twitter.com/1.1/direct_messages.json来检索特定用户的邮件。
我在使用此URL时默认情况下可以收到20封邮件但是当我想使用这个API的可选参数count将输出限制为20以外时,我得到远程服务器返回错误:(401)未经授权。在这种情况下,请帮助我。
我在这里发布我的代码。
var oauth_token = oauth token;
var oauth_token_secret = oauth token secret 跨度>;
var oauth_consumer_key = 使用者密钥< /跨度>;
var oauth_consumer_secret = 消费者密钥 跨度>;
// oauth实施细节
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();
// message api details
var status = 如果有效,则通过REST API更新状态 ;
var resource_url = https:// api.twitter.com/1.1/direct_messages.json跨度>;
int count = 1 ;
// 创建oauth签名
var baseFormat = oauth_consumer_key = {0}& oauth_nonce = {1}& ; oauth_signature_method = {2} +
& oauth_timestamp = {3}&组oauth_token = {4}&安培; oauth_version = {5}&安培;计数= {6}跨度>;
// 默认为20条消息
// var baseFormat =oauth_consumer_key = {0}& oauth_nonce = {1}& oauth_signature_method = {2}+
// & oauth_timestamp = {3}& oauth_token = {4}& oauth_version = {5}& ; count = {6};
var baseString = string .Format(baseFormat,
oauth_consumer_key,
oauth_nonce,
oauth_signature_method,
oauth_timestamp,
oauth_token,
oauth_version,
Uri.EscapeDataString (count.ToString())
);
baseString = string .Concat( GET&,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)));
}
// 创建请求标题
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)
);
var postBody = count = + Uri.EscapeDataString(count.ToString());
resource_url + = ? + postBody;
// 默认为20条消息
// var postBody =count =+ Uri.EscapeDataString(count.ToString());
// resource_url + =? + postBody;
HttpWebRequest request =(HttpWebRequest)WebRequest.Create(resource_url);
request.Headers.Add( 授权,authHeader);
request.Method = GET;
request.ContentType = application / json; charset = utf-8;
WebResponse response = request.GetResponse();
string responseData = new StreamReader(response.GetResponseStream())。ReadToEnd();
大家好,最后我找到了解决我自己问题的方法。
只需要纠正baseFormat和baseString。
var baseFormat =count = {6}& oauth_consumer_key = {0}& oauth_nonce = {1}& oauth_signature_method = {2} +
& oauth_timestamp = {3}& oauth_token = {4}& oauth_version = {5};
< span class =code-keyword> var baseString = string .Format(baseFormat,
oauth_consumer_key,
oauth_nonce,
oauth_signature_method,
oauth_timestamp,
oauth_token,
oauth_version,
Uri.EscapeDataString(count.ToString())
);
计数将在所有参数之前传递。
谢谢。
< pre> TimelineFormat =https://api.twitter.com/1.1/direct_messages.json?screen_name=\"boddupratusha\"&include_rts=1&exclude_replies=0&count=5,
我使用了这个Url但无法阅读显示的消息远程服务器返回错误:(401)
Plz帮助我...
I am using https://api.twitter.com/1.1/direct_messages.json for retreiving messages for a particular user.
I am able to get 20 messages by default when using this URL but when i want to restrict the output to other than 20 using optional parameter "count" for this API I am getting "The remote server returned an error: (401) Unauthorized." error.
Kindly help me in this scenario.
I am posting my code here.
var oauth_token = "oauth token";
var oauth_token_secret = "oauth token secret";
var oauth_consumer_key = "consumer key";
var oauth_consumer_secret = "consumer secret key";
// oauth implementation details
var oauth_version = "1.0";
var oauth_signature_method = "HMAC-SHA1";
// unique request details
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();
// message api details
var status = "Updating status via REST API if this works";
var resource_url = "https://api.twitter.com/1.1/direct_messages.json";
int count = 1;
// create oauth signature
var baseFormat = "oauth_consumer_key={0}&oauth_nonce={1}&oauth_signature_method={2}" +
"&oauth_timestamp={3}&oauth_token={4}&oauth_version={5}&count={6}";
//for default 20 messages
//var baseFormat = "oauth_consumer_key={0}&oauth_nonce={1}&oauth_signature_method={2}" +
//"&oauth_timestamp={3}&oauth_token={4}&oauth_version={5}&count={6}";
var baseString = string.Format(baseFormat,
oauth_consumer_key,
oauth_nonce,
oauth_signature_method,
oauth_timestamp,
oauth_token,
oauth_version,
Uri.EscapeDataString(count.ToString())
);
baseString = string.Concat("GET&", Uri.EscapeDataString(resource_url), "&", Uri.EscapeDataString(baseString));
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)));
}
// create the request 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)
);
var postBody = "count=" + Uri.EscapeDataString(count.ToString());
resource_url += "?" + postBody;
//for default 20 messages
//var postBody = "count=" + Uri.EscapeDataString(count.ToString());
//resource_url += "?" + postBody;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(resource_url);
request.Headers.Add("Authorization", authHeader);
request.Method = "GET";
request.ContentType = "application/json; charset=utf-8";
WebResponse response = request.GetResponse();
string responseData = new StreamReader(response.GetResponseStream()).ReadToEnd();
Hi All, Finally I found the solution to my own problem.
Just needed to correct the baseFormat and baseString.
var baseFormat = "count={6}&oauth_consumer_key={0}&oauth_nonce={1}&oauth_signature_method={2}" +
"&oauth_timestamp={3}&oauth_token={4}&oauth_version={5}";
var baseString = string.Format(baseFormat, oauth_consumer_key, oauth_nonce, oauth_signature_method, oauth_timestamp, oauth_token, oauth_version, Uri.EscapeDataString(count.ToString()) );
count will be passed prior to all the parameters.
Thanks.
<pre> TimelineFormat = "https://api.twitter.com/1.1/direct_messages.json?screen_name="boddupratusha"&include_rts=1&exclude_replies=0&count=5",
I used this Url but unable to read the messages showingThe remote server returned an error: (401) Plz help me out...
这篇关于使用https://api.twitter.com/1.1/direct_messages.json获取特定用户的直接消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!