微信公众号开发教程第13篇——应用实例之历史上的今天

何谓历史上的今天

回顾历史的长河,历史是生活的一面镜子;以史为鉴,可以知兴衰;历史上的每一天,都是喜忧参半;可以了解历史的这一天发生的事件,借古可以鉴今,历史是不能忘记的。查看历史上每天发生的重大事情,增长知识,开拓眼界,提高人文素养。

寻找接口(数据源)

要实现查询“历史上的今天”,首先我们要找到相关数据源。笔者经过搜索发现,今年来很多公司都开放免费了“历史上的今天”公共接口调用。只需要创建一个账号,然后根据key来http请求接口,即可返回一个json或xml的数据,非常的方面,最重要的还是免费,由于很多就不一一举例了

微信公众号开发教程第12篇——应用实例之历史上的今天


代码实现

package net.ibloger.wechat.core.api;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import net.ibloger.wechat.core.WeChatConfig;
import net.ibloger.wechat.utils.HttpProxyUtil;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;


/**
 * 历史上的今天查询
 * 
 * @author X-rapido
 * @description 回顾历史的长河,历史是生活的一面镜子; 以史为鉴,可以知兴衰,回复:历史上的今天,看看都发生了什么重大事件
 */
public class HistoryTodayAPI {
	private static Logger logger = Logger.getLogger(HistoryTodayAPI.class);
			
	/**
	 * 历史上的今天,调用ShowApi接口
	 * @param dateTime dateTime为空代表今天
	 * @return
	 */
	public String getContent(String dateTime) {
		Calendar calendar = Calendar.getInstance();
    	String month = calendar.get(Calendar.MONTH) + 1 + "";	// 0代表1月
    	month = Integer.valueOf(month) < 10 ? "0" + month : month;	// 小于10个位补0
    	int day = calendar.get(Calendar.DATE);
		if (dateTime.equals("昨天")){
			day--;
			dateTime = month + day;
		} else if(dateTime.equals("明天")){
			day++;
			dateTime = month + day;
		} else if(dateTime.equals("前天")){
			day-=2;
			dateTime = month + day;
		} else if(dateTime.equals("后天")){
			day+=2;
			dateTime = month + day;
		} else if(dateTime.equals("今天")){
			dateTime = month + day;
		} else {
			// 判断数字日期的正确性
			if (StringUtils.isNotBlank(dateTime)) {
				SimpleDateFormat sdf = new SimpleDateFormat("MMdd");
		        try {
					sdf.setLenient(false);
					// 设置lenient为false. 否则SimpleDateFormat会比较宽松地验证日期
					System.out.println(sdf.parse(dateTime));
				} catch (ParseException e) {
					return null;
				}
			}else {
				dateTime = month + day;
			}
		}
		
		String reqUrl = WeChatConfig.show_api_historyToday_url;
		try {
			reqUrl = reqUrl.replace("{appid}", WeChatConfig.show_api_appid).replace("{timestamp}", new Date().getTime()+"").replace("{date}", dateTime).replace("{sign}", WeChatConfig.show_api_secret);
			logger.info("请求历史上的今天链接:"+reqUrl);
			
			// 查询并获取返回结果
			String json = HttpProxyUtil.sendGet(reqUrl);
			
			StringBuffer sb = new StringBuffer();
			sb.append(Character.toChars(0xe027));	// 图标
			sb.append(" 历史上的 ").append(month).append("月").append(day).append("日\n\n");
			
			if (!"".equals(json) && json.trim().length() > 0) {
				JSONObject jsonObject = JSONObject.fromObject(json);
				if (jsonObject.getJSONObject("showapi_res_body").get("ret_code").toString().equals("0")) {	// 0表示成功
					JSONArray array = jsonObject.getJSONObject("showapi_res_body").getJSONArray("list");
					
					for (int i = 0; i < (array.size() > 25 ? 25 :array.size()); i++) {
						JSONObject jo = (JSONObject) array.get(i);	// 返回day、img、month、title、year参数
						sb.append(jo.get("year")).append("年 ").append(jo.get("title")).append("\n\n");
					}
				}
			}
			return sb.toString();
		} catch (Exception e) {
			logger.error("历史上的今天出现异常", e);
			e.printStackTrace();
		}
		return null;
	}

   /** 
    * 历史上的今天使用指南 
    * @return 
    */  
   public String getHistoryTodayUsage() {  
       StringBuffer buffer = new StringBuffer();  
       buffer.append(Character.toChars(0xe04a)).append("历史上的今天使用指南:").append("\n\n");  
       buffer.append("    回复:历史上的+前天/昨天/明天/后天").append("\n\n");
       buffer.append("     	       历史上的+数字月份日期").append("\n\n");
       buffer.append("示例:").append("\n");
       buffer.append("    历史上的明天").append("\n");
       buffer.append("    历史上的前天").append("\n\n");
       buffer.append("    历史上的0922").append("\n\n");
       buffer.append("回复“?”显示主菜单");  
       return buffer.toString();  
   }
   
    /** 
     * 通过main在本地测试 
     * @param args 
     */  
    public static void main(String[] args) {  
    	HistoryTodayAPI htService = new HistoryTodayAPI();
        System.out.println(htService.getContent("昨天"));
        System.out.println("__________");
        System.out.println(htService.getContent("后天"));  
    }  
}

以上代码中,用到了Http的请求,封装成了HttpProxyUtil.java,WeChatConfig.java用于存储微信配置的appid等信息

// 请求的url地址为
show_api_historyToday_url=http://route.showapi.com/119-42?showapi_appid={appid}&showapi_timestamp={timestamp}&date={date}&showapi_sign={sign}


未经允许请勿转载:程序喵 » 微信公众号开发教程第13篇——应用实例之历史上的今天

点  赞 (1) 打  赏
分享到: