用Java开发两个小工具,一个Youtube的,一个Android的

武当王也 发布于 2016/02/11 19:46
阅读 3K+
收藏 27

【华为云1024程序员节·向云而生】预约直播 抽14件华为电子产品礼包!>>>

工具A:在Linux上基于Youtube官方API编写工具获取视频信息和用户信息。

需求概述

程序以命令行方式交互,根据指定的视频链接获取评论信息(url格式为www.youtube.com/watch?v=××××××),还可以根据Youtube用户Id获取用户信息,结果存在指定的json文件磁盘路径。并提供相关文档,文档要求见详述部分。若能不通过API而直接解析页面得到所要信息也可以。软件名称为youtubeSpider。JDK使用最新稳定版。建议使用IDEA,交流更方便。

需求详述

1、调用和返回

命令行示例:

java -jar youtubeSpider.jar 'https://www.youtube.com/watch?v=M83sHI-_fTY' 'example.json'

返回json示例:

{

    "link":"https://www.youtube.com/watch?v=M83sHI-_fTY",

    "channelId":"", //发布该视频的youtube用户channelId,youtube可用channelId区分用户

    "pubTime":"2015-10-27 12:34:35", //视频发布时间

    "crawlTime":"2015-10-27 15:34:35", //接口调用的时间

    "title":"Democratic Presidential Candidates Square off at Debate in New Hampshire",

    "content":"Bernie Sanders is leading in the state as Hillary Clinton tries to close the gap after her narrow win in Iowa...",

    "viewCount":568,

    "like":1000,

    "dislike":13,

    "commentCount":1147,

    "commentList":[

            {

                    "channelid":"", //评论发布者的chnanelId

                    "pubTime":"2016-1-10 13:02:32",

                    "content":"Thank you for standing up to the NRA & the lazy do nothing congress!!",

                    "like":526

            },

           {...}  ]

}

命令行示例:

java -jar youtubeSpider.jar 'youtubeChannelId' 'example.json'

返回json示例:

{

    "channelName":"ABCNews",

    "channelTitle":"ABC News"

    "channelLink":"https://www.youtube.com/channel/UCBi2mrWuNuyYy4gbM6fU18Q", //用户首页

    "channelSubCount":1624717 //频道订阅数

}

2、注释

对用到的所有API接口,以及接口的所有参数,都要给出明确到位的注释以说明用途。

3、文档

编写youtube api的注册、使用步骤说明,txt即可。

4、测试

实测通过

5、风格

要求使用JSON库(比如fastjson)生成JSON,不要组装字符串生成JSON,最好使用json pointer操作方式,可简化代码。要求有简洁良好的代码结构,清晰的代码风格,不要使用不必要的面向对象特性。

补充说明

https://github.com/liuker0x007/hosts 不解释

工具B-Part1:在Android上编写手机号码echo服务。

随机启动,定时5秒检测一次短信收件箱,发现格式为{"cmd":"mobileQuery"}的短信,则给这个手机号码立即应答一条短信{"cmd":"mobileEcho", "mobile":"188********"},应答完成(无论是否成功发出)后立即删除收到和应答的短信。对于不符合格式的短信,不对其进行任何操作,不修改其已读状态。提供一个实时日志界面,输出实时日志,过往日志保存在本地,可用文本编辑器阅读,每条均要记录年月日时分秒。软件名为mobileEchod,mobile为手机号简称。

工具B-Part2:在Android上编写短信收发的REST服务。

需求概述

手机在内网WiFi环境下联网,不会在3G/4G下使用此服务,这个软件是一个随机启动的服务,打开一个HTTP服务,以REST规范的接口进行短信收发的工作。建议使用一个合适的REST小框架,不要自己解析REST的URL和操作类型,要求支持android 2.3以及以上版本,支持多卡多待的机器(淘宝有四卡四待的),以apk安装包形式发布。简洁良好的代码结构,清晰的代码风格,不要使用不必要的面向对象特性。不要依赖tomcat、apache、ningx这样的HTTP服务器,不要用jsp。软件名称为smsd。

android使用的http服务器参考

https://github.com/NanoHttpd/nanohttpd

http://tjws.sourceforge.net/


需求详述

1、获取自己的手机号码的功能菜单

程序右上角菜单中有此功能选项,点击选项后,从配置文件检查手机卡号是否已知且绑定的sim卡序号正确,若不知道,则从配置中读取mobileQuery手机号码,向该手机号码依次发送短信内容{"cmd":"mobileQuery"},在120秒之内等待应答,无法得到响应则忽略,发送和应答的格式请看工具B。收到应答之后,删除请求短信和应答短信,并将得到的手机号码和sim卡序列号的映射关系存在配置文件中,下次就无需检测了。注意要和sim卡序列号绑定,因为手机可能换卡。

"mobileQuery":"136********" }

这里的逻辑请实现得清晰明了,不要写复杂了。


2、查询设备信息接口

请求

GET http://ip:port/device

应答

{

    "success": true,

    "data":{

         "mac":"", "imei":"", //getDeviceId()

         "androidId":"", //没有手机卡的android pad

         "simCards":[

                {

                      "iccid":"", //getSimSerialNumber(),SIM卡唯一序号

                      "imsi":"", //getSubscriberId,SIM卡刚生产出来但还没有刷手机号进去的时候就有了

                      "mobile":"136********", //getLine1Number(),也就是msisdn,如果无法获取则从配置文件中读取,如果配置也没有则留空

                      "gsm":true //是否有gsm信号

                },

                ... ]

       }

}

3、发送短信接口

请求

POST http://ip:port/sms?srcMobile=136***&dstMobile=188******** //srcMobile可以不填,不填则使用第一个有效的手机号

{ "body":"测试短信" }

应答

{

  "success": false,

  "error": {"code": HTTP状态码,  "name": "错误信息的文字描述"}

}

4、查询短信收件箱接口

请求

GET http://ip:port/sms?filter=all //filter默认等于all,等于read表示已读,等于unread表示未读。成功查询后将该短信自动置为已读。

应答

{

    "success":true,

    "data":{

        "sms":[

            {

                "id":"", //系统自带的短信ID

                "read":false, //已读标记

                "datetime":"", //接收时间

                "srcMobile":"136********",

                "dstMobile":"188********",

                "body":"测试短信"

          },

          ...

        ]

    }

}

6、参数设置

提供本地参数设置界面,参数如下,这是示意,不一定用json

{"httpPort":"6666", //本地HTTP监听端口

"mobileEcho":"136********" //mobileEcho的号码

"cleanUntilDays":30 //删除多少天之前的本地缓存——收到的短信、发送的短信、本地日志

参数设置成功后立即重启服务。

7、后台自动删除短信和日志

根据cleanUntilDays设置,后台自动删除过期的收到的短信、发送的短信、本地日志

8、实时日志界面

提供实时日志打印的简洁界面,方便调试用的。过往日志也要保存在本地,但是是通过REST接口查询的,无需在此界面显示。界面还要显示REST服务启动状态,蓝色OK,红色出错(比如端口监听失败)。

9、实测通过

要求使用curl实测通过且提供测试命令

10、风格

要求使用JSON库(比如fastjson)生成JSON,不要组装字符串生成JSON,最好使用json pointer操作方式,可简化代码。要求有简洁良好的代码结构,清晰的代码风格,不要使用不必要的面向对象特性。界面不要丑。

加载中
0
cole_yang
cole_yang
==要求使用一个合适的REST框架,不要自己解析REST的URL和操作类型== 需要这么复杂吗?一般的REST都是基于j2ee server的(tomcat等)
0
武当王也
武当王也

引用来自“cole_yang”的评论

==要求使用一个合适的REST框架,不要自己解析REST的URL和操作类型== 需要这么复杂吗?一般的REST都是基于j2ee server的(tomcat等)
我的意思是不要手工去解析URL目录和REST操作,因为我见过,很丑且易错,Java里如果j2ee默认提供了REST操作页可以。而且,REST框架超简单的,比HTTP服务器还简单。
0
cole_yang
cole_yang
还有就是jdk需要那个版本?android现在不能够获得电话号码了。
0
cole_yang
cole_yang
"phoneNum":"136********", //getLine1Number(),也就是msisdn 这个基本不支持了
0
武当王也
武当王也
android应用不需要关心jdk版本吧,你如果说的第一个工具,较新的稳定版吧。Android不能获取手机号码?获取手机号的问题我知道了,就忽略吧。
0
开源中国阅卷组组长
开源中国阅卷组组长
怎么感觉像是要做流氓软件呢
苍耳道人
苍耳道人
+1。不告而拿。
0
武当王也
武当王也

引用来自“诸葛先生”的评论

怎么感觉像是要做流氓软件呢
流氓软件就不合适自己开REST服务了,而应该主动向特定服务器发起连接
0
lianjiao
lianjiao
最节约成本的做法就是用推送去实习,手机上架设REST服务?还真没见过!
0
武当王也
武当王也

引用来自“lianjiao”的评论

最节约成本的做法就是用推送去实习,手机上架设REST服务?还真没见过!
喔,我不太熟悉推送,钱都托管了,汗。推送是不是要依赖第三方推送服务?
0
巴拉迪维
巴拉迪维
卧槽 手机上看这个效果太差了
返回顶部
顶部