开发区域

MATLAB高级软件开发

在MATLAB中使用HTTP接口访问Twitter

各位,今天我们有一个很好的博客合作。如果你还没看过,古原竹内今天刚在洛伦的博客上发帖来帮助你分析假新闻.然而,他今天也在这里教你如何钓鱼,所以你被授权使用协议在互联网上传输超文本!这是古原……

说到Twitter,我们通常使用的工具是古老的Twitty通过弗拉基米尔•Bondarenko案.Twitty自2013年7月以来就没有更新过,你可能想利用MATLAB中的新特性,比如字符串数组而且jsonencode而且jsondecode功能。

R2016b中引入的一个令人兴奋的新特性是HTTP接口,我们可以使用它来访问twitter API并处理它的OAuth要求没有Twitty,如果你想滚动自己的工具。让我们以搜索与NASA相关的推文为例。

内容

Twitty作为参考

Twitty仍然是我们如何处理的一个很好的参考OAuth身份验证,这是照顾callTwitterAPI方法。我将详细介绍这个方法,在适用的地方用HTTP Interface替换Java调用。接下来请检查这个图

dbtypetwitty_1.1.1 / twitty.m1816:1819
1816 %%主API调用者1817方法(Access = private) 1818函数S = callTwitterAPI(twtr,httpMethod,url,params,~) 1819 %调用twitter API。

Twitter的凭证

我猜你已经知道了你的开发人员证书并将Twitty下载到当前文件夹中。工作区变量信誉应该将您的凭据包含在如下格式的结构中:

学分=结构;%的例子信誉。ConsumerKey =“你的消费者密钥”;信誉。ConsumerSecret =“你的消费秘密”;信誉。AccessToken =“你的令牌”;信誉。AccessTokenSecret =“你象征性的秘密”;负载信誉载入我的真实凭证

百分比编码

Twitter文档表示使用符合* *的正确百分比编码非常重要RFC 3986,章节2.1.Java的URLEncoder.encode除了一个空间,几乎所有的东西都变成了“+”而不是% 20的.让我们用一个匿名函数来解决这个问题pctencode.Twitty也有同样的做法。

Pctencode = @(str)...%匿名函数替换(char (java.net.URLEncoder.encode (str,“utf - 8”)),“+”% 20的);查询='matlab http接口(R2016b新增)'%样本文本编码disp (pctencode(查询)%编码文本
matlab % 20 http % 20接口% % 20 r2016b 28新% 20 20% % 29

Twitter搜索API

现在让我们试试Twitter搜索API搜索关于NASA的推文。我还将使用字符串数组来向量化字符串处理。

base_url =“https://api.twitter.com/1.1/search/tweets.json”%搜索API URLParams = struct;初始化参数参数个数。Q = pctencode(美国宇航局的);搜索项百分比参数个数。Include_entities = urlencode(“真正的”);%搜索参数Keys = string(fieldnames(params));%获取字段名Values = string(struct2cell(params));% get字段值%矢量化字符串处理键=键+“=”% add =值=值+“&”% add &queryStr = join([键,值],);%连接列queryStr = join(queryStr(:)),);%转换为单个字符串queryStr{1}(end) = [];%移除多余&disp (queryStr)%打印字符串
q = nasa&include_entities = true

设置OAuth参数进行认证

Twitter文档还涵盖了许多其他需求,以便正确地实现OAuth身份验证。

  • 声明OAuth版本
参数个数。oauth_version =“1.0”
  • 通过生成随机字母数字序列为HTTP请求创建唯一的令牌。
参数个数。Oauth_nonce = replace([num2str(now) num2str(rand)],“。”);
  • 创建一个以秒数为单位的时间戳,从Unix纪元开始使用datetime数组
Epoch = datetime(1970 - 01 - 01 t00:00:00z“InputFormat”...“yyyy-MM-dd“T”HH: mm: ssXXX”“时区”UTC的);Curr =日期时间(“现在”“时区”UTC的“格式”...“yyyy-MM-dd“T”HH: mm: ssXXX”);参数个数。Oauth_timestamp = int2str(seconds(curr - epoch));
  • 获取用户凭证。
参数个数。oauth_consumer_key = creds.ConsumerKey;参数个数。oauth_token = creds.AccessToken;
  • 声明HTTP请求签名加密方案,必须为HMAC-SHA1。
sigMethod =“HMAC-SHA1”;参数个数。oauth_signature_method = sigMethod;

现在我们可以用矢量化字符串处理把它们放在一起。

Params = orderfields(Params);对字段排序Keys = string(fieldnames(params));%获取字段名Values = string(struct2cell(params));% get字段值键=键+“=”% add =值=值+“&”% add &oauthStr = join([键,值],);%连接列oauthStr = join(oauthStr(:)),);%转换为单个字符串oauthStr{1}(end) = [];%移除多余&

使用HMAC-SH1加密生成签名

创建签名基字符串和签名密钥。

httpMethod = string(“得到”);设置HTTP获取方法sigStr = upper(httpMethod);将其添加到sigStrsigStr = [sigStr pctencode(base_url)];添加基本UrlsigStr = [sigStr pctencode(char(oauthStr))];% add oauthStr . %sigStr = char(join(sigStr,“&”));用&连接他们sigKey = [creds.]ConsumerSecret“&”creds.AccessTokenSecret];创建sigKey

像Twitty一样使用Java使用HMAC-SHA1生成签名。

进口javax.crypto.Mac%导入Java库进口javax.crypto.spec.SecretKeySpec% key规格方法进口org.apache.commons.codec.binary.Base64% base64编解码算法= strrep(sigMethod,“- - -”);%使用HMAC-SHA1key = SecretKeySpec(int8(sigKey),算法);% get键mac = mac . getinstance(算法);%消息认证代码mac.init(关键);初始化MACmac.update (int8 (sigStr));添加基本字符串参数个数。oauth_signature =...%获取签名char (Base64.encodeBase64 (mac.doFinal) ');Params = orderfields(Params);% order字段

构建OAuth头文件

将签名添加到参数后,我们现在可以构建OAuth报头。

键=字段名(params);%获取字段名isOauth = contains(key,oauth的);% oauth参数键= cellfun(pctencode,键,“UniformOutput”、假);%百分比编码键键=字符串(键)+“=””%转换为字符串,并添加="Values = struct2cell(params);% get字段值值= cellfun(pctencode, Values,“UniformOutput”、假);百分比-编码值Values =字符串(Values) +”,“%转换为字符串并添加",Oauth_header = join([键,值],);%连接列oauth_header = oauth_header(isOauth,:);%只保留OAuth参数oauth_header =OAuth的+加入(oauth_header (:),);%转换为单个字符串Oauth_header {1}(end-1:end) = [];%移除多余"

发送HTTP请求

到目前为止,我们所做的一切都集中在这里,您将看到如何使用HTTP接口函数来发送HTTP请求,例如matlab.net.URImatlab.net.http.RequestMethodmatlab.net.http.field.AuthenticateField等。为了重现性,我将加载之前保存的响应对象。

进口matlab.net.URI%缩短库调用进口matlab.net.http.RequestMethod;进口matlab.net.http.RequestMessage;进口matlab.net.http.field.AuthorizationField;进口matlab.net.http.field.ContentTypeField;connURI = URI(base_url,queryStr);创建URI obj方法= RequestMethod.(char(httpMethod));创建方法objauth = AuthorizationField(“授权”, oauth_header);% create auth字段objct_value =“应用程序/ x-www-form-urlencoded”%内容类型content_type = ContentTypeField(ct_value);%创建内容类型objHeader = [auth content_type];%合并报头字段request = RequestMessage(方法,报头);%创建请求response = send(请求,connURI);发送HTTP请求的百分比负载响应%负载节省响应disp(响应)
ResponseMessage属性:StatusLine: ' 200 OK' StatusCode: OK头:[1×25 matlab.net.http.HeaderField]体:[1×1 matlab.net.http.MessageBody]完成:0

反应过程

Twitter API以JSON格式返回响应,但MATLAB中的HTTP接口自动将其解析为结构数组。现在您可以使用您所选择的任何熟悉的MATLAB函数来处理它。

如果字符串(字段名(response.Body.Data)) ~ =“错误”%如果没有错误s = response. body . data .status;%获得推文如果~ isempty ()%如果不为空推文= cellfun(@(x) x.text, s,“UniformOutput”, 0);%提取文本Tweets = char(replace(Tweets,char(10)),' '));%删除新行Tweets = string(Tweets (:,1:70)) +“……”截断推文disp(微博)结束结束
“RT @RogueNASA:还剩10天11个小时。我们已经快到1美元了……”“RT @gp_pulipaka: NASA为自主探索测试人工智能。# BigData # D……”“RT @BillP____: - Που πας, Παιδί μου;- Στο Διάστημα με τον Αλέξη, Μάν…”“世纪营:冰封,但只能这么久:当天图片http…”“RT @SAI:这个超级强大的望远镜正在观察第一个黑色h…”“RT @medsymeds: Minsan talaga mahirap intindihin ang mga magulang kahit…”“RT @hot_jmea: Haayy。 naku Yuan...tlaga nga nmang nasa huli ang pagsisi..." "RT @WIRED:  The traditional, white NASA space suit just got a makeo..." "RT @ariscfu: Νάτος και ο Βέρνερ φον Μπράουν... #greek_NASA https://t.c..." "RT @LitsaXarou: Δυο πράγματα δεν τόλμησε να κανει κανει ο Γιώργος Παπα..." "Simula nung jan. 26 nung nalaman ko, lagi nasa isip ko "MAG IPON" gust..." "RT @Rika_Skafida: Όπου αεροπλάνο, βάζουμε διαστημόπλοιο #Διαστημικα_υπ..." "RT @Fezaari12: You Only Live Once ang sagot sa tanong nasa tv screen #..." "@mik3cap NASA's CI Newsletter. ..." "RT @vasilisxatzis13: Μετά από τις περικοπές στην #greek_NASA https://t..."

总结

在这篇文章中,您看到了如何使用HTTP接口访问Twitter,现在您已经有了构建自己的工具来分析Twitter提要的基础。HTTP接口特性还提供了其他可能性。例如,我用它从缩短的url中获得扩展的url。你会如何在你的项目中使用它?请分享你的想法在这里




发布与MATLAB®R2016b

|
  • 打印
  • 发送电子邮件

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。