1

我遇到了包括新 Twitter 搜索 API(版本 1.1)查询中的 count 参数在内的问题。如果我在没有“count”参数的情况下执行查询,我会获得 15 个默认结果。同时,如果我包含 count 参数,我会得到 401 Unauthorized Error。

您将在下文中找到我的 C# 代码的部分摘录。

1) 最初,baseString 变量的结尾设置为“q=Test&count=100”。

2)将baseString变量传递给EscapeDataString函数后,结尾变成q%3DTest%26count%3D100,按照预期格式化为百分比编码。

3)最后提交的resource_url如下: https ://api.twitter.com/1.1/search/tweets.json?q=Test&count=100

var resource_url = "https://api.twitter.com/1.1/search/tweets.json";

var baseFormat = "oauth_consumer_key={0}&oauth_nonce={1}&oauth_signature_method={2}&oauth_timestamp={3}&oauth_token={4}&oauth_version={5}&q={6}&count={7}";

var baseString = string.Format(baseFormat,
oauth_consumer_key,
oauth_nonce,
oauth_signature_method,
oauth_timestamp,
oauth_token,
oauth_version,
Uri.EscapeDataString(q),
Uri.EscapeDataString(count)
);

baseString = string.Concat("GET&", Uri.EscapeDataString(resource_url), "&", Uri.EscapeDataString(baseString));



var postBody = "q=" + Uri.EscapeDataString(q) + "&count=" + Uri.EscapeDataString(count);
resource_url += "?" + postBody;

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(resource_url);

有人知道为什么我会收到此 401 错误吗?

4

2 回答 2

0

我有类似的问题,当你生成 OAuth 签名时,Twitter 似乎对这个字符串的格式很挑剔。我发现即使重新排序变量也会导致身份验证错误。尝试用下面重新排序的代码替换代码中的特定行,希望对您有所帮助。

var resource_url = "https://api.twitter.com/1.1/search/tweets.json";
var tweet_query = "Test";
var tweet_count ="5";

var baseFormat = "count={7}&oauth_consumer_key={0}&oauth_nonce={1}&oauth_signature_method={2}&oauth_timestamp={3}&oauth_token={4}&oauth_version={5}&q={6}";

var baseString = string.Format(baseFormat,
oauth_consumer_key,
oauth_nonce,
oauth_signature_method,
oauth_timestamp,
oauth_token,
oauth_version,
Uri.EscapeDataString(tweet_query),
Uri.EscapeDataString(tweet_count)
);



var postBody = string.Format("q={0}&count={1}", Uri.EscapeDataString(tweet_query), Uri.EscapeDataString(tweet_count));
于 2013-09-19T13:45:13.573 回答
0

@JF0001

是的,我有同样的问题,但 johnHk 已经有了正确的答案。这只是位置问题。

当我使用它时,它不起作用:

base_Format = "oauth_consumer_key={0}&oauth_nonce={1}&oauth_signature_method={2}" + "&oauth_timestamp={3}&oauth_token={4}&oauth_version={5}&q={6}&result_type={7}&count={8 }"

但如果我使用它,它的工作:

base_Format = "count={8}&oauth_consumer_key={0}&oauth_nonce={1}&oauth_signature_method={2}" + "&oauth_timestamp={3}&oauth_token={4}&oauth_version={5}&q={6}&result_type={7 }"

看看“count=”参数,哈哈只是把它重新排序到第一位。

于 2015-05-06T02:32:44.477 回答