- 浏览: 83723 次
文章分类
- 全部博客 (136)
- 我的技术资料收集 (98)
- 具体技术 (1)
- 的技术资料收集 (4)
- All Articles (1)
- 机器学习 Machine Learning (1)
- 网络编程 (1)
- java (2)
- ava (1)
- 零散技术 (1)
- C# (3)
- 技术资料收集 (1)
- CQRS (1)
- 数据库技术(MS SQL) (1)
- .Net微观世界 (1)
- Oracle SQL学习之路 (1)
- C/C++ (1)
- JS/JQ (1)
- Js封装的插件/实例/方法 (2)
- 敏捷个人 (2)
- Javascript (1)
- 程序设计---设计模式 (1)
- Bug (1)
- 未知分类 (1)
- 程序设计 (1)
- Sharepoint (1)
- Computer Graphic (1)
- IT产品 (1)
- [06]JS/jQuery (1)
- [07]Web开发 (1)
- .NET Solution (1)
- Android (3)
- 机器学习 (1)
- 系统框架设计 (1)
- Others (1)
- 算法 (1)
- 基于Oracle Logminer数据同步 (1)
- 网页设计 (1)
- 原创翻译 (1)
- EXTJS (1)
- Jqgrid (1)
- 云计算 (1)
最新评论
原帖地址:http://www.cnblogs.com/leonwang/archive/2013/05/31/metro-cnblogs-parsehtmllist.html
昨天晚上完成了数据源获取方式的迁移工作, 所有列表和详情数据都从开放的博客园wcf服务获得 , 删除了旧的javascript解析html提取数据的代码, 删除之前保存了一个副本, 毕竟也是测试过的,浪费过时间的东西,现记录下来,以下方法在当前博客园界面改版前是可以工作的,当然如果界面改版了, 大家都懂得 ,javascript代码如下:
// 解析博客列表,新闻列表 ,提取出json 格式数据
function parseHtml( html )
{
var page = document.createElement( 'div' );
//metro app 方法: WinJS.Utilities.setInnerHTML( page, toStaticHTML( html ) );
page.innerHTML = html;
var titleLinks = page.getElementsByClassName( 'titlelnk' ),
summaries = page.getElementsByClassName( 'post_item_summary' ),
post = page.getElementsByClassName( 'post_item_foot' ),
comments = page.getElementsByClassName( 'article_comment' ),
reads = page.getElementsByClassName( 'article_view' ),
items = [],
item,
img = [],
postLinks = [],
regx = /\d+/,
count = titleLinks.length,
dateRegx = /\d{4}-\d{1,2}-\d{1,2}\s+\d{1,2}:\d{1,2}/,
// used for key generating
nowticks = new Date().getTime();
if ( summaries.length === count
&& comments.length === count
&& post.length === count
&& comments.length === count
&& reads.length === count )
{
for ( var i = 0; i < count; i++ )
{
item = {};
item.key = nowticks++;
// title & url
item.title = titleLinks[i].innerText || '';
item.url = titleLinks[i].getAttribute( 'href' ) || '#';
// summary & img
item.summary = summaries[i].innerText;
img = summaries[i].getElementsByTagName( 'img' );
if ( img.length > 0 )
{
item.picture = img[0].getAttribute( 'src' );
} else
{
item.picture = 'images/cnblogs.png';
}
// postBy & postDate & comment & read
postLinks = post[i].getElementsByTagName( 'a' );
if ( postLinks.length === 3 )
{
item.postBy = postLinks[0].innerText;
var postDate = dateRegx.exec( postLinks[0].nextSibling.textContent );
if ( postDate && postDate[0] )
{
item.postDate = postDate[0];
var p = Date.parse( item.postDate.replace( /-/g, '/' ) );
var c = new Date().getTime(),
passedSec = ( c - p ) / 1000, // sec
passedMin = passedSec / 60, // min
passedHour = passedMin / 60, // hour
passedDay = passedHour / 24; // day
if ( passedSec < 60 )
{
item.postDate = passedSec.toFixed( 0 ) + '秒前';
}
else if ( passedMin < 60 )
{
item.postDate = passedMin.toFixed( 0 ) + '分钟前';
}
else if ( passedHour < 24 )
{
item.postDate = passedHour.toFixed( 0 ) + '小时前';
}
else if ( passedDay < 4 )
{
// passed less than 4 day
item.postDate = passedDay.toFixed( 0 ) + '天前';
}
else
{
}
}
else
{
item.postDate = '';
}
// comment
item.comment = regx.exec( postLinks[1].innerText );
if ( item.comment && item.comment.length > 0 )
{
item.comment = item.comment[0];
}
// read
item.read = regx.exec( postLinks[2].innerText );
if ( item.read && item.read.length > 0 )
{
item.read = item.read[0];
}
}
items.push( item );
}
}
else
{
// error
}
return items;
};
下面测试博客列表 , 这里我们提取博客园首页栏目第一页html,从fiddler 或chrome工具栏可以很方便得到相关url
可以看到url和相关参数, 我试了下get请求, 博客园也正常返回 : http://www.cnblogs.com/mvc/AggSite/PostList.aspx?CategoryType=SiteHome&ParentCategoryId=0&CategoryId=808&ItemListActionName=PostList&PageIndex=1 ,
得到列表html后, 测试解析函数
window.onload = function ()
{
var blogsHtml = document.getElementById( 'homepage' ).innerHTML;
var blogs = parseHtml( blogsHtml );
console.log( blogs );
};
结果如下:
同理 , 得到新闻页列表 第一页 http://www.cnblogs.com/news/1/
window.onload = function ()
{var newsHtml = document.getElementById( 'post_list' ).innerHTML;
var news = parseHtml( newsHtml );
console.log( news );
};
运行结果:
大家可能觉得js处理效率有问题, 比较慢, 其实不然,至少从感官而言, 迁移前后并未感觉加载列表速度有什么不同 ,看来IE10的js引擎也不是盖的 ,以上测试源码如下 :
发表评论
-
C#WebBrowser控件使用教程与技巧收集--苏飞收集 - sufeinet
2013-06-28 12:07 1067原帖地址:http://www.cnblogs.com/suf ... -
我要喷一个自认为很垃圾的网站架构 - 老赵【苏州】
2013-06-28 12:01 1126原帖地址:http://www.cnblogs.com/lao ... -
[翻译] Oracle Database 12c 新特性Multitenant - Cheney Shue
2013-06-28 11:43 620原帖地址:http://www.cnblogs.com/ese ... -
memcahd 命令操作详解 - 阿正-WEB
2013-06-28 11:37 469原帖地址:http://www.cnblogs.com/azh ... -
面向过程的代码符合大众的思维方式吗? - 史蒂芬.王
2013-06-27 10:28 593原帖地址:http://www.cnblogs.com/ste ... -
面向过程的代码符合大众的思维方式吗? - 史蒂芬.王
2013-06-27 10:28 558原帖地址:http://www.cnblogs.com/ste ... -
RPG游戏之组队测试 - zthua
2013-06-27 10:22 557原帖地址:http://www.cnblogs.com/zth ... -
IT人们给个建议 - SOUTHER
2013-06-26 14:06 523原帖地址:http://www.cnblogs.com/sou ... -
Java向前引用容易出错的地方 - 银河使者
2013-06-26 14:00 492原帖地址:http://www.cnblogs.com/nok ... -
使用Func<T1, T2, TResult> 委托返回匿名对象 - 灰身
2013-06-26 13:54 800原帖地址:http://www.cnblo ... -
【web前端面试题整理03】来看一点CSS相关的吧 - 叶小钗
2013-06-25 10:45 783原帖地址:http://www.cnblogs.com/yex ... -
Windows 8 动手实验系列教程 实验6:设置和首选项 - zigzagPath
2013-06-25 10:27 619原帖地址:http://www.cnblogs.com/zig ... -
闲聊可穿戴设备 - shawn.xie
2013-06-25 10:21 562原帖地址:http://www.cnblo ... -
CentOS下Mysql安装教程 - 小学徒V
2013-06-23 15:24 608原帖地址:http://www.cnblogs.com/xia ... -
vmware安装ubuntu12.04嵌套安装xen server(实现嵌套虚拟化) - skyme
2013-06-23 15:18 836原帖地址:http://www.cnblogs.com/sky ... -
之前专门为IE6、7开发的网站如何迁移到IE10及可能遇到的问题和相应解决方案汇总 - 海之澜
2013-06-23 15:12 949原帖地址:http://www.cnblogs.com/wuz ... -
Android学习笔记--解析XML之SAX - 承香墨影
2013-06-23 15:01 407原帖地址:http://www.cnblo ... -
SQL Server 性能优化之——T-SQL TVF和标量函数
2013-06-19 09:32 670原帖地址:http://www.cnblogs.com/Boy ... -
Nginx学习笔记(二) Nginx--connection&request
2013-06-19 09:26 666原帖地址:http://www.cnblogs.com/cod ... -
从郭美美霸气侧漏看项目管理之项目经理防身术
2013-06-19 09:20 499原帖地址:http://www.cnblogs.com/had ...
相关推荐
在博客园客户端中,SAX解析被用来解析服务器返回的XML数据,如博客列表、文章详情和新闻资讯。相比DOM解析,SAX解析不需要一次性加载整个XML文档到内存,而是逐个处理元素,降低了内存消耗,适合处理大型数据流。 ...
这个标签表示源码是专门为博客园的Android客户端开发的,用户可以通过这个客户端在移动设备上浏览和管理博客园的内容。 【压缩包子文件的文件名称列表】: 1. 源码说明.htm:这是一个HTML文件,很可能包含了关于...
在博客园客户端中,可能使用了HttpURLConnection、OkHttp或Retrofit等网络库进行数据获取。这为学生提供了实践网络编程的机会,理解异步加载、数据缓存、错误处理等策略。 此外,数据解析是将服务器返回的JSON或XML...
5. **网络请求**:可能使用了HttpURLConnection、OkHttp或Retrofit等库来实现与博客园服务器的交互,获取和发送数据。 6. **JSON解析**:数据通常以JSON格式从服务器返回,使用Gson或Jackson库进行解析,转换为Java...
【Android应用源码Cnblogs博客园安卓客户端.zip】是一个包含Android应用的源代码压缩包,主要用于学习和研究Cnblogs博客园的Android客户端实现。这个客户端是Android开发者用来访问和交互博客园内容的移动应用,它...
这篇文档将深入解析《Android应用源码(精)仿博客园客户端源码》这个项目,旨在为Android移动开发的学习者,尤其是那些正在进行毕业设计的学生,提供详尽的知识点讲解。 一、Android应用基础架构 该项目基于Android...
【Android博客园博客客户端源码】是一个非常适合Android开发者学习和参考的应用程序源代码。这个项目旨在实现一个功能齐全、用户体验良好的博客园移动客户端,通过它,用户可以方便地浏览、阅读和互动博客园上的文章...
博客园客户端可能使用了Retrofit、OkHttp等库进行网络请求,获取博客文章列表、评论等内容。JSON数据通常被解析成Model类,如Gson或Jackson库。 6. **数据持久化** 数据可能保存在SQLite数据库中,通过...
此外,客户端源码可能还涵盖了UI设计和用户体验方面的内容,如使用RecyclerView展示博客列表,自定义Adapter和ViewHolder,以及使用SwipeRefreshLayout实现下拉刷新。同时,可能还会涉及到异步处理,如使用AsyncTask...
标题中的“203-ESP32_SDK开发-TCP服务器(模组AP热点模式,支持多个客户端连接通信)”指的是使用ESP32微控制器通过SDK进行TCP服务器的开发,该服务器运行在模块的AP(接入点)模式下,可以作为无线热点,允许多个...
Android版客户端的源码是学习Android应用开发的宝贵资源,它涵盖了从UI设计、网络请求到数据解析等多个方面,是理解Android应用架构和实现逻辑的理想实例。 1. **项目结构分析** - 项目的目录结构通常遵循MVP...
1. **网络请求与数据解析**:博客园客户端必然涉及到网络请求,以获取最新的博客文章或用户信息。这通常会用到像`OkHttp`这样的网络库,以及`Gson`或`Jackson`来解析JSON数据。理解如何构建API请求,处理异步操作,...
ios即时通讯客户端开发之-mac上搭建openfire服务器 - 月光的尽头 - 博客园.webarchive ) 转发
3. **网络通信**:客户端通常使用HTTP或HTTPS协议与服务器进行通信,实现数据的获取和发送。Android提供了多种网络库,如OkHttp、Retrofit等,用于简化网络请求。开发者可以通过源码了解如何处理API接口、进行数据...
【标题】"cnblogs-Mac-Swift:博客园Mac客户端1.0的源码-源码客"指的是一个开源项目,它包含了博客园(Cnblogs)的Mac客户端版本1.0的完整源代码。这个项目的目的是为了让开发者能够查看、学习并参与到这个客户端软件...
4. **网络请求**:Cnblogs客户端肯定涉及到网络通信,可能使用了诸如OkHttp、Retrofit或Volley等网络库进行数据的获取和发送。研究这部分源码可以帮助我们理解如何处理异步任务,如何封装网络接口,以及如何处理网络...
Android项目源码自行设计的博客园客户端是一个个人开发者开发的基于安卓的博客园客户端,可以实现博客园新闻频道的浏览和单条新闻的评论查看,但是不能进行评论。新闻部分又分为热门新闻和推荐新闻,数据都是直接取...