微信开发纪实之历史上的今天服务
微信开发纪实之历史上的今天服务
说明:此篇文章是看了柳峰老师的文章(http://blog.csdn.net/lyq8479/article/details/12785115)后自己动手写的。相比于柳峰老师的方法,我觉得我的方法有两项优点:
1. 主服务代码量更少(得益于HttpClient和Jsoup)
2. 实现了数据的平滑过渡
语言:java
代码:TodayInHistoryService.java
package com.wdyx.weixin.service;
import java.io.IOException;
importorg.apache.http.client.ClientProtocolException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
/**
* 历史上的今天 服务
*@author 帮杰
*
*/
public class TodayInHistoryService {
//数据源
publicstatic final String URL = "http://www.rijiben.com";
privateString todayInHistoryInfo = "";
publicTodayInHistoryService() throws ClientProtocolException, IOException{
StringBufferbuffer = new StringBuffer();
//得到网页源码
Stringhtml = HttpUtil.getHtml(URL);
//用Jsoup解析
Documentdoc = Jsoup.parse(html);
Elements elements =doc.select("div.listren").select("a");
for(Element element : elements){
buffer.append(element.text()).append("\n\n");
}
todayInHistoryInfo= buffer.substring(0, buffer.lastIndexOf("\n\n"));
}
publicString getTodayInHistoryInfo(){
returntodayInHistoryInfo;
}
/**
* 测试
*
* @param args
* @throws IOException
* @throws ClientProtocolException
*/
public static void main(String[] args) throws ClientProtocolException,IOException {
System.out.println(newTodayInHistoryService().getTodayInHistoryInfo());
}
}
测试结果:
1564年2月15日欧洲近代自然科学的创始人伽利略诞辰
1682年2月15日顾炎武逝世
1823年2月15日洋务运动倡导者李鸿章诞辰
1857年2月15日俄国音乐家格林卡逝世
1904年2月15日反清组织华兴会成立
1912年2月15日袁世凯任临时大总统
1935年2月15日东北抗日联军发表统一建制宣言
1937年2月15日国民党内外政策开始转变
1942年2月15日新加坡落入日军手中
1946年2月15日世界第一台电子计算机问世
1952年2月15日乔治六世下葬
1953年2月15日中央颁布《关于农业生产互助合作的决议》
1957年2月15日葛罗米柯就任外交部长
1961年2月15日美国18名滑冰运动员在空中丧生
1972年2月15日中国人民的朋友埃德加·斯诺逝世
1974年2月15日苏联驱逐作家索尔仁尼琴
1982年2月15日我国公布首批历史文化名城
1989年2月15日苏联军队全部撤出阿富汗
1990年2月15日美国等四国就联合反毒签署《卡塔赫纳声明》
为了不频繁调用服务通过网络抓取信息,我又写了一个用于数据的平滑过渡的类。
代码:TodayInHistoryServiceUtil.java
package com.wdyx.weixin.service;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;
import org.apache.http.client.ClientProtocolException;
import com.wdyx.weixin.util.MySQLUtil;
/**
* 这个是“历史上的今天”的工具类,主要用于数据的平滑过渡:
* 1、将当日抓取数据写入数据库
* 2、将当日数据从数据库中取出
*@author 帮杰
*
*/
public class TodayInHistoryServiceUtil {
/**
* 初始化数据库
* @return
* @throws SQLException
*/
publicstatic int initDB() throws SQLException{
intcount = -1;
Stringsql = "create table if not exists TodayInHistory("
+"today timestamp not null default current_timestamp,"
+"history varchar(1024) not null default '',"
+"primary key(today)) "
+"comment='todayInHistory' default character set utf8 collateutf8_bin";
Connectioncon = MySQLUtil.getConnection();
Statementsm = con.createStatement();
count= sm.executeUpdate(sql);
returncount;
}
/**
* 得到数据写入时间(以判断数据是否过期)
* @return 数据写入时间
*/
publicstatic Timestamp getTodayFromDB(){
Timestamptoday = null;
StringQuery = "SELECT today FROM TodayInHistory";
Connectioncon = MySQLUtil.getConnection();
Statementsm = null;
ResultSetrs = null;
try{
sm= con.createStatement();
rs= sm.executeQuery(Query);
if(rs.next()) {
today= rs.getTimestamp(1);
}
}catch (SQLException e) {
e.printStackTrace();
}finally {
MySQLUtil.closeConnection(sm,rs, con);
}
returntoday;
}
/**
* 判断数据是否过期
* @return
*/
@SuppressWarnings("deprecation")
publicstatic boolean isOutOfDate(){
intdate_now = new java.util.Date().getDate();
intdate_DB = getTodayFromDB().getDate();
returndate_now==date_DB?false:true;
}
/**
* 从数据库取出“历史上的今天”数据
* @return “历史上的今天”数据
*/
publicstatic String getHistoryFromDB(){
Stringhistory = null;
StringQuery = "SELECT history FROM TodayInHistory";
Connectioncon = MySQLUtil.getConnection();
Statementsm = null;
ResultSetrs = null;
try{
sm= con.createStatement();
rs= sm.executeQuery(Query);
if(rs.next()) {
history= rs.getString(1);
}
}catch (SQLException e) {
e.printStackTrace();
}finally {
MySQLUtil.closeConnection(sm,rs, con);
}
returnhistory;
}
/**
* 更新数据表
* @return 最新数据
* @throws IOException
* @throws ClientProtocolException
*/
publicstatic String updateDB() throws ClientProtocolException, IOException{
Stringhistory = new TodayInHistoryService().getTodayInHistoryInfo();
Connectioncon = MySQLUtil.getConnection();
Statementsm = null;
try{
sm= con.createStatement();
sm.addBatch("DELETEFROM TodayInHistory");
sm.addBatch("INSERTINTO TodayInHistory (today,history) VALUES (CURRENT_TIMESTAMP,'"+history+"')");
sm.executeBatch();
}catch (SQLException e) {
e.printStackTrace();
}finally {
MySQLUtil.closeConnection(sm,null,null);
}
returnhistory;
}
/**
* 删除数据表
* @return
*/
publicstatic boolean deleteDB(){
booleanflag = true;
Stringsql = "DROP TABLE TodayInHistory";
Connectioncon = MySQLUtil.getConnection();
Statementsm = null;
try{
sm= con.createStatement();
flag= sm.execute(sql);
}catch (SQLException e) {
flag= false;
e.printStackTrace();
}finally {
MySQLUtil.closeConnection(sm,null,null);
}
returnflag;
}
/**
* 流程控制
* @throws IOException
* @throws ClientProtocolException
* @throws SQLException
*/
publicstatic String getTodayInHistoryInfoFluently() throws ClientProtocolException,IOException {
Stringhistory = null;
//有两种情况需要更新表:1、表中无记录;2、表中有记录,但记录已过期
if(getHistoryFromDB()==null||isOutOfDate()){
history= updateDB();
}else{
history= getHistoryFromDB();
}
returnhistory;
}
//测试
publicstatic void main(String[] args) throws ClientProtocolException, IOException,SQLException{
/System.out.println(deleteDB());/
//如果表未就绪,初始化表
if(!MySQLUtil.hasTable("TodayInHistory")){
System.out.println("初始化数据表,状态:"+initDB());
}
System.out.println(getTodayInHistoryInfoFluently());
}
}
微信开发纪实之历史上的今天服务相关推荐
- python 编程环境 微信_微信开发之新浪SAE上配置WeRoBot微信机器人,python,Mac环境...
本文将带你了解微信开发新浪SAE上配置WeRoBot微信机器人,python,Mac环境,希望本文对大家学微信有所帮助. 废话不多说,直接上过程. 注册新浪sae,选择创建云应用,创建新应用,填好相关 ...
- Nginx 反向代理实现微信开发完美线上测试环境
成文时间: 2018-11-29 11:18:10 环境说明 Ubuntu 16.04 LTS Nginx version: nginx/1.10.3 (Ubuntu) PHP 7.1.18 Lara ...
- 微信开发解决方案:(一)概述
上来就概述,这个阶段再提微信开发感觉有点不合时宜,微信开发都开发几年了,市场也差不多清新了,我完全以马后炮的精神讲一件如何开发一个微信公众号--以老板的思维思考:我做出来就行了,管他什么方法. 目标读 ...
- 【计算机毕业设计】基于微信小程序的驾校学车预约服务系统
毕设帮助.源码交流.技术指导,联系方式见文末. 一.课题概述 随着机动车逐渐走进寻常百姓家中,学车也随之被人们提上了日程,这使得汽车驾驶培训行业得到迅猛发展.计算机网络技术的广泛应用,使网上约车成为可 ...
- cloudfoundry_在Cloudfoundry上部署RESTful服务
cloudfoundry 在本文中,我们将使用Pivotal Cloud Foundry(PCF)开发人员在Cloudfoundry上部署RESTful服务. 由于创建静态Web服务不是本文的一部分, ...
- 微信公众平台开发(44)历史上的今天
微信公众平台开发 历史上的今天 当年今日 作者:方倍工作室 原文: http://www.cnblogs.com/txw1958/p/weixin-44-history.html 一.历史上的今天 ...
- 微信公众帐号开发教程第16篇-应用实例之历史上的今天
内容概要 本篇文章主要讲解如何在微信公众帐号上实现"历史上的今天"功能.这个例子本身并不复杂,但希望通过对它的学习,读者能够对正则表达式有一个新的认识,能够学会运用现有的网络资源丰 ...
- 小程序云开发实战 - 口袋工具之“历史上的今天”
前言 本项目是一个基于云开发的小程序. 本文选取项目中的一个页面 -- 历史上的今天 来做一个云开发的分享,会涉及云函数和云数据库. 由于是实战项目,关于小程序的基础知识请移步官方文档,本文不再赘述. ...
- 【历史上的今天】8 月 23 日:万维网面世 30 周年;微信公众平台正式上线;计算机先驱诞生日
整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2022 年 8 月 23 日,对计算机历史而言,8 月 23 日是一个具有魔力的日期.许多科技领域的掌舵者在这一 ...
最新文章
- python网络爬虫初识_python爬虫(一)初识爬虫
- PCL:点云数据基于法线的边界提取(从最初的法线估计理论推导到最终的边界提取)
- 设置DVD为CentOS6安装源
- 使用cout输出数据之使用成员函数
- C++counting sort计数排序(针对string)的实现算法(附完整源码)
- Linux性能监控命令——sar
- (转)PJAX的实现与应用
- 服务器ip算是虚拟资产吗,云服务器算资产吗
- Python安装numpy模块及pycharm配置
- 信号量 Linux函数 semget();semctl();semop();
- html安装方正兰亭,方正兰亭字体
- php imagick 取得psd缩略图,PHP中使用Imagick操作PSD文件实例
- Win10如何高效压缩卷,亲测有效
- 微信小程序--实现按钮跳转另一个页面
- 在线进行去除图片水印
- python turtle画简易的太极图
- apu 没有linux 驱动程序,AMD发布新LINUX版本驱动 全新APU能耗控制更加优秀
- 程序员没带笔记本电脑面试,手撸代码,HR激动喊到:老铁,666
- HTML+CSS+JS实现简单登录模板
- 分享小程序会员积分管理系统的优势_会员积分管理系统的作用