diff --git a/lib/routes/instagram/index.js b/lib/routes/instagram/index.js index e2f6d5fc4..4aafe4a71 100644 --- a/lib/routes/instagram/index.js +++ b/lib/routes/instagram/index.js @@ -9,7 +9,7 @@ module.exports = async (ctx) => { // "discover", "pendingFriendships", "blockedUsers", "directInbox", "directPending", // "directThread", "user", "tag", "location", "mediaComments", "reelsMedia", "reelsTray", // "timeline", "musicTrending", "musicSearch", "musicGenre", "musicMood", "usertags", "saved"]; - const availableCategories = ['user']; + const availableCategories = ['user', 'tag']; const category = ctx.params.category; if (!availableCategories.includes(category)) { throw Error('Such feed is not supported.'); @@ -30,25 +30,48 @@ module.exports = async (ctx) => { const key = ctx.params.key; // TODO: extend to other feed categories - const usernameOrId = key; - let userInfo, username, id; - if (!isNaN(usernameOrId)) { - id = usernameOrId; - userInfo = await ig.user.info(id); - username = userInfo.username; - } else { - username = usernameOrId; - id = await ig.user.getIdByUsername(username); - userInfo = await ig.user.info(id); + const nameOrId = key; + let title, link, description, logo; + let itemsRaw; + + switch (category) { + case 'user': { + let userInfo, username, id; + if (!isNaN(nameOrId)) { + id = nameOrId; + userInfo = await ig.user.info(id); + username = userInfo.username; + } else { + username = nameOrId; + id = await ig.user.getIdByUsername(username); + userInfo = await ig.user.info(id); + } + + description = userInfo.biography; + logo = userInfo.hd_profile_pic_url_info.url; + const fullName = userInfo.full_name; + title = `${fullName} (@${username}) - Instagram`; + link = path.join('https://www.instagram.com', username); + + itemsRaw = await ig.feed.user(id).items(); + break; + } + case 'tag': { + const tag = nameOrId; + + title = `#${tag}) - Instagram`; + link = path.join('https://www.instagram.com', 'explore', 'tags', tag); + + itemsRaw = await (await ig.feed.tags(tag).items()).slice(1); // the 0 item is undefined for unknown reason + break; + } + default: { + break; + } } - const description = userInfo.biography; - const logo = userInfo.hd_profile_pic_url_info.url; - const fullName = userInfo.full_name; - - const itemsPromise = await ig.feed.user(id).items(); const items = await Promise.all( - itemsPromise.map(async (item) => { + itemsRaw.map(async (item) => { // Content const summary = item.caption ? item.caption.text : ''; const $ = cheerio.load(`
${summary}
`); @@ -81,9 +104,9 @@ module.exports = async (ctx) => { ); ctx.state.data = { - title: `${fullName} (@${username}) - Instagram`, - link: path.join('https://www.instagram.com', username), - description: description, + title, + link, + description, item: items, icon: 'https://www.instagram.com/static/images/ico/xxhdpi_launcher.png/99cf3909d459.png', logo,