#retrieve tweet content with puppeteer

3 messages · Page 1 of 1 (latest)

tulip umbraBOT
  • Consider reading #how-to-get-help to improve your question!
  • Explain what exactly your issue is.
  • Post the full error stack trace, not just the top part!
  • Show your code!
  • Issue solved? Press the button!
  • Marked as resolved by OP
rocky hornet

I use this code :

const puppeteer = require('puppeteer');
const CHANNEL_ID = '1101830419072172105';

const browser = await puppeteer.launch({ headless: true });
const page = await browser.newPage();

const twitterURL = 'https://twitter.com/RockstarGames';
await page.goto(twitterURL, { waitUntil: 'networkidle2' });

await page.waitForSelector('article', { visible: true });
await page.waitForTimeout(5000);

const tweetData = await page.evaluate(() => {
  const tweetElements = Array.from(document.querySelectorAll('article'));
  let tweetContent = '';
  let imageUrl = '';
  let profileImageUrl = '';
  let tweetDate = '';


  const targetTweet = tweetElements.slice(1).find(tweet => {
    const pinnedBadge = tweet.querySelector('[aria-label="Pinned"]') || tweet.querySelector('[data-testid="pin"]');
    if (!pinnedBadge) {
      const contentElement = tweet.querySelector('div[lang]');
      const mediaContainer = tweet.querySelector('div[role="group"]') || tweet.querySelector('figure');
      const imageElement = mediaContainer ? mediaContainer.querySelector('img[alt], img[src]') : null;
      const profileImageElement = tweet.querySelector('img[srcset], img[src]'); // Image de profil de Rockstar Games
      const dateElement = tweet.querySelector('time'); // L'élément qui contient la date de publication

      if (contentElement) {
        tweetContent = contentElement.innerText.trim();
      }

      if (imageElement) {
        imageUrl = imageElement.src || imageElement.srcset;
      }

      if (profileImageElement) {
        profileImageUrl = profileImageElement.src || profileImageElement.srcset;
      }

      if (dateElement) {
        const date = new Date(dateElement.getAttribute('datetime'));
        tweetDate = date.toLocaleDateString('fr-FR'); 
      }
      
      return true;
    }
    return false;
  });

  return { tweetContent, imageUrl, profileImageUrl, tweetDate };
});

const channel = client.channels.cache.get(CHANNEL_ID);
if (!channel) {
  message.channel.send('Le salon n\'existe pas !')
}
  const embed = new EmbedBuilder()
    .setColor('#3a99ee')
    .setDescription(tweetData.tweetContent || 'Aucun contenu trouvé.')
    .setImage(tweetData.imageUrl) 
    .setAuthor({ name: 'Rockstar Games sur 𝕏', iconURL: tweetData.profileImageUrl })
    .setFooter({ text: `Publié le ${tweetData.tweetDate || new Date().toLocaleDateString('fr-FR')}` });

  channel.send({ embeds: [embed] })

await browser.close()```