diff options
| author | Hakaba Hitoyo <example@example.com> | 2018-10-06 16:03:18 +0900 |
|---|---|---|
| committer | Hakaba Hitoyo <example@example.com> | 2018-10-06 16:03:18 +0900 |
| commit | 7019ddbfc7c2f71a7b76cba03ff141b97e9fdcd4 (patch) | |
| tree | f351f72b3b36202f4ef31cd52ed758925f57de5d /src/server/api/endpoints/users/recommendation.ts | |
| parent | Better japanese (diff) | |
| download | sharkey-7019ddbfc7c2f71a7b76cba03ff141b97e9fdcd4.tar.gz sharkey-7019ddbfc7c2f71a7b76cba03ff141b97e9fdcd4.tar.bz2 sharkey-7019ddbfc7c2f71a7b76cba03ff141b97e9fdcd4.zip | |
external user recommendation
Diffstat (limited to 'src/server/api/endpoints/users/recommendation.ts')
| -rw-r--r-- | src/server/api/endpoints/users/recommendation.ts | 104 |
1 files changed, 70 insertions, 34 deletions
diff --git a/src/server/api/endpoints/users/recommendation.ts b/src/server/api/endpoints/users/recommendation.ts index e0a5cb9e36..b0ad75caae 100644 --- a/src/server/api/endpoints/users/recommendation.ts +++ b/src/server/api/endpoints/users/recommendation.ts @@ -3,6 +3,9 @@ import $ from 'cafy'; import User, { pack, ILocalUser } from '../../../../models/user'; import { getFriendIds } from '../../common/get-friends'; import Mute from '../../../../models/mute'; +import * as request from 'request' +import { ILocalUser } from '../../../../models/user' +import config from '../../../../config' export const meta = { desc: { @@ -15,44 +18,77 @@ export const meta = { }; export default (params: any, me: ILocalUser) => new Promise(async (res, rej) => { - // Get 'limit' parameter - const [limit = 10, limitErr] = $.num.optional.range(1, 100).get(params.limit); - if (limitErr) return rej('invalid limit param'); + var external = config.user_recommendation.external - // Get 'offset' parameter - const [offset = 0, offsetErr] = $.num.optional.min(0).get(params.offset); - if (offsetErr) return rej('invalid offset param'); + if (external) { + var userName = me.username + var hostName = config.hostname + var limit = params.limit + var offset = params.offset + var timeout = config.user_recommendation.timeout + var engine = config.user_recommendation.engine + var url + url = engine + url = url.replace('{{host}}', hostName) + url = url.replace('{{user}}', userName) + url = url.replace('{{limit}}', limit) + url = url.replace('{{offset}}', offset) + request( + { + url: url, + timeout: timeout, + json: true, + followRedirect: true, + followAllRedirects: true + }, + function (error: any, response: any, body: any) { + if (!error && response.statusCode == 200) { + res(body) + } else { + res([]) + } + } + ) + } else { + // Get 'limit' parameter + const [limit = 10, limitErr] = $.num.optional.range(1, 100).get(params.limit); + if (limitErr) return rej('invalid limit param'); - // ID list of the user itself and other users who the user follows - const followingIds = await getFriendIds(me._id); + // Get 'offset' parameter + const [offset = 0, offsetErr] = $.num.optional.min(0).get(params.offset); + if (offsetErr) return rej('invalid offset param'); - // ミュートしているユーザーを取得 - const mutedUserIds = (await Mute.find({ - muterId: me._id - })).map(m => m.muteeId); + // ID list of the user itself and other users who the user follows + const followingIds = await getFriendIds(me._id); - const users = await User - .find({ - _id: { - $nin: followingIds.concat(mutedUserIds) - }, - isLocked: false, - $or: [{ - lastUsedAt: { - $gte: new Date(Date.now() - ms('7days')) - } + // ミュートしているユーザーを取得 + const mutedUserIds = (await Mute.find({ + muterId: me._id + })).map(m => m.muteeId); + + const users = await User + .find({ + _id: { + $nin: followingIds.concat(mutedUserIds) + }, + isLocked: false, + $or: [{ + lastUsedAt: { + $gte: new Date(Date.now() - ms('7days')) + } + }, { + host: null + }] }, { - host: null - }] - }, { - limit: limit, - skip: offset, - sort: { - followersCount: -1 - } - }); + limit: limit, + skip: offset, + sort: { + followersCount: -1 + } + }); - // Serialize - res(await Promise.all(users.map(async user => - await pack(user, me, { detail: true })))); + // Serialize + res(await Promise.all(users.map(async user => + await pack(user, me, { detail: true })))); + } }); |