【原】博客园第三方客户端-i博客园App开源

【原】博客园第三方客户端-i博客园App开源

本文转载请注明出处 —— polobymulberry-博客园


1.前言



目前i博客园App已经更新到2.0.0版本了,使用了最新的博客园Web API。相比于第一个版本,添加了很多新的功能,也修改了很多功能。整体来说改动比较大,代码也比较混乱。所以趁着清明假期,把代码好好整理了一番。目前基本的架构已成型(当然,后期还需要不断优化),但App基本功能方面还有很多需要添加的,后面会集中把App功能完善。

上面简单介绍了下目前App的情况,回到开源的话题来。开源这个App源码其实是我从一开始就有的愿景,不过当初代码很混乱,所以一直拖啊拖,中间也有很多实验室的事情,不过我一直也没放弃过要开源的这个想法。开源对我来说利大于弊的:

  1. 虽然我不是什么大牛,开源的代码也不是什么牛逼的项目。但是我觉得成为大牛总是有过程的,我希望我写博客或者开源代码可以记录下这些过程。很多牛人,比如说郭曜源大神(YYKit),等项目成熟了再一起发布出来。但是我观念不一样,我觉得开源代码也是一个产品,如果从做产品的思维来说,很重要的一点就是迭代开发,当我完成产品的基本功能后,我就应该去上线,和用户交流,再继续迭代开发下一版本的产品。目前我觉得我的代码整体架构差不多了,所以我觉得可以放到GitHub上了。
  2. 开源代码的目的主要还是为了想更多的人参与进来,本质也是为了督促自己学习。目前App功能还不完善,个人的力量也有限,希望能有更多的人加入进来,众人拾柴火焰高。
  3. 另外将自己的代码暴露出来,让大家批评指正,也是增强自己技术的有效途径。如果有幸能得到大神指点,那就一日千里了,哈哈(做梦吧你)!其实我觉得自己之前一直蒙头做自己的事,不和外界交流,这样不好,容易成为井底之蛙。
  4. 最后一个也是比较重要的——满足我的虚荣心(大家不要吝啬,多给我点小星星。哈哈,我就是这么不要脸!不要脸!要脸!脸!)

2.新版本i博客园App效果



之前版本的i博客园请移步《博客园第三方客户端-i博客园正式发布App Store》。因为换了新的Web API,所以增加了很多新功能,比如文库、登录等等。

博客 新闻 文库
我-登录 我-非登录  
 

3. i博客园代码结构简介


3.1 代码整体结构

整体代码是按功能模块来划分的,而每个功能模块是按MVC来的(下面会介绍)。这里我一共分为7个模块:1.博客(Blog)  2.新闻(News) 3.文库(知识库Library) 4.闪存(暂时未实现,Flash) 5.我(Me) 6.引导页(Guide) 7.主要(Main)

3.2 各模块介绍

3.2.1 博客

博客的内容主要包括两部分,一个是首页,另一个精选

首页部分使用的是简单的tableView,每个cell的类型就是放在BlogHomeTableViewCell目录下的ICBlogHomeTableViewCell。其中动态计算cell高度是使用了UITableView+FDTemplateLayoutCell这个库。精选部分使用了自定义collectionViewLayout,名叫ICBlogPickedCollectionViewLayout。另外,这两个部分放在了一个scrollView(ICBlogScrollView)中。

首页 精选

至于每个Blog的内容呈现,我使用的是KINWebBrowser库,而非使用从服务器端获取的JSON数据来解析,因为JSON解析的效果很差,还不如直接用Web浏览器显示好看。使用KINWebBrowser时,你只需双击页面,即可放大到最佳阅读模式,使用UIWebView无法做到这一点。

3.2.2 新闻

新闻的内容主要包括三个部分:最新(ICNewsNewestTableView)、推荐(ICNewsRecommendTableView)、热门(ICNewsHotTableView)。

三者都使用了tableView,放在一个scrollView(ICNewsScrollView)中。每个tableViewCell都是ICNewsTableViewCell类型。个人比较喜欢简洁风格。

不过新闻的内容显示,我是自己解析JSON数据进行排版的。自定义了一个ContentHTMLTemplateWithArgs的宏函数来构建HTML数据。

3.2.3 文库

基本同新闻,不过tableViewCell使用的是ICLibraryTableViewCell。

3.2.4 闪存(暂时未实现)

这一块后面会重点做一下,因为这是用户交流比较重度的一部分。

3.2.5.我

这一块做的比较久,UI相对来说比较复杂,另外也涉及到OAuth的知识。OAuth部分推荐dudu的OAuth系列博客

Me这一块其实是由两个两部分组成,一个是登录部分,一个是个人中心部分

**登录部分**

1.获取用户名和密码

2.将用户名和密码使用openssl进行rsa加密

3.再利用grant_type为password的OAuth认证方式来登录。

**个人中心**

我的博客和我的收藏都很简单,就是简单的tableView,连cell都没自定义。

设置部分功能就比较杂:

①清除缓存使用的是SDWebImage,异步清除,代码如下:

ICLog(@"size count : %ld",[[SDImageCache sharedImageCache] getSize]);
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    [[SDImageCache sharedImageCache] clearDiskOnCompletion:^{
        ICLog(@"清除成功");
        ICLog(@"size count : %ld",[[SDImageCache sharedImageCache] getSize]);
        cell.textLabel.text = [self getCacheSize];
    }];
});

②关于部分是使用了CNPPopupController,之所以这个简单的功能也使用第三方库,是因为我还没想好怎么做这种弹窗后背景模糊的效果,后面会更换成自己的库。

③评价就很简单了,不赘述了。

④退出账号其实就是删除了本地存储的账号信息文件。

3.2.6 引导页

请参考我之前的博客《博客园第三方客户端-i博客园正式发布App Store》,此处就不赘述了。

3.2.7 主要(Main)

这部分内容很多,所以我分开来说,至于这里Helper和Tool有什么区别,大家请无视,本人经验尚浅,还回答不了。

3.2.7.1 Vender

存放的是openssl的rsa加密的算法。具体可以参见博客《RSA加密》。

3.2.7.2 Category

这个存放的东西就比较多了。我一直很认同田伟宇的一句话,category是典型的化继承为组合的方法。而且这里我尽量不会把强业务放在category中,我觉得category应该放一些弱业务的东西。

3.2.7.3 Helper

将dataSource从ViewController中分离,做到light View Controller。参考文章《更轻量的 View Controllers》。

3.2.7.4 Tool

**ICControllerTool**

主要是解决第一次安装,或者更新App后,应该先启动引导界面的问题。

**ICNetworkTool**

在AFNetworking上面分装了一层,不过此处我觉得设计的不是很好。暂时先这样,后面尝试下离散型API调用。

**ICOAuthTool/ICClientCredentialsOAuthTool**

因为网络请求的时候会用到各种access_token,比如grant_type为client credentials和grant_type为password/refresh_token的access token就不一样。

因此我定义了这两个Tool来管理相对的请求。对应的Model就是ICOAuth和ICClientCredentialsOAuth。

3.2.7.5 Controller

**ICLeftMenuViewController/ICLeftSideMenu**

因为使用了RESideMenu,所以ICLeftSideMenu其实就是RESideMenu的子类,而ICLeftMenuViewController其实就是RESideMenu的LeftMenuViewController。

3.2.7.6 Other

放AppDelegate和main。

3.2.7.7 View

ICLeftMenuHeaderView其实就是ICLeftSideMenu上的这个:

4.开源的相关事项


4.1 开源地址

GitHub:https://github.com/polobymulberry/iCnblogs

4.2 开源后的工作

  • 闪存部分
  • 目前其他部分只能查看,还不能评论,删除
  • 搜索部分
  • 分享功能
  • refresh token不起作用
  • 还有很多,想到了我就加到GitHub页面上……

4.3 开源注意事项

因为有些地方涉及到隐私,所以我会将代码进行脱敏(ClientID和ClientSecret)。大家下载以后不一定能直接运行。如果你感兴趣的话,可以去博客园申请一个ClientID和ClientSecret。

5. 感谢



感谢博客园的管理员的帮助和指导。

时间: 2024-10-22 20:20:07

【原】博客园第三方客户端-i博客园App开源的相关文章

博客园第三方客户端-i博客园正式发布App Store

博客园第三方客户端-i博客园正式发布App Store 1. 前言 算来从15年8月到现在自学iOS已经快7个月了,虽然中间也是断断续续的,不过竟然坚持下来了.年后要找实习啦,于是萌生了一个想法 —— 写一个app练练手.这次我没弄后台了,直接使用了博客园的open api(嘿嘿).之前也做过一个app,叫做魔界-魔术,前后端都是我弄的,不过后端使用的是Bmob后端云(一个Baas服务),但是作为第一个app,代码上感觉很混乱,而且基本上都是用的第三方控件.这次的i博客园是我完全独立开发的(包括

又一款博客园Android客户端低调推出

每天都会逛博客园,业余时间自己做了一款博客园Android客户端,和目前已有的一些第三方博客园客户端类似,数据来源请求的是博客园的开放接口,但是在体验上希望能做的更好,同时设计风格依照Android的原生效果(不是Android L的material design,毕竟现在还没有几款机型), 目前客户端支持的功能还不是非常多,但是涵盖了基本的使用需求,特别适合上下班,晚上使用.根据现有的借口,v1版已实现的具体功能如下有: 最新的首页博客数据分页浏览: 最新的新闻数据: 博客阅读排行榜: 博客园

博客园 Mac客户端 electron 源码

博客园 Mac 客户端 2.0-Beta 的源码已发布在 https://github.com/LunaGao/cnblog-electron https://github.com/LunaGao/cnblog-electron https://github.com/LunaGao/cnblog-electron 重要的事情说三遍 未提交内容 app/webapi/oauthWebApi.js 其中包含账号等敏感信息 app/build 内容由各个文件生成 node_modules 内容是第三方

博客园—Android客户端

如果有一个博客园客户端支持:点赞.支持.反对.评论.@.收藏等等等等,那么博客园的新闻.博文评论区是否能更加活跃?园友能否更加积极?进步能否更加快速?博客园能否更加精彩?一起来看看吧. 笔者业余开发的博客园Android客户端版本首次在博客园公布,希望广大园友多多支持,极速省流稳定,当然阅读界面由于每个人写的博客千差万别,不像新闻一样有专业小编统一的编码,笔者仅能用正则做到尽量格式化,做的不好的地方请见谅. 当前版本支持的功能有以下这些:博客园所有分类查看.支持博客新闻点支持和反对.评论支持和反

基于react-native实现的博客园手机客户端

从五月初开始,中间抽出断断续续的业余时间,基于react-native,在博客园现有开放接口的基础上,实现了一个博客园手机客户端.由于博主没有ios开发环境,所以当前仅适配了android版本.出于学习和实践react-native的目的,UI呈现这一块完全凭自己所好,bug也有一些,更多是希望抛砖引玉,让大家感受到react/react-native为移动端开发带来的全新视觉和可能性. 一,相关链接1,react-nativehttps://github.com/facebook/react-

博客园 Mac客户端 1.0

从11月10号,开始打算写这个客户端,到今天,终于写出来了第一版. 有些显得简陋,有点呆板.欢迎大家批评指正,额···别太刻薄···. 初学osx开发,也算是找个项目来做做~(文章最后有下载链接) 此次版本为:1.0 此版本实现内容: 1. 博客列表展示. 2. 博客内容展示. 3. 新闻列表展示. 4. 新闻内容展示. 下一个版本中,准备实现如下内容: 1. 博客回复展示. 2. 新闻回复展示. 来,上点图片: 下载地址:http://vdisk.weibo.com/s/vA2tfcM2K2R

博客园 Mac客户端 1.0 源码

直接上重点~这里是github的地址.这里是github的地址.这里是github的地址. 此次开源的是mac 1.0客户端的源码.额···也是那个不准备维护的.并且也不再维护的那个版本.之后将会对2.0的客户端进行维护. 先声明:这是我第一次用swift写osx系统软件,代码或者结构有什么问题也请大家不吝赐教,谢谢~~~ 项目结构 CNBlogsForMac从上到下目录解析: - LGWebImage  自己写的,没用到,无用的东西,可以无视.之前是想用它来做Web图片引用的,后来找到了代替的

Windows Live Writer离线博客工具使用教程(适用于博客园、CSDN、51CTO等等博客)

文章背景 写博客不单是一种记录方式,更是一种工作习惯,与朋友一起分享是一件很快乐的事情,以前写博客,我们都会面临博客自带编辑器上各种头疼问题,比如排版.样式.功能局限性等等.但这些阻止不了我写下去的决心.一天突然奇想搜索下是否有那种离线博客发布的工具,没想到一谷歌,结果是,我竟然Out了好多年!泪奔啊- 文章主题 在网上查找离线博客之类的工具,发现各式各样都有!参差不齐!这里我就不一一举例了.最后决定使用微软一款开源日志发布工具Windows Live Writer.之所以用它,主要是原因有三:

【转】Windows Live Writer离线博客工具使用教程(适用于博客园、CSDN、51CTO等等博客)

文章背景 写博客不单是一种记录方式,更是一种工作习惯,与朋友一起分享是一件很快乐的事情,以前写博客,我们都会面临博客自带编辑器上各种头疼问题,比如排版.样式.功能局限性等等.但这些阻止不了我写下去的决心.一天突然奇想搜索下是否有那种离线博客发布的工具,没想到一谷歌,结果是,我竟然Out了好多年!泪奔啊- 文章主题 在网上查找离线博客之类的工具,发现各式各样都有!参差不齐!这里我就不一一举例了.最后决定使用微软一款开源日志发布工具Windows Live Writer.之所以用它,主要是原因有三: