基于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 加载音 ...
随机推荐
- Spring特点
1.非侵入式所谓非侵入式是指,Spring框架的API不会在业务逻辑上出现,即业务逻辑是POJO(Plain Old Java Objects).由于业务逻辑中没有Spring的API,所以业务逻辑可 ...
- webpack打包(一)
1.安装webpack打包工具 webpack是使用npm安装 npm install webpack -g //全局安装 在命令行中就可以使用webpack这个命令了. 提示:由于npm安装会去找国 ...
- 苹果二代TWS无线耳机AirPods调研
产品介绍 苹果AirPods二代自从2018年9月份上市以来,到现在将近一年的时间了,据江湖传闻,苹果AirPods的总售卖个数,已经超过了5000W部,这样价格的TWS耳机,能够卖那么多的量,估计也 ...
- python3下re模块的使用
**explain:**python3中的re库是一个正则匹配的函数库,里面包含了各种功能的正则函数,下面,我们一起学习下其中的几个常用函数 * **match()方法**: 从主串的起始位置开始匹配 ...
- Effective Java - 静态方法与构造器
目录 用静态工厂方法替代构造器? 静态工厂有名称 静态工厂不必重新创建一个对象 静态工厂可以返回任何子类型对象 静态工厂返回的类可以动态变化 静态工厂返回的类可以不存在 静态工厂方法的缺点 静态工厂方 ...
- 关于svn服务部署方案
本文只记录我的笔记 首先, 我是个懒人, 写好了shell, 直接上传把 安装包:SvnPackages-chenglee 第一, 无非就是搞掂依赖这一块 #********************* ...
- 大数据虚拟混算平台Moonbox配置指南
一.环境准备 已安装Apache Spark 2.2.0(此版本仅支持Apache Spark 2.2.0, 其他Spark 版本后续会兼容) 已安装MySQL并启动,且开启远程访问 各安装节点已经配 ...
- Ural 2062:Ambitious Experiment(树状数组 || 分块)
http://acm.timus.ru/problem.aspx?space=1&num=2062 题意:有n个数,有一个值,q个询问,有单点询问操作,也有对于区间[l,r]的每个数i,使得n ...
- 线性表的顺序存储C++代码实现
关于线性表的概念,等相关描述请参看<大话数据结构>第三章的内容, 1 概念 线性表list:零个或多个数据的有限序列. 可以这么理解:糖葫芦都吃过吧,它就相当于一个线性表,每个 ...
- Python 的8个关键要素
1.数据类型 2.对象引用 3.组合数据类型 4.逻辑操作符 5.控制流语句 6.算术操作符 7.输入/输出 8.函数的创建与调用