@sasha_jarvi

Как настроить обновление последних записей через определенное время?

Имеется следующий node.js-код для получения последних четырех постов из instagram и последующей отдачи на фронт:

router.get('/media/latest', async (req, res) => {
    await connect();

    const user = await client.getUserByUsername({ username: 'username' });
    const posts = user.edge_owner_to_timeline_media.edges;
    const latestPosts = posts.slice(0, 4);

    const latestPostsShortcodes = latestPosts.map(post => post.node.shortcode);

    let foundPosts = await InstagramPost.find({ shortcode: latestPostsShortcodes }) as any;
    let foundCodes = foundPosts.map(post => post.shortcode);

    const codesToFetch = latestPostsShortcodes.filter(code => {
        return !foundCodes.includes(code);
    });

    if (codesToFetch) {
        let media = await getInstagramPosts(codesToFetch);
        media.forEach(post => {
            foundPosts.push({
                text: post['edge_media_to_caption']['edges'][0]['node']['text'],
                href: `https://instagram.com/p/${post['shortcode']}`,
                shortcode: post['shortcode'],
                img: post['display_url']
            });
        });
    }

    savePostsToDb(foundPosts);

    res.send({ media: foundPosts });
});


Необходимо реализовать следующий функционал: если прошло больше суток - обновлять посты и отдавать новые посты на фронт. Я предположил, что это можно выполнить следующим путем:

  • вычисляем разницу между текущим моментом времени и временем последнего запроса;
  • если прошел промежуток времени в 24 часа - обновляем посты (то есть проделываем все действия до res.send())

Однако не вполне понятно - как реализовать вышеуказанный алгоритм?
  • Вопрос задан
  • 79 просмотров
Пригласить эксперта
Ответы на вопрос 1
HistoryART
@HistoryART
Молодой и дерзкий
setTimeout(() => {
await connect();

    const user = await client.getUserByUsername({ username: 'username' });
    const posts = user.edge_owner_to_timeline_media.edges;
    const latestPosts = posts.slice(0, 4);

    const latestPostsShortcodes = latestPosts.map(post => post.node.shortcode);

    let foundPosts = await InstagramPost.find({ shortcode: latestPostsShortcodes }) as any;
    let foundCodes = foundPosts.map(post => post.shortcode);

    const codesToFetch = latestPostsShortcodes.filter(code => {
        return !foundCodes.includes(code);
    });

    if (codesToFetch) {
        let media = await getInstagramPosts(codesToFetch);
        media.forEach(post => {
            foundPosts.push({
                text: post['edge_media_to_caption']['edges'][0]['node']['text'],
                href: `https://instagram.com/p/${post['shortcode']}`,
                shortcode: post['shortcode'],
                img: post['display_url']
            });
        });
    }

    savePostsToDb(foundPosts);

    res.send({ media: foundPosts });
}, 1000 * 60 * 60)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы