基于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 加载音 ...
随机推荐
- .Net for Spark 实现 WordCount 应用及调试入坑详解
.Net for Spark 实现WordCount应用及调试入坑详解 1. 概述 iNeuOS云端操作系统现在具备物联网.视图业务建模.机器学习的功能,但是缺少一个计算平台产品.最近在调研使用 ...
- Laravel --- 【转】安装调试利器 Laravel Debugbar
[转]http://www.tuicool.com/articles/qYfmmur 1.简介 Laravel Debugbar 在 Laravel 5 中集成了 PHP Debug Bar ,用于显 ...
- bean 解析、注册、实例化流程源码剖析
本spring源码的版本:4.3.7 Spring bean的加载主要分为以下6步: (1)读取XML配置文件 (2)XML文件解析为document文档 (3)解析bean (4)注册bean (5 ...
- wince kill 进程
http://www.cnblogs.com/fujinliang/archive/2012/09/13/2684165.html 原文地址 http://www.2cto.com/kf/201504 ...
- Python自学day-14
一.默认创建的HTML5文件 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- Storm —— 集群环境搭建
一.集群规划 这里搭建一个3节点的Storm集群:三台主机上均部署Supervisor和LogViewer服务.同时为了保证高可用,除了在hadoop001上部署主Nimbus服务外,还在hadoop ...
- app兼容测试选择哪些机型才够全面呢?
- Java的一些基础知识,现在回顾一下,毕竟学了那么久!
一.基础知识:1.什么是JVM.JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性,java语言是跨平台,jvm不是跨平台的,jv ...
- django基础知识之定义模型:
定义模型 在模型中定义属性,会生成表中的字段 django根据属性的类型确定以下信息: 当前选择的数据库支持字段的类型 渲染管理表单时使用的默认html控件 在管理站点最低限度的验证 django会为 ...
- Oracle数据库---包
--根据员工号或员工姓名获取员工的信息--根据员工号或员工姓名删除员工的信息--创建包规范CREATE OR REPLACE PACKAGE overload_pkgIS FUNCTION get_i ...