#retrieve tweet content with puppeteer
3 messages · Page 1 of 1 (latest)
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()```