淘宝api

最近负责的项目,须要对接淘宝提供的 淘宝api,获取淘宝客的订单数据。在此过程当中遇到了不少坑,特在此mark一下,可能对于一些大佬来讲很简单,若是发现有错误欢迎指出。全部过程以下所示:java

  1. 基于Intellij IDEA 建立Maven项目
  2. 将淘宝API依赖的jar包安装到本地maven仓库
  3. 根据公开的请求实例编写java脚本,获取返回的订单数据(Jason格式)
  4. 以javabean的形式解析json,并写到本地csv文件中
  5. 经过Maven将项目达成jar包,上传到开发机上。
  6. 编写shell脚本:执行jar包,并将生成的csv文件load到hive表中(做为fact层的明细数据)
  7. 经过crontab命令,后台按期执行shell脚本。
  8. 将订单数据与跳转数据关联,获得跳转pv/uv、转化率等指标。

下面针对每一步进行介绍,并说明遇到的坑python

建立Maven项目

鉴于maven的依赖管理优点,先利用Intellij IDEA 建立maven项目。
这里写图片描述
这里写图片描述
这里写图片描述ios

安装jar包到本地仓库

由于本项目依赖淘宝api的jar包,须要下载相应的sdk,其中提供了API的请求封装、摘要签名、响应解释、消息监听等功能,使用SDK能够轻松完成API的调用,API结果的获取,消息的实时监听web

这里遇到了第一个坑:一开始考虑到python对jason的解析更方便(本人对python也更熟悉。。),想使用python写,可是调api时须要提供port,然而没拿到,最后仍是使用了java。shell

使用淘宝api的步骤:官方文档介绍json

  • 你须要先建立相应的应用,获取App Key和App Secret。
  • 根据你的脚本语言,下载对应的jdk,包括java、python、.net等可供选择。
  • 获取jdk后,将其安装到本地maven仓库中(~/.m2/repository/),安装命令为:mvn install:install-file -Dfile=jar包的位置(参数一) -DgroupId=groupId(参数二) -DartifactId=artifactId(参数三) -Dversion=version(参数四) -Dpackaging=jar

安装完后,仓库和pom文件以下图所示:
这里写图片描述
这里写图片描述
maven在本地仓库中查找jar包是按照:groupId目录 到 artifactId目录 再到version目录的顺序查找。api

编写java请求脚本

用java编写,由于后面要解析json,所以须要在pom文件中添加以下依赖:
这里写图片描述数组

淘宝提供的请求示例以下图所示(官方文档):
这里写图片描述maven

响应式例:svg

这里写图片描述

以订单建立时间为准,天天获取前一天的数据,参数start_time设置每次请求的时间(取每分钟请求一次),setSpan设置每次查询时长(设置为60秒),所以要获取一天的数据就调用1440次。很容易能跑通该示例,最终结果形式为:
这里写图片描述

解析json

解析json采用java bean的方式,将json转换成java对象,这里遇到第二个大坑:由于返回的json包含三层,所以一开始写了四个java实体类,可是可能对应关系没弄好,一直报错,太菜又一直没找到缘由(心态有点小崩),最后在大神导师的指点下,直接用原生解析的方式获取最内层(n_tbk_order对应的json数组),而后再转换成java对象,只须要一个bean文件(见下图)就行。灵活变通仍是很重要的啊!!
这里写图片描述

这里还有第三个坑:一开始大体观察数据(json字符串很长),觉得返回的json数组中只包含一条订单数据,后来发现数据对不上,所以后来对数组遍历,果真发现数据`·量增长了,写代码逻辑必定要严谨啊!!

生成jar包

由于最终脚本要放在线上开发机上跑,所以须要打成jar包。一开使用Intellij IDEA 自带的project structure,但后来在开发机上一直报错,后来尝试使用maven插件,在pom文件中添加下列代码:
这里写图片描述
注意:记得修改mainClass的值,路径为:主程序包名.main程序名
这里写图片描述

最后在终端切换到maven项目根目录,执行命令:mvn clean package -Dmaven.test.skip=true -Dcheckstyle.skip=true,会在
便可在target目录下生成所需的jar包(名字中不带original的)。

坑四:一开始在经常使用的开发机上跑,可是貌似不能访问外网,所以一直访问gw.api.taobao.com/router/rest出错,后来换了一台线上开发机,成功跑通了。。

编写shell脚本

在开发机生成订单数据对应的csv后,编写shell脚本将其load到hive表中,方便后续的分析使用。由于是明细数据,所以建成fact表。

建立分区表:
CREATE TABLE ks_ad.dw_fact_commiosity_detail_di(id int,name string) partitioned by (dt STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,’ LINES TERMINATED BY ‘\n’STORED AS TEXTFILE;

插入数据:
load data local inpath ‘owwo/xxx.csv’ into table xxx PARTITION (partcol1=val1, partcol2=val2 …)

编写crontab命令

编写好shell脚本后,由于咱们想要它天天定时执行,例如天天早上6点,这是就须要crontab命令,执行crontab -e添加用户调度任务。

crontab文件的含义:用户所创建的crontab文件中,每一行都表明一项任务,每行的每一个字段表明一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式以下:

minute   hour   day   month   week   command     顺序:分 时 日 月 周 任务

本项目设置的是天天早上6段执行,以下所示:

00 06 * * * xx/taobao.sh >> yy.log 2>&1

上面命令后半段是将成的标准输出添加到log文件中,方便查看报错。

其中& 1 ,表示文件描述符 1指标准输出stdout。
对于2,表示标准错误,stderr。
2>&1 的意思就是将标准错误重定向到标准输出,而标准输出已经重定向到了yy.log中,所以最终都会在log中显示。

这里还有个坑:

  • 使用contrab时默认以contrab用户的身份执行shell文件,所以首先须要用chmod命令改变jar包和shell脚本的权限,暴力点能够直接chmod 777 xx.sh
  • 另外,crontab默认将生成的csv文件保存在根目录/home下,所以在jar包中要注意输出csv的路径,不然后面load数据会找不到csv文件。

关联跳转数据

完成上面的步骤后,在hive中就能够获得咱们所需的订单数据表了。后面根据业务需求,与其余进行数据进行关联分析。

后记

虽然这只是一个小需求,可是种种bug仍是让人很头疼。固然最开心的是,在解决的过程当中本身学到了不少东西。很是感谢个人mentor,他的耐心解答为我提供了很是大的帮助。