【发布时间】:2020-01-14 19:29:23
【问题描述】:
我正在使用 Matlab 中的 Twitter API,特别是通过 Datafeed Toolbox 中的 twitter 类。
我基本上遵循了官方文档中的example code。我在我的 Twitter 开发者页面中创建了一个 Twitter 应用程序,并获得了它的 API 密钥和访问令牌。有了这些,我可以使用来自 Matlab 的 Twitter 标准搜索 API:
c = twitter(consumerkey,consumersecret,accesstoken,accesstokensecret);
% The variables 'consumerkey' etc are defined as character vectors
s = search(c,tweetquery,'count',100); % this works
现在我想使用 Premium search API。这有two endpoints 用于访问推文:
- 30 天端点:提供过去 30 天的推文。
- 完整存档端点:提供对自 2006 年 3 月第一条推文的完整和即时访问。
此外,Premium API 具有two tiers 的访问权限:
- 免费沙盒访问权限,可进行初始测试和开发。
- 付费高级版访问权限,提供更多访问权限。
与付费访问相比,上面的链接指定了与沙盒相关的限制。
我正在尝试使用具有 沙盒 访问权限的 full-archive 端点。为此,我必须在 Twitter 上创建一个 developer environment,并将其命名为 dev。
Matlab 的twitter 类中的search 方法(如上所述,适用于标准访问)似乎不适用于高级访问。但我注意到search 实际上调用了getdata,后者确实适用于高级访问,如下所示。首先,需要定义 Premium 访问 URL:
c.URL = 'https://api.twitter.com/1.1/tweets/search/fullarchive/dev.json';
然后以下语法起作用:
s = getdata(c,c.URL,'query','Jimi Hendrix'); % this works
我还能够在查询字符串中添加operators,例如指定地理位置范围或将搜索限制为包含图像的推文:
s = getdata(c,c.URL,'query','place:"Palo Alto"'); % this works
s = getdata(c,c.URL,'query','Robert Smith bounding_box:[-0.2 51.4 0.1 51.6]') % this works
但是,这是我的问题,我无法使用 Twitter API 中定义的其他 request parameters 来优化搜索,例如 fromDate、toDate或maxResults:
s = getdata(c,c.URL,'query','John Frusciante', 'fromDate', '201708130000') % doesn't work
s = getdata(c,c.URL,'query','Rob Scallon', ...
'fromDate', '201708130000', 'toDate', '201708150000') % doesn't work
s = getdata(c,c.URL,'query','Michael Lemmo', 'maxResults', '20') % doesn't work
以上所有都返回 HTTP/1.1 422 Unprocessable Entity 错误。
我的语法不正确吗?也许fromDate 等参数必须是查询字符串的一部分?或者高级搜索的沙盒层可能不支持这些参数?
对于上下文,我don't really know 像 endpoint、tier、developer environment 和 token 这样的所有术语是什么意思,但我还是想make this work。
【问题讨论】:
-
按照developer.twitter.com/en/docs/tweets/search/api-reference/… 的描述,您所谓的“添加请求参数”是为
POST /search/:product类型的请求定义的。这些是 HTTP POST 请求,您可以尝试使用postdata(in.mathworks.com/help/datafeed/twitter.postdata.html) 代替getdata。虽然它们的用法几乎相同,但您需要将参数作为 JSOn 对象发送。 -
@pii_ke 它有效!谢谢你。愿意将其发布为答案,以便我接受吗?例如
s = postdata(c,c.URL,'query','John Frusciante', 'fromDate', '201708130000')有效(与我的问题完全相同,但使用postdata而不是getdata) -
完成。对
postdata的相同调用很好。我认为postdata在内部处理将参数转换为适当的格式。