微信公众号开发(十):文本处理器之讲个笑话

/**
 * 笑话处理器
 * @author 熊诗言
 *
 */
public class JokeTextHandler extends DefaultMessageHandler {

    @Override
    public boolean canDo(Map<String, String> requestMap) {
        String content = requestMap.get("Content").trim();
        String msgType = requestMap.get("MsgType");
        return MessageUtil.REQ_MESSAGE_TYPE_TEXT.equals(msgType) && ((content.startsWith("讲个笑话")) || content.startsWith("笑话"));
    }

    @Override
    public BaseMessage handleByMe(Map<String, String> requestMap) {
        JokeResult jokeResult = JokeService.randomAJoke();
    //    System.out.println(jokeResult.getClass());
        
        if(jokeResult instanceof TextJokeResult){
            List<TextJoke> textJokes = ((TextJokeResult)jokeResult).getShowapi_res_body().getContentlist();
            return MessageFactory.createTextMessage(fromUserName, toUserName,
                    textJokes.get(new Random().nextInt(textJokes.size())).getText());
        }else {
            List<ImgJoke> imgJokes = ((ImgJokeResult)jokeResult).getShowapi_res_body().getContentlist();
            List<Article> articles = new ArrayList<Article>();
            int count = 0;
            for (ImgJoke joke : imgJokes) {
                Article article = new Article();
                article.setTitle(joke.getTitle());
                article.setDescription(joke.getTitle());
                article.setPicUrl(joke.getImg());
                article.setUrl(joke.getImg());
                
                articles.add(article);
                count++;
                if(count==8){//微信限制最多8条还是10条
                    break;
                }
            }
            return MessageFactory.createNewsMessage(fromUserName, toUserName, articles );
        }
        
        //return MessageFactory.createTextMessage(fromUserName, toUserName, JokeService.randomAjoke());
    }

    public static void main(String[] args){
        new JokeTextHandler().handleByMe(null);
    }
}



public class JokeService {
    /**
     * 使用94qing返回笑话,目前没有权限
     * http://api.94qing.com/?type=joke&msg=
     * @return
     */
    private static String randomAjoke1() {
        HttpURLConnection connection = null;
        StringBuffer sb = null;
        try {
            String getURL = "http://api.94qing.com/?type=joke&msg=";
            URL getUrl = new URL(getURL);
            connection = (HttpURLConnection) getUrl.openConnection();
            connection.connect();

            // 取得输入流,并使用Reader读取
            BufferedReader reader = new BufferedReader(new InputStreamReader( connection.getInputStream(), "utf-8"));
            sb = new StringBuffer();
            String line = "";
            while ((line = reader.readLine()) != null) {
                sb.append(line);
            }
            reader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        // 断开连接
        connection.disconnect();
        return sb.toString();
    }
    private static String randomAjoke2() throws Exception {
        Timestamp date = new Timestamp(System.currentTimeMillis());
        String url = "http://route.showapi.com/341-2?"
            +"showapi_appid="+8442//showapi_appid
            +"&showapi_timestamp="+new SimpleDateFormat("yyyyMMddHHssmm").format(date)
            +"&time="+new SimpleDateFormat("yyyy-MM-dd").format(date)
            +"&page="+new Random().nextInt(5)
            +"&showapi_sign="+"4067917c2498433b9938206c07705f9f";//showapi_sign
        
        URL u=new URL(url);
        InputStream in=u.openStream();
        ByteArrayOutputStream out=new ByteArrayOutputStream();
        try {
            byte buf[]=new byte[1024];
            int read = 0;
            while ((read = in.read(buf)) > 0) {
                out.write(buf, 0, read);
            }
        }  finally {
            if (in != null) {
                in.close();
            }
        }
        byte b[]=out.toByteArray( );
        return new String(b,"utf-8");
    }

    private static String randomAjoke3(boolean type){
    //com.show.api.ShowApiRequest.ShowApiRequest
        String res=new ShowApiRequest("http://route.showapi.com/341-"+(type?1:2),"8442","4067917c2498433b9938206c07705f9f")
        .addTextPara("time",new SimpleDateFormat("yyyy-MM-dd").format(new Date(System.currentTimeMillis())))
        .addTextPara("page","")
        .post();
        return res;
    }
    public static JokeResult randomAJoke(){
        boolean type = new Random().nextInt(100)>50;
        String json = randomAjoke3(type);
        System.out.println(json);
        JokeResult jokeResult = null;
        if(type){
            jokeResult = new Gson().fromJson(json, TextJokeResult.class);
        }else {
            jokeResult = new Gson().fromJson(json, ImgJokeResult.class);
        }
        return jokeResult;
    }
        
    public static void main(String[] args) {
        try {
            //LoggerFactory.getLogger(JokeService.class).info(randomAjoke3());
            System.out.println(randomAjoke3(true));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}



public class JokeResult {
    private int showapi_res_code;
    private String showapi_res_error;
。。。。
}

public class TextJokeResult extends JokeResult {
    private TextJokeBody showapi_res_body;
    。。。。
}

public class TextJokeBody extends JokeBody {
    List<TextJoke> contentlist;
。。。。
}

public class JokeBody {
    private int allNum;
    private int allPages;
    private int currentPage;
    private int maxResult;
    。。。。
}


public class TextJoke extends Joke {
    private String text;
    。。。。
}

/**
 * 笑话基类,下面有文本笑话,图片笑话
 * @author 熊诗言
 *
 */
public class Joke {
    private String ct;
    private String title;
    。。。。
}

public class ImgJoke extends Joke{
    
    private String img;
    private int type;
    。。。
}

public class ImgJokeResult extends JokeResult {
    private ImgJokeBody showapi_res_body;
    。。。。
}

public class ImgJokeBody extends JokeBody {
    List<ImgJoke> contentlist;
。。。。
}

public class ImgJoke extends Joke{
    
    private String img;
    private int type;
    。。。。
}

你可能感兴趣的:(微信公众号开发(十):文本处理器之讲个笑话)