UNPKG

co-weibo-api

Version:
81 lines (68 loc) 1.82 kB
'use strict'; // 本文件用于weibo API,基础文件,主要用于Token的处理和mixin机制 var urllib = require('urllib'); /** * 构造函数 * @param {String} accessToken 用户通过Oauth获得的access_token */ var API = function (accessToken) { if (!(this instanceof API)) { return new API(accessToken); } this.access_token = accessToken; this.prefix = 'https://api.weibo.com/2/'; this.oauthPrefix = 'https://api.weibo.com/oauth2/'; this.defaults = {}; }; /** * 用于设置urllib的默认options * * Examples: * ``` * api.setOpts({timeout: 15000}); * ``` * @param {Object} opts 默认选项 */ API.prototype.setOpts = function (opts) { this.defaults = opts; }; /** * 设置urllib的hook * * @param {String} url url * @param {Object} options options */ API.prototype.request = function* (url,options) { options = options || {}; options.dataType = 'json'; options.data = options.data || {}; options.data.access_token = this.access_token; var results = yield urllib.request(url,options); if (results.data && results.data.error_code) { var data = results.data; let err = new Error(data.err); err.name = 'WeiboAPIError'; err.code = data.error_code; err.request = data.request; throw err; } return results.data; }; /** * 用于支持对象合并。将对象合并到API.prototype上,使得能够支持扩展 * Examples: * ``` * // 媒体管理(上传、下载) * API.mixin(require('./lib/api_favorite')); * ``` * @param {Object} obj 要合并的对象 */ API.mixin = function (obj) { for (var key in obj) { if (API.prototype.hasOwnProperty(key)) { throw new Error('Don\'t allow override existed prototype method. method: '+ key); } API.prototype[key] = obj[key]; } }; module.exports = API;