基于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 加载音 ...
随机推荐
- 优秀的Restful API应该是什么样的
1 你一直在错误的使用http协议 现在微服务真是火的一塌糊涂!大街小巷,逢人必谈微服务,各路大神纷纷忙着把自家的单体服务拆解成多个Web微小服务!而作为微服务之间通信的桥梁,Web API的设计就显 ...
- 推荐三个学习git的网站或教程
廖雪峰官方教程:https://www.liaoxuefeng.com/wiki/896043488029600/900388704535136 ProGit中文版:https://git-scm.c ...
- Android前沿技术
一.热升级Tinker源码解析与手写二.热修复阿里百川Sophix内核原理三.App Instantgoogle8.0 类似热更新技术原理与实战四.强制更新1.银行应用非对称加密对称加密五.组件化框架 ...
- 【java自定义注解1】java自定义注解-属性
关于自定义注解,以前项目种应用的不多,最近看新项目过程中发现了挺多自定义注解相关内容,使用起来比较巧妙,于是 总结了两种方式,记录如下: 第一种:结合反射进行属性注入,代码如下: 1.定义一个注解: ...
- git的基本指令
更多详情请看廖雪峰官方网站 http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 1.删 ...
- Docker安装nacos1.0.0固定ip单机模式
1 从dockerHub拉取镜像到本地 docker pull nacos/nacos-server:1.0.0 2 创建目录(宿主机) 2.1 日志目录 mkdir -p /docker/nacos ...
- C# 异步转同步 TaskCompletionSource
本文通过TaskCompletionSource,实现异步转同步 首先有一个异步方法,如下异步任务延时2秒后,返回一个结果 private static async Task<string> ...
- ElasticSearch 常用 curl 命令
1. 集群支持的选项 curl -XGET 'http://10.240.0.8:9200/_cat'  2. 查看节点信息 curl -XGET 'http://10.240.0.8:9200/_ ...
- eclipse中一个项目引用另一个项目,运行报:java.lang.NoClassDefFoundError
项目右击-properties-Java Build Path -Porjects-add.选中了某个项目. 项目用tomcat启动时,报错:java.lang.NoClassDefFoundErro ...
- django基础知识之自连接:
自连接 对于地区信息,属于一对多关系,使用一张表,存储所有的信息 类似的表结构还应用于分类信息,可以实现无限级分类 新建模型AreaInfo,生成迁移 class AreaInfo(models.Mo ...