淘宝api

最近负责的项目,需要对接淘宝提供的 淘宝api,获取淘宝客的订单数据。在此过程中遇到了很多坑,特在此mark一下,可能对于一些大佬来说很简单,如果发现有错误欢迎指出。所有过程如下所示:

基于Intellij IDEA 创建Maven项目
将淘宝API依赖的jar包安装到本地maven仓库
根据公开的请求实例编写java脚本,获取返回的订单数据(Jason格式)
以javabean的形式解析json,并写到本地csv文件中
通过Maven将项目达成jar包,上传到开发机上。
编写shell脚本:执行jar包,并将生成的csv文件load到hive表中(作为fact层的明细数据)
通过crontab命令,后台定期执行shell脚本。
将订单数据与跳转数据关联,得到跳转pv/uv、转化率等指标。
下面针对每一步进行介绍,并说明遇到的坑

创建Maven项目
鉴于maven的依赖管理优势,先利用Intellij IDEA 创建maven项目。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

安装jar包到本地仓库
因为本项目依赖淘宝api的jar包,需要下载相应的sdk,其中提供了API的请求封装、摘要签名、响应解释、消息监听等功能,使用SDK可以轻松完成API的调用,API结果的获取,消息的实时监听。

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

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

你需要先创建相应的应用,获取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目录的顺序查找。

编写java请求脚本
用java编写,因为后面要解析json,因此需要在pom文件中添加如下依赖:
在这里插入图片描述

淘宝提供的请求示例如下图所示(官方文档):
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191112154902678.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dCS0oxOTk3MDEwODAxOQ==,size_16,color_FFFFFF,t_70

响应式例:
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191112155141392.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dCS0oxOTk3MDEwODAxOQ==,size_16,color_FFFFFF,t_70

以订单创建时间为准,每天获取前一天的数据,参数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 顺序:分 时 日 月 周 任务
1
本项目设置的是每天早上6段执行,如下所示:

00 06 * * * xx/taobao.sh >> yy.log 2>&1
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,他的耐心解答为我提供了非常大的帮助。
————————————————
版权声明:本文为CSDN博主「lzq20115395」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lzq20115395/article/details/81230832

发布了19 篇原创文章 · 获赞 5 · 访问量 525

猜你喜欢

转载自blog.csdn.net/WBKJ19970108019/article/details/103031291
今日推荐