1.背景介绍:showAPI(易源数据),易源数据通过打破资源壁垒,搭建起数据资源的基础设施,将接口纳入统一的接口池,把多个异构数据源合并到同一根管线上,以统一的访问和控制方式,对外提供统一格式的数据。让开发者可以像搭积木一样通过各种API操纵资源。截至2017年12月,平台已经拥有API接口230个,日调用量2000万,覆盖全网10万+真实消费者,为超过3000+的企业用户提供全域数据服务。
2.要想使用易源APIStore的免费接口,必须先在平台注册账号,可以使用邮箱注册账号。平台网址:https://www.showapi.com/,注册账号后,可以免费使用指定的一些接口,也可以付费使用一些付费接口,实名认证后还可以获得免费接口使用的更多特权。
注册账号之后,会得到一个appid和secret(密钥),如下所示
接下来,就可以选择免费的接口并订购了,如下所示
3.选择其中一个接口如“历史上的今天”为例,演示使用;点击“历史上的今天”进入详情页面,往下拉可看到下载sdk的超链接如下,把javasdk下载下来,导入eclipse中,此处需注意,导入sdk后会看到项目有红色感叹号报错,是因为缺少了相应的jar包导致,导入相应jar包即可解决,一开始我搞不清楚问题所在,在这里浪费了点时间。
4.导入sdk之后便可以来编写测试代码了,前端代码这里就不粘贴了,大家各自发挥,只贴JavaBean的代码和action里的代码如下
package com.test;import java.util.Date;public class thing {private String event;private String date;public String getEvent() {return event;}public void setEvent(String event) {this.event = event;}public String getDate() {return date;}public void setDate(String date) {this.date = date;}
}
action里的代码如下:
package com.test;import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;import javax.servlet.http.HttpServletRequest;import org.apache.struts2.ServletActionContext;import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.opensymphony.xwork2.ActionSupport;
import com.show.api.ShowApiRequest;public class test extends ActionSupport{public String find() throws UnsupportedEncodingException {// TODO Auto-generated method stub//获取前端发来的数据,request方式HttpServletRequest request=ServletActionContext.getRequest();//获取当前网络时间Date currentTime = new Date();SimpleDateFormat formatter = new SimpleDateFormat("MMdd");String dateString = formatter.format(currentTime);String res=new ShowApiRequest("http://route.showapi.com/119-42","59563","c2cbb049e5c24069aa4c81d6989ec3a5").addTextPara("date",dateString).post();try {JSONObject js=JSONObject.parseObject(res);//System.out.println(js.getJSONObject("showapi_res_body"));//String list=js.getString("list");//System.out.println(list);JSONArray jsarr=js.getJSONObject("showapi_res_body").getJSONArray("list");//循环得出所有对象System.out.println("断点1"+jsarr);List<thing> list=new ArrayList<thing>();for(int i=0;i<jsarr.size();i++) {System.out.println("断点2");JSONObject ao=jsarr.getJSONObject(i);String a=ao.getString("title");String b=ao.getString("year");String c=ao.getString("month");String d=ao.getString("day");String date=b+"-"+c+"-"+d;thing t=new thing();t.setEvent(a);t.setDate(date);System.out.println(a+","+b+"-"+c+"-"+d);list.add(t);}request.setAttribute("list", list);}catch(Exception e) {e.printStackTrace();}return SUCCESS;}}
struts.xml配置如下
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts><!-- 包结构 --><package name="default" namespace="/" extends="struts-default"><!-- 配置action --><action name="yiyuanapi_*" class="com.test.test" method="{1}"><!-- 配置跳转页面 --><result name="success">/index.jsp</result></action> </package>
</struts>
5.关于上面对接口返回的JSON形式数据的处理,可以使用fastjson工具对其进行反序列化;
阿里巴巴FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备如下特征:速度最快,测试表明,fastjson具有极快的性能,超越任其他的Java Json parser。包括自称最快的JackJson;功能强大,完全支持Java Bean、集合、Map、日期、Enum,支持范型,支持自省;无依赖,能够直接运行在Java SE 5.0以上版本;支持Android;开源 (Apache 2.0)
API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。这里推荐博文:https://www.cnblogs.com/tapt/p/6614127.html
fastjson工具需要用到jar包网盘下载地址:链接:https://pan.baidu.com/s/1SXPHhwl9FRXxCoGHmk5NfA 密码:kqwk
6.最后界面效果如下