基于V2EX API的nodejs组件.
今天又学习到了新的知(zi)识(shi),来给自己做个笔录,也算在这酷热的天气里给自己写了一篇降温的‘膏药’,话就讲这么多了 ,start off......
首先 ,依赖选择:
/**设置为严格模式*/
'use strict'; //引入依赖
const https = require('https');
const querystring = require('querystring');
const util = require('util');
下面代码块,可以理解为封装好的模块,创建命名为:V2exApi.js(此处随意),如何调用下面会讲到,go on......
//定义类
class V2exApi { /**
* V2exApi constructor.
*/
constructor() {
} /**方案一
* @param string api
* @param array params
* @param bool $format
*
* @return mixed|string
*
* @throws HttpException
*/
request(api, params = {}, $format = true) { let apiDomain = "https://www.v2ex.com/api/"; //格式化地址
let apiUrl = util.format(api, apiDomain, Object.keys(params).length > ? querystring.stringify(params) : '');
const result = "";
https.get(apiUrl, res => {
const buffer = [];
res.on('data', data => {
buffer.push(data);
});
res.on('end', err => {
let data = Buffer.concat(buffer).toString('utf-8');
result = $format ? JSON.parse(data) : data;
}); }).on('error', err => {
console.log(err);
}); return result;
} /**方案二 异步
* @param string api
* @param array params
* @param bool $format
*
* @return mixed|string
*
* @throws HttpException
*/
// request(api, params = {}, $format = true) { // return new Promise(resolve => {
// //格式化请求地址
// let apiDomain = "https://www.v2ex.com/api/"; // let apiUrl = util.format(api, apiDomain, Object.keys(params).length > 0 ? querystring.stringify(params) : '');
// const result = "";
// https.get(apiUrl, res => {
// const buffer = [];
// res.on('data', data => {
// buffer.push(data);
// });
// res.on('end', err => {
// let data = Buffer.concat(buffer).toString('utf-8');
// result = $format ? JSON.parse(data) : data;
// resolve(result);
// }); // }).on('error', err => {
// resolve(err);
// });
// });
// } /**
* 获取最热主题.
*
* @param bool $format
*
* @return mixed|string
*
* @throws HttpException
*/
getHotTopics($format = true) {
return this.request('%stopics/hot.json', {}, $format);
} /**
* 获取最新主题.
*
* @param bool $format
*
* @return mixed|string
*
* @throws HttpException
*/
getLatestTopics($format = true) {
return this.request('%stopics/latest.json', {}, $format);
} /**
* 获取节点信息.
*
* @param string $name
* @param bool $format
*
* @return mixed|string
*
* @throws HttpException
*/
getNode(name, $format = true) {
return this.request('%snodes/show.json?%s', { 'name': name }, $format);
} /**
* 根据用户名获取用户信息.
*
* @param string $username
* @param bool $format
*
* @return mixed|string
*/
getMemberByUsername(username, $format = true) {
return this.request('%smembers/show.json?%s', { 'username': username }, $format);
} /**
* 根据用户 ID 获取用户信息.
*
* @param int $id
* @param bool $format
*
* @return mixed|string
*/
getMemberByID(id, $format = true) {
return this.request('%smembers/show.json?%s', { 'id': id }, $format);
}
} //暴露接口
module.exports = V2exApi;
const V2exApi = require('./V2exApi'); const $v2ex = new V2exApi();
Example:
### 获取最热主题
git源码地址:https://github.com/KelvinKey/v2ex-api
V2EX API接口地址:https://www.v2ex.com/p/7v9TEc53
End,努力做个多思考的人吧.
基于V2EX API的nodejs组件.的更多相关文章
- 微信小程序-基于高德地图API实现天气组件(动态效果)
微信小程序-基于高德地图API实现天气组件(动态效果) 在社区翻腾了许久,没有找到合适的天气插件.迫不得已,只好借鉴互联网上的web项目,手动迁移到小程序中使用.现在分享到互联网社区中,帮助后续有 ...
- 基于.Net平台常用的组件和框架整理
转载自:http://www.cnblogs.com/hgmyz/p/5313983.html 基于转载进行补充 RPC框架: RPC:远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而 ...
- 饿了么基于Vue2.0的通用组件开发之路(分享会记录)
Element:一套通用组件库的开发之路 Element 是由饿了么UED设计.饿了么大前端开发的一套基于 Vue 2.0 的桌面端组件库.今天我们要分享的就是开发 Element 的一些心得. 官网 ...
- 基于 bootstrap 的 vue 分页组件
申手党点这里下载示例 基于 bootstrap 的 vue 分页组件,我想会有那么一部分同学,在使用Vue的时候不使用单文件组件,因为不架设 NodeJS 服务端.那么网上流传的 *.vue 的各种分 ...
- 五种开源API网关实现组件对比
五种开源API网关实现组件对比 API 网关一些实现 使用一个组件时,尤其是这种比较流行的架构,组件肯定存在开源的,我们不必自己去从零开始去实现一个网关,自己开发一个网关的工作量是相当可观的, ...
- 基于SqlSugar的开发框架循序渐进介绍(13)-- 基于ElementPlus的上传组件进行封装,便于项目使用
在我们实际项目开发过程中,往往需要根据实际情况,对组件进行封装,以更简便的在界面代码中使用,在实际的前端应用中,适当的组件封装,可以减少很多重复的界面代码,并且能够非常简便的使用,本篇随笔介绍基于El ...
- 一个技术汪的开源梦 —— 基于 .Net Core 的公共组件之 Http 请求客户端
一个技术汪的开源梦 —— 目录 想必大家在项目开发的时候应该都在程序中调用过自己内部的接口或者使用过第三方提供的接口,咱今天不讨论 REST ,最常用的请求应该就是 GET 和 POST 了,那下面开 ...
- 基于vue2.0的分页组件开发
今天安排的任务是写基于vue2.0的分页组件,好吧,我一开始是觉得超级简单的,但是越写越写不出来,写的最后乱七八糟的都不知道下句该写什么了,所以重新捋了思路,小结一下- 首先写组件需要考虑: 要从父组 ...
- Atitit 游戏的通常流程 attilax 总结 基于cocos2d api
Atitit 游戏的通常流程 attilax 总结 基于cocos2d api 加载音效1 加载页面1 添加精灵1 设置随机位置2 移动2 垃圾gc2 点击evt2 爆炸效果3 定时生成精灵3 加载音 ...
随机推荐
- pomelo使用中的常见问题
1.端口被占用, 有进程没杀干净. 用 pomelo kill --force 命令清一下进程.
- 重定向Redirect 的知识
今天下班的时候看到了一些重定向的基础知识,也算开了眼界.以前也经常使用301和302,但从来没有使用过和了解过其他的3XX的状态码,发现原来里面涉及的知识和解决的问题的还不少. 重定向的流程 浏览器首 ...
- Spring Framework 组件注册 之 @Component
Spring Framework 组件注册 之 @Component 写在前面 在spring大行其道的今天,对于spring的使用和掌握乃是不可缺少的必备技能.但是spring的整个体系尤为庞大,对 ...
- Spring Bean的3种装配方式
Bean常用的装配方式有3种: 基于xml的装配 基于Annotation(注解)的装配 基于Java类的装配 基于xml的装配 在xml文件中配置Bean. 如果依赖很多,xml配置文件会很臃肿,后 ...
- vuex分模块后,如何获取state的值
问题:vuex分模块后,一个模块如何拿到其他模块的state值,调其他模块的方法? 思路:1.通过命名空间取值--this.$store.state.car.list // OK 2.通过定义该属性的 ...
- 汇编入门二 一些概念与PC组件
1.内存:想让CPU工作,必须提供指令与数据,而指令和数据存在于内存中. 2.指令和数据:有点抽象,上书(汇编语言 第二版): 3.存储单元:存储器(内存)被划分为多个存储单元,内个存储单元从0开始顺 ...
- css之vw布局
vw,vh是视口单位,是相对视口单位,与百分百布局不一样的是,百分百是相对于父及元素,而vw布局是相对与窗口. 而rem布局是要与js一起配合 // 以iphone6设计稿 @function px2 ...
- memcached--delete--replace--set--get--incr--decr--stats
memcached命令 1.get key 来获取在内存中的值 get name 2.delete key 删除在内存中的值 delete name 3.replace key flag exp ...
- linux命令---grep命令使用
grep 常用参数: -w 精准匹配 -r 递归匹配 -l 列出匹配内容的文件名称-v 排除 结合sed,批量替换文件内容 sed 's#10.151.30.165#10.0.3.162#g' -i ...
- 跟我学SpringCloud | 第十三篇:Spring Cloud Gateway服务化和过滤器
SpringCloud系列教程 | 第十三篇:Spring Cloud Gateway服务化和过滤器 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich. ...