开发区域

先进与MATLAB软件开发

在MATLAB使用HTTP接口访问Twitter

各位,今天我们有一个很好的博客之间的协作。如果你没看过的话,古原竹内就贴在罗兰的博客今天来帮助你分析虚假新闻。然而,他也是今天教你如何鱼,这么说吧,你授权使用协议传输超文本在互联网!这是古原……

当涉及到Twitter,我们通常是受人尊敬的首选工具Twitty通过弗拉基米尔•Bondarenko案。Twitty 2013年7月以来一直没有更新,你可能想利用MATLAB的新特性,例如字符串数组jsonencodejsondecode功能。

R2016b引入新的激动人心的特性之一HTTP接口,我们可以用它来accessTwitter API和处理它OAuth要求没有Twitty如果你想滚自己的工具。让我们搜索微博相关NASA为例。

内容

Twitty作为参考

Twitty仍然是一个很好的参考我们如何处理OAuth身份验证,这是照顾callTwitterAPI方法。我想穿过这个方法,取代Java调用HTTP接口,适用。还在请检查这个图

dbtypetwitty_1.1.1 / twitty.m1816:1819
1816% %的主要API函数调用者1817方法(访问=私人)1818 S = callTwitterAPI (httpMethod, twtr的url参数,~)调用twitter API的1819%。

Twitter的凭证

我假设你已经有了你的开发者证书和下载Twitty颇文件夹。工作空间变量信誉应该包含您的凭据在struct以下格式:

信誉=结构;%的例子信誉。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 =结构;%初始化参数参数个数。q = pctencode (美国宇航局的);%的搜索词参数个数。include_entities = urlencode (“真正的”);%的搜索参数键=字符串(字段名(params));%获得字段名称值=字符串(struct2cell (params));%获取字段值%矢量化字符串处理键=键+“=”;%添加=值=值+“&”;%添加&queryStr =加入(键值,);%连接列queryStr =加入(queryStr (:),);%转换为一个字符串queryStr{1}(结束)= [];删除额外& %disp (queryStr)%打印字符串
q = nasa&include_entities = true

建立OAuth身份验证参数

Twitter文档还包括一些其他的需求为了实现OAuth身份验证正确。

  • 声明OAuth版本
参数个数。oauth_version =“1.0”;
  • 为一个HTTP请求创建独特的令牌通过生成一个随机字母数字序列。
参数个数。oauth_nonce =取代([num2str(现在)num2str (rand)],“。”,);
时代= datetime (1970 - 01 - 01 t00:00:00z,“InputFormat”,“yyyy-MM-dd“T”HH: mm: ssXXX”,“时区”,UTC的);咕咕叫= datetime (“现在”,“时区”,UTC的,“格式”,“yyyy-MM-dd“T”HH: mm: ssXXX”);参数个数。oauth_timestamp = int2str(秒(咕咕叫-时代));
  • 得到用户凭证。
参数个数。oauth_consumer_key = creds.ConsumerKey;参数个数。oauth_token = creds.AccessToken;
  • 申报的HTTP请求签名加密方案,必须HMAC-SHA1。
sigMethod =“HMAC-SHA1”;参数个数。oauth_signature_method = sigMethod;

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

params = orderfields (params);%对字段排序顺序键=字符串(字段名(params));%获得字段名称值=字符串(struct2cell (params));%获取字段值键=键+“=”;%添加=值=值+“&”;%添加&oauthStr =加入(键值,);%连接列oauthStr =加入(oauthStr (:),);%转换为一个字符串oauthStr{1}(结束)= [];删除额外& %

生成签名与HMAC-SH1加密

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

httpMethod =字符串(“得到”);%设置http方法sigStr =上(httpMethod);%将它添加到sigStrsigStr = [sigStr pctencode (base_url)];%添加基本UrlsigStr = [sigStr pctencode (char (oauthStr)));%添加oauthStrsigStr = char(加入(sigStr“&”));% &加入他们的行列sigKey = [creds.ConsumerSecret“&”creds.AccessTokenSecret];%创建sigKey

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

进口javax.crypto.Mac%导入Java库进口javax.crypto.spec.SecretKeySpec;%关键规范方法进口org.apache.commons.codec.binary.Base64% base64编解码器算法= strrep (sigMethod,“- - -”,);%使用HMAC-SHA1关键= SecretKeySpec (int8 (sigKey)算法);%得到关键mac = Mac.getInstance(算法);%消息身份验证代码mac.init(关键);%初始化macmac.update (int8 (sigStr));%添加基础字符串参数个数。oauth_signature =%得到签名char (Base64.encodeBase64 (mac.doFinal) ');params = orderfields (params);%顺序字段

构建OAuth头

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

键=字段名(参数);%获得字段名称isOauth =包含(钥匙,oauth的);% oauth参数键= cellfun (pctencode、钥匙、“UniformOutput”、假);% percent-encode键(键)+键=字符串“=””;%转换为字符串并添加= "值= struct2cell (params);%获取字段值值= cellfun (pctencode、价值观、“UniformOutput”、假);% percent-encode值值(值)+ =字符串”,“;%转换为字符串并添加”,oauth_header =加入(键值,);%连接列oauth_header = oauth_header (isOauth:);%保持OAuth参数oauth_header =OAuth的+加入(oauth_header (:),);%转换为一个字符串oauth_header {1} (end-1:结束)= [];%去除额外的”

发送HTTP请求

这是到目前为止我们所做的一切都是在一起,你可以看到如何使用HTTP接口函数发送一个HTTP请求,如matlab.net.URI,matlab.net.http.RequestMethod,matlab.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);%创建身份验证字段objct_value =“应用程序/ x-www-form-urlencoded”;%的内容类型content_type = ContentTypeField (ct_value);%创建内容类型obj头= (auth content_type);%结合头字段obj请求= RequestMessage(方法、头);%创建请求obj反应=发送请求,connURI);%发送http请求负载响应%加载保存职责disp(响应)
ResponseMessage属性:状态栏:“200 OK”StatusCode:好的标题:[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.statuses;%得到推如果~ isempty ()%如果不是空的微博= cellfun (@ x (x)。文本、年代、“UniformOutput”,0);%提取文本微博= char(替换(tweet, char (10),' '));%去除新行微博=字符串(tweet (:, 1:70)) +“……”;%截断推disp(微博)结束结束
“RT @RogueNASA: 10天,剩余11个小时。我们几乎就到1美元……”"RT @gp_pulipaka: NASA Tests AI For Autonomous Exploration. #BigData #D..." "RT @BillP____: - Που πας, Παιδί μου ; - Στο Διάστημα με τον Αλέξη, Μάν..." "Camp Century: Put on Ice, But Only for So Long : Image of the Day http..." "RT @SAI: This super powerful telescope is looking at the first black 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账户登录或创建一个新的。