微信开发纪实之历史上的今天服务

说明:此篇文章是看了柳峰老师的文章(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());

}

}

微信开发纪实之历史上的今天服务相关推荐

  1. python 编程环境 微信_微信开发之新浪SAE上配置WeRoBot微信机器人,python,Mac环境...

    本文将带你了解微信开发新浪SAE上配置WeRoBot微信机器人,python,Mac环境,希望本文对大家学微信有所帮助. 废话不多说,直接上过程. 注册新浪sae,选择创建云应用,创建新应用,填好相关 ...

  2. Nginx 反向代理实现微信开发完美线上测试环境

    成文时间: 2018-11-29 11:18:10 环境说明 Ubuntu 16.04 LTS Nginx version: nginx/1.10.3 (Ubuntu) PHP 7.1.18 Lara ...

  3. 微信开发解决方案:(一)概述

    上来就概述,这个阶段再提微信开发感觉有点不合时宜,微信开发都开发几年了,市场也差不多清新了,我完全以马后炮的精神讲一件如何开发一个微信公众号--以老板的思维思考:我做出来就行了,管他什么方法. 目标读 ...

  4. 【计算机毕业设计】基于微信小程序的驾校学车预约服务系统

    毕设帮助.源码交流.技术指导,联系方式见文末. 一.课题概述 随着机动车逐渐走进寻常百姓家中,学车也随之被人们提上了日程,这使得汽车驾驶培训行业得到迅猛发展.计算机网络技术的广泛应用,使网上约车成为可 ...

  5. cloudfoundry_在Cloudfoundry上部署RESTful服务

    cloudfoundry 在本文中,我们将使用Pivotal Cloud Foundry(PCF)开发人员在Cloudfoundry上部署RESTful服务. 由于创建静态Web服务不是本文的一部分, ...

  6. 微信公众平台开发(44)历史上的今天

    微信公众平台开发 历史上的今天 当年今日 作者:方倍工作室  原文: http://www.cnblogs.com/txw1958/p/weixin-44-history.html 一.历史上的今天 ...

  7. 微信公众帐号开发教程第16篇-应用实例之历史上的今天

    内容概要 本篇文章主要讲解如何在微信公众帐号上实现"历史上的今天"功能.这个例子本身并不复杂,但希望通过对它的学习,读者能够对正则表达式有一个新的认识,能够学会运用现有的网络资源丰 ...

  8. 小程序云开发实战 - 口袋工具之“历史上的今天”

    前言 本项目是一个基于云开发的小程序. 本文选取项目中的一个页面 -- 历史上的今天 来做一个云开发的分享,会涉及云函数和云数据库. 由于是实战项目,关于小程序的基础知识请移步官方文档,本文不再赘述. ...

  9. 【历史上的今天】8 月 23 日:万维网面世 30 周年;微信公众平台正式上线;计算机先驱诞生日

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2022 年 8 月 23 日,对计算机历史而言,8 月 23 日是一个具有魔力的日期.许多科技领域的掌舵者在这一 ...

最新文章

  1. python网络爬虫初识_python爬虫(一)初识爬虫
  2. PCL:点云数据基于法线的边界提取(从最初的法线估计理论推导到最终的边界提取)
  3. 设置DVD为CentOS6安装源
  4. 使用cout输出数据之使用成员函数
  5. C++counting sort计数排序(针对string)的实现算法(附完整源码)
  6. Linux性能监控命令——sar
  7. (转)PJAX的实现与应用
  8. 服务器ip算是虚拟资产吗,云服务器算资产吗
  9. Python安装numpy模块及pycharm配置
  10. 信号量 Linux函数 semget();semctl();semop();
  11. html安装方正兰亭,方正兰亭字体
  12. php imagick 取得psd缩略图,PHP中使用Imagick操作PSD文件实例
  13. Win10如何高效压缩卷,亲测有效
  14. 微信小程序--实现按钮跳转另一个页面
  15. 在线进行去除图片水印
  16. python turtle画简易的太极图
  17. apu 没有linux 驱动程序,AMD发布新LINUX版本驱动 全新APU能耗控制更加优秀
  18. 程序员没带笔记本电脑面试,手撸代码,HR激动喊到:老铁,666
  19. HTML+CSS+JS实现简单登录模板
  20. 分享小程序会员积分管理系统的优势_会员积分管理系统的作用

热门文章

  1. 国产无线蓝牙耳机哪个好?性价比高的国产耳机品牌
  2. word文档如何添加批注
  3. 2008年06月06日
  4. 【javase-improved】第二篇:Java反射机制
  5. 怎么在wps上显示特殊标记,如换行符等
  6. Javascript数据类型及存储位置
  7. javaScript实现邮箱集成登陆
  8. abap Loop循环用法
  9. python基础知识之函数的定义及用法
  10. (二)绘图:五角星2.2-----turtle库画笔抬起、放下、粗细、颜色