使用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

查看:119
本文介绍了使用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 showing

The remote server returned an error: (401)
Plz help me out...


这篇关于使用https://api.twitter.com/1.1/direct_messages.json获取特定用户的直接消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆