Android应用开发-小巫CSDN博客clientJsoup篇
/**
* 使用Jsoup解析html文档
*
* @param blogType
* @param str
* @return
*/
public static List<BlogItem> getBlogItemList(int blogType, String str) {
// Log.e("URL---->", str);
List<BlogItem> list = new ArrayList<BlogItem>();
// 获取文档对象
Document doc = Jsoup.parse(str);
// Log.e("doc--->", doc.toString());
// 获取class="article_item"的全部元素
Elements blogList = doc.getElementsByClass("article_item");
// Log.e("elements--->", blogList.toString()); for (Element blogItem : blogList) {
BlogItem item = new BlogItem();
String title = blogItem.select("h1").text(); // 得到标题
// System.out.println("title----->" + title);
String description = blogItem.select("div.article_description")
.text();
// System.out.println("descrition--->" + description);
String msg = blogItem.select("div.article_manage").text();
// System.out.println("msg--->" + msg);
String date = blogItem.getElementsByClass("article_manage").get(0)
.text();
// System.out.println("date--->" + date);
String link = BLOG_URL
+ blogItem.select("h1").select("a").attr("href");
// System.out.println("link--->" + link);
item.setTitle(title);
item.setMsg(msg);
item.setContent(description);
item.setDate(date);
item.setLink(link);
item.setType(blogType); // 没有图片
item.setImgLink(null);
list.add(item); }
return list;
}
/**
* 扒取传入url地址的博客具体内容
*
* @param url
* @param str
* @return
*/
public static List<Blog> getContent(String url, String str) {
List<Blog> list = new ArrayList<Blog>(); // 获取文档内容
Document doc = Jsoup.parse(str); // 获取class="details"的元素
Element detail = doc.getElementsByClass("details").get(0);
detail.select("script").remove(); // 删除每一个匹配元素的DOM。 // 获取标题
Element title = detail.getElementsByClass("article_title").get(0);
Blog blogTitle = new Blog();
blogTitle.setState(Constants.DEF_BLOG_ITEM_TYPE.TITLE); // 设置状态
blogTitle.setContent(ToDBC(title.text())); // 设置标题内容 // 获取文章内容
Element content = detail.select("div.article_content").get(0); // 获取全部标签为<a的元素
Elements as = detail.getElementsByTag("a");
for (int b = 0; b < as.size(); b++) {
Element blockquote = as.get(b);
// 改变这个元素的标记。比如,<span>转换为<div> 如el.tagName("div");。
blockquote.tagName("bold"); // 转为粗体
} Elements ss = detail.getElementsByTag("strong");
for (int b = 0; b < ss.size(); b++) {
Element blockquote = ss.get(b);
blockquote.tagName("bold");
} // 获取全部标签为<p的元素
Elements ps = detail.getElementsByTag("p");
for (int b = 0; b < ps.size(); b++) {
Element blockquote = ps.get(b);
blockquote.tagName("body");
} // 获取全部引用元素
Elements blockquotes = detail.getElementsByTag("blockquote");
for (int b = 0; b < blockquotes.size(); b++) {
Element blockquote = blockquotes.get(b);
blockquote.tagName("body");
} // 获取全部标签为<ul的元素
Elements uls = detail.getElementsByTag("ul");
for (int b = 0; b < uls.size(); b++) {
Element blockquote = uls.get(b);
blockquote.tagName("body");
} // 找出粗体
Elements bs = detail.getElementsByTag("b");
for (int b = 0; b < bs.size(); b++) {
Element bold = bs.get(b);
bold.tagName("bold");
} // 遍历博客内容中的全部元素
for (int j = 0; j < content.children().size(); j++) {
Element c = content.child(j); // 获取每一个元素 // 抽取出图片
if (c.select("img").size() > 0) {
Elements imgs = c.getElementsByTag("img");
System.out.println("img");
for (Element img : imgs) {
if (!img.attr("src").equals("")) {
Blog blogImgs = new Blog();
// 大图链接
if (!img.parent().attr("href").equals("")) {
blogImgs.setImgLink(img.parent().attr("href"));
System.out.println("href="
+ img.parent().attr("href"));
if (img.parent().parent().tagName().equals("p")) {
// img.parent().parent().remove();
}
img.parent().remove();
}
blogImgs.setContent(img.attr("src"));
blogImgs.setImgLink(img.attr("src"));
System.out.println(blogImgs.getContent());
blogImgs.setState(Constants.DEF_BLOG_ITEM_TYPE.IMG);
list.add(blogImgs);
}
}
}
c.select("img").remove(); // 获取博客内容
Blog blogContent = new Blog();
blogContent.setState(Constants.DEF_BLOG_ITEM_TYPE.CONTENT); if (c.text().equals("")) {
continue;
} else if (c.children().size() == 1) {
if (c.child(0).tagName().equals("bold")
|| c.child(0).tagName().equals("span")) {
if (c.ownText().equals("")) {
// 小标题,咖啡色
blogContent
.setState(Constants.DEF_BLOG_ITEM_TYPE.BOLD_TITLE);
}
}
} // 代码
if (c.select("pre").attr("name").equals("code")) {
blogContent.setState(Constants.DEF_BLOG_ITEM_TYPE.CODE);
blogContent.setContent(ToDBC(c.outerHtml()));
} else {
blogContent.setContent(ToDBC(c.outerHtml()));
}
list.add(blogContent);
} return list;
}
/**
* 获取博文评论列表
*
* @param str
* json字符串
* @return
*/
public static List<Comment> getBlogCommentList(String str, int pageIndex,
int pageSize) {
List<Comment> list = new ArrayList<Comment>();
try {
// 创建一个json对象
JSONObject jsonObject = new JSONObject(str);
JSONArray jsonArray = jsonObject.getJSONArray("list"); // 获取json数组
int index = 0;
int len = jsonArray.length();
BlogCommentActivity.commentCount = String.valueOf(len); // 评论条数
// 假设评论数大于20
if (len > 20) {
index = (pageIndex * pageSize) - 20;
} if (len < pageSize && pageIndex > 1) {
return list;
} if ((pageIndex * pageSize) < len) {
len = pageIndex * pageSize;
} for (int i = index; i < len; i++) {
JSONObject item = jsonArray.getJSONObject(i);
String commentId = item.getString("CommentId");
String content = item.getString("Content");
String username = item.getString("UserName");
String parentId = item.getString("ParentId");
String postTime = item.getString("PostTime");
String userface = item.getString("Userface"); Comment comment = new Comment();
comment.setCommentId(commentId);
comment.setContent(content);
comment.setUsername(username);
comment.setParentId(parentId);
comment.setPostTime(postTime);
comment.setUserface(userface); if (parentId.equals("0")) {
// 假设parentId为0的话,表示它是评论的topic
comment.setType(Constants.DEF_COMMENT_TYPE.PARENT);
} else {
comment.setType(Constants.DEF_COMMENT_TYPE.CHILD);
}
list.add(comment);
} } catch (JSONException e) {
e.printStackTrace();
}
return list;
}
Android应用开发-小巫CSDN博客clientJsoup篇的更多相关文章
- Android应用开发-小巫CSDN博客client之嵌入有米广告
Android应用开发-小巫CSDN博客client之嵌入有米广告 上一篇博客给大家介绍怎样集成友盟社会化组件,本篇继续带来干货,教大家怎样嵌入广告到应用中去.小巫自称专业对接30年,熟悉各大渠道SD ...
- Android应用开发-小巫CSDN博客client之显示博文具体内容
Android应用开发-小巫CSDN博客客户端之显示博文具体内容 上篇博文给大家介绍的是怎样嵌入有米广告而且获取收益,本篇博客打算讲讲关于怎样在一个ListView里显示博文的具体信息.这个可能是童鞋 ...
- Android应用开发-小巫CSDN博客client之获取评论列表
Android应用开发-小巫CSDN博客客户端之获取评论列表 上一篇博客介绍了博文具体内容的业务逻辑实现,本篇博客介绍小巫CSDN博客客户端的最后一项功能.获取评论列表,这个功能的实现跟前面获取文章列 ...
- Android应用开发-小巫CSDN博客客户端开发开篇
2014年9月8日 八月十五 祝各位中秋节快乐 小巫断断续续花了几个星期的时间开发了这么一款应用——小巫CSDN博客,属于私人定制的这样的一款应用,整个客户端的数据全部来自本人博客,是通过爬取本人博客 ...
- 基于Netbeans的安卓Android开发环境配置 - CSDN博客
原文:基于Netbeans的安卓Android开发环境配置 - CSDN博客 基于Netbeans的安卓Android开发环境配置 一.准备工作 NetBeans 勾选网页中的Accept-选择对应系 ...
- iOS开发的知名大牛博客小汇
王巍的博客:王巍目前在日本横滨任职于LINE.工作内容主要进行Unity3D开发,8小时之外经常进行iOS/Mac开发.他的陈列柜中已有多款应用,其中番茄工作法工具非常棒.http://onevcat ...
- 小议common lisp程序开发流程 - Ever 17 - 博客频道 - CSDN.NET
小议common lisp程序开发流程 - Ever 17 - 博客频道 - CSDN.NET 小议common lisp程序开发流程 分类: lisp 2011-04-17 20:59 1316人阅 ...
- 敏捷开发用户故事系列之十一:CSDN博客用户故事分析
这是敏捷开发用户故事系列的第十一篇.(栏目目录) 经常有人问起有没有完整的用户故事案例.本人在网上找了一下,大约能找到两三篇,但多数只是为了描述用户故事的语法而已,都不涉及用户故事的颗粒度.大量故事的 ...
- 安卓开发:简单的登陆跳转_APK实现直接跳转到本CSDN博客
最近在开始接触Android APP开发,有了一点java基础之后,安卓代码确实看起来就没有那么难了,可以跟着书上把例程敲一遍,然后熟能生巧可以应用起来,现在写了一个简单的APP,实现的是Edit编辑 ...
随机推荐
- JDBC使用数据库来完成分页功能
本篇讲诉如何在页面中通过操作数据库来完成数据显示的分页功能.当一个操作数据库进行查询的语句返回的结果集内容如果过多,那么内存极有可能溢出,所以在大数据的情况下分页是必须的.当然分页能通过很多种方式来实 ...
- eclipse发布项目报错:Multiple Contexts hava a path of “/xxx“
你的位置:首页 > Java编程 > eclipse发布项目报错:Multiple Contexts hava a path of “/xxx“ eclipse发布项目报错:Multipl ...
- XP教育网用户免费上网
本文针对 XP 教育网用户免费上网,其他系统未作测试.若有疑问百度空间留言 http://hi.baidu.com/itas109 http://blog.csdn.net/itas109 步骤 ...
- 贴一个CMemDC 代码,这东西真不错噢,短小精悍,可谓极品
罗索客 发布于 2006-11-28 21:53 点击:3941次 来自: 原文: http://yuantao82.spaces.live.com/Blog/cns!8FC0A772D812A22 ...
- 使用CUNIT测试
使用CUNIT测试 一:概述 CUnit是一个c语言的单元测试框架,它是以静态链接库的形式,连接到用户代码中的,主要的功能就是提供了语义丰富的断言和多种测试结果输出接口,可以方便地生成测试报告. 但是 ...
- 在cocos2d-x jsb/html5中设置触摸代理的方法
和官方的说明不同,js binding的很多api和ch5版是不一样的.遇到不一样的就需要我们努力去看源码寻找了. 主要是以下几个文件 cocos2d_specifics.cpp cocos2d_sp ...
- SRM 624 Building Heights DivI 解读
几乎相同的一标题.欲了解更多请参阅:http://community.topcoder.com/stat?c=problem_statement&pm=13211&rd=15857 思 ...
- 再说Java EE
说到JavaEE(曾经叫J2EE)是什么,你可能回答:JavaEE是一组规范,这么说是没错,可是自己不认为这个答案非常大.非常空么?什么又是规范?规范能组成应用么?能在JVM中跑起来么?要理解这些,先 ...
- 第二章排错的工具:调试器Windbg(下)
感谢博主 http://book.51cto.com/art/200711/59874.htm 2.2 读懂机器的语言:汇编,CPU执行指令的最小单元2.2.1 需要用汇编来排错的常见情况 汇编是 ...
- CentOS下安装MySQL,Windows下使用Navicat for MySql连接
安装 查看有没有安装过: yum list installed mysql* rpm -qa | grep mysql* 查看有没有安装包: yu ...