随笔-60  评论-138  文章-1  trackbacks-0
    在我要地图手机版中提供了查询当前城市未来三天内天气预报的功能。天气预报中提供了天气情况,空气质量,穿衣指数,洗车指数等信息。
    具体的实现思路是,通过httpclient发送查询请求到yahoo的天气预报接口,通过htmlparser解析返回结果,并且通过jdom包装成一个xml返回到j2me实现的手机客户端。继而展示!
    代码如下:
   
MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();
            HttpClient client = new HttpClient(connectionManager);
            client.getHostConfiguration().setProxy("proxy******", *****);
            Credentials defaultcreds = new UsernamePasswordCredentials(
                    "XXXXXX@****.com", "XXXXXXXXX");
            client.getState().setProxyCredentials(AuthScope.ANY, defaultcreds);
            
            
            outdoc = new Document();
            //增加根节点
            Element rootElement = new Element("handmap");
            rootElement.setAttribute("version", "1.0");
            
            HttpMethod method = new PostMethod(
                    "http://yahooweatherurl?city="
                            + URLEncoder.encode(this.cy, "utf-8"));
            client.executeMethod(method);
            String result = method.getResponseBodyAsString();
            System.out.println(result);
            System.out.println("----------------------------");
            Parser parser;

            parser = new Parser(result);
            parser.setEncoding("GBK");
            // 寻找div的class是box2 p14的内容
            NodeFilter filter = new AndFilter(new TagNameFilter("div"),
                    new HasAttributeFilter("class", "box6"));
            NodeList nodeList = parser.parse(filter);
            parser.setInputHTML(result);

            NodeFilter contentfilter = new AndFilter(new TagNameFilter("div"),
                    new HasAttributeFilter("class", "box7"));
            NodeList contentNodeList = parser.parse(contentfilter);

            NodeIterator it = nodeList.elements();
            NodeIterator contentIt = contentNodeList.elements();
            Node node = null;
            Node contentNode = null;
            StringBuffer buffer=new StringBuffer(500);
            while (it.hasMoreNodes()) 
{
                node = it.nextNode();
                contentNode = contentIt.nextNode();
                String nodehtml = node.toHtml();
                String day = StringUtils.substringBetween(nodehtml,
                        "<span class=\"f18\">", "</p>");
                day = day.replaceAll("</span><br />", " ");
                day = day.replaceAll("  ", "");
                buffer.append(day).append("\n");
                //System.out.println(day);
                String weather = StringUtils.substringBetween(nodehtml,
                        "<span class=\"f14\"><strong>", "</strong>");
                weather = weather.replaceAll("    ", "");
                buffer.append(weather).append("\n");
                //System.out.println(weather);
                String content = contentNode.toPlainTextString().replaceAll(
                        "                    ", "");
                buffer.append(content).append("\n\n");
            
}
            rootElement.setText(buffer.toString());
            outdoc.setRootElement(rootElement);
        } catch (UnsupportedEncodingException e) 
{
            log.error(e.getLocalizedMessage());
        
} catch (MalformedURLException e) {
            log.error(e.getLocalizedMessage());
        
} catch (IOException e) {
            log.error(e);
        
} catch (ParserException e) {
            e.printStackTrace();
        
}

   当中需要说明的是,因为公司使用代理,所以在httpclient中我加入了代理设置:
   
            client.getHostConfiguration().setProxy("proxy", port);
            Credentials defaultcreds = new UsernamePasswordCredentials(
                    "XXXXXX@lingtu.com", "XXXXXXXXX");
            client.getState().setProxyCredentials(AuthScope.ANY, defaultcreds);        


posted on 2008-09-06 08:57 张氏兄弟 阅读(1339) 评论(3)  编辑  收藏 所属分类: 手机地图

评论:
# re: 手机地图-httpclient+htmlparser+jdom展示yahoo天气预报[未登录] 2009-02-21 06:07 | 新手
好像J2ME不支持httpclient,不知老大用什么方法实现的.
我尝试了一下,用WTK编译httpclient jar包时提示编译错误,加上了codec,logging包后,还是不行.
麻烦指教,多谢.  回复  更多评论
  
# re: 手机地图-httpclient+htmlparser+jdom展示yahoo天气预报 2009-02-23 10:08 | 张氏兄弟
你好:
因为你有没有留下邮箱,更不知道你是否还会关注本篇。将你的问题回复如下!
这个yahoo的天气预报是我当初在一个比较郁闷的傍晚,因为其他功能调试了几天都不行,顺手加在手机地图中的。
技术上呢,不是让手机去请求yahoo的url,而是请求自己的服务器。自己的服务器端再次使用相关技术请求yahoo的url,拿到结果后,解析成xml,返回给手机端。
所以,上边的代码都是服务端的,返回一个xml给手机。  回复  更多评论
  
# re: 手机地图-httpclient+htmlparser+jdom展示yahoo天气预报 2009-02-26 21:18 | songlele
您好;请问
那这个就是不可以用自己的手机来运行了么?
请问那我要是想直接通过手机来访问可以么,
如果不可以的话,那你上面的代码是运行在那里的,移动
的服务器上么?我也正在做一个类似的软件
请指教,小弟不胜感激!!!
我的邮箱是 henansonglele@163.com  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: