你的位置:首页 > Java教程

[Java教程]C蛮的全栈之路

目录

C蛮的全栈之路-序章 技术栈选择与全栈工程师
C蛮的全栈之路-node篇(一) 环境布置
C蛮的全栈之路-node篇(二) 实战一:自动发博客

---------------- 我是分割线 --------------

光看不写,收获必定不高。
咱们从一个实际功能开始把node用起来。

【数据分析】6 点发的文章在博客园阅读量最高?

这里有个链接,说每天6点发出阅读量最高。那么我们会希望先把内容准备好,然后6点的时候自动发出。
那么这个需求要怎么实现。我们一步一步做起来。

---------------- 分析 --------------

考虑做法,比如有这些思路:
1、博客园本身提供的定时发博客的办法
2、博客园提供的API
3、模拟登陆操作博客园后台
翻一下后台,博客自身没有提供这个功能,但在“设置”底部有一个“MetaWeblog访问地址: http://rpc.cnblogs.com/metaweblog/bolee”。
说明支持MetaWeblog接口API。
定时功能满地都是,成熟的很,所以需要做的主要就是要实现一个调用MetaWeblog发布博客的功能。

---------------- 准备工作 --------------

上GitHub,搜MetaWeblog,找JavaScript的资源,就找到了“node-modules/metaweblog”。
简单看一眼,里头实现了一个metaweblog的client,正是我们需要的。
那么建立一个工程目录,用npm install metaweblog拿下来。
它依赖这样准备工作就齐全了。

---------------- 开工 --------------

看一下metaweblog的接口。主要用这两个API。
Post metaWeblog.getPost(postid, username, password);
bool metaWeblog.editPost(postid, username, password, post, publish);
可见从getPost拿到随笔,用editPost传publish=true就可以发布了。

Post的结构里必填的部分如下:
dateTime dateCreated
string description
string title

OK!开始编码:

var MetaWeblog = require('metaweblog').MetaWeblog;var rpcurl = 'http://rpc.cnblogs.com/metaweblog/你的昵称';var username = '你的昵称';var password = '你的密码'; var postid = '你要发布的随笔的链接末尾的数字';var publish = true;var blog = new MetaWeblog(rpcurl);// GetPostByPostIDblog.getPost(postid, username, password, function(err, post) {});

View Code

跑起来看一眼返回的post是这样的。

可以看到,内容是

function jsonGetNameValue(obj) { if (typeof(obj) != 'object') {  return {}; } var name = obj['name']; var value = obj['value']; var ret = {}; if(name != undefined && value != undefined) {  ret[name] = value; } for(var key in obj) {  extend(ret, jsonGetNameValue(obj[key])); } return ret;}

View Code

现在再看看jsonGetNameValue(post)的内容:

这就舒服多了,我们想要的Post结构的内容都在里头。这样就可以调用editPost了。

 

// GetPostByPostIDblog.getPost(postid, username, password, function(err, post) { var ret = jsonGetNameValue(post); var editedPost = {'dateCreated': parseCNBlogIsoDatetime(ret['dateCreated']['datetime']['iso8601']),  'description': ret['description']['string'].toString(),  'title': ret['title']['string']};  // publish blog.editPost(postid, username, password, editedPost, publish, function(err, editResult) {  console.log(JSON.stringify(editResult)); });});// 返回{"params":{"param":{"value":{"boolean":1}}}}

View Code

 

跑起来看一眼,输出了true。

确认一下,果然已经发布出去了。

---------------- ESLint --------------

用npm装一下ESLint,VSCode里装个ESLint扩展,配好后报出一些错误,都解决掉,把格式顺一顺。
这样第一个版本就出炉了。
还有什么是可以做的呢?可以考虑来个ES6版本,加上错误处理等。

---------------- 功能点 --------------

npm、GitHub、ESLint等,这个例子没有express、koa什么的框架,也没有什么redis、mysql、MongoDB等周边的东西。

作为第一个例子算比较单纯了。

下载demo