想消耗Twitter search API,我的所有测试都可以,但那些在我的搜索查询中包含空格的测试除外。
例如:使用@RedouaneBali has:mentions
查询进行的搜索会生成以下请求:
Request{method=GET, url=https://api.twitter.com/1.1/tweets/search/30day/dev.json?fromDate=201912261403&toDate=202001251248&maxResults=100&query=%40RedouaneBali%20has%3Amentions, tags={}}
并以此{"error":{"message":"Could not authenticate you."}}
结尾
所以我得出结论,由于空间原因,签名部分是KO(我的查询中没有任何空间,一切正常。)我试图用%20
或+
替换它,但两者都不起作用。我正在使用此Oauth1SigningInterceptor class签署我的请求。
[在内部调试,我看到我的查询参数首先从@RedouaneBali has:mentions
转换为%40RedouaneBali+has%3Amentions
,然后又转换为%2540RedouaneBali%2Bhas%253Amentions
,因此它可能来自此处,但对我来说却不太清楚。有这个双重签名正常吗?
关于如何将其转换为%20
而不是+
或%2B
的任何想法?
这是一个ESCAPER问题,UrlEscapers.urlPathSegmentEscaper()
变换%20
中的空格,而UrlEscapers.urlFormParameterEscaper()
转换+
中的空格。显然,双重转换通常基于twitter文档。参见固定文件here