Skip to content

Instantly share code, notes, and snippets.

@VladSez
Last active February 6, 2025 10:23
Show Gist options
  • Save VladSez/808089ac17b8bf02238ee00b2142a7d9 to your computer and use it in GitHub Desktop.
Save VladSez/808089ac17b8bf02238ee00b2142a7d9 to your computer and use it in GitHub Desktop.
parse twitter
// go to x.com and copy paste below code to console
// use https://react-tweet.vercel.app/ to render tweets in your app using tweet id
function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
function extractItems() {
const tweets = document.querySelectorAll('[data-testid="tweet"]');
const items = [];
for (let tweet of tweets) {
const text = tweet.querySelector('[data-testid="tweet"] div[lang]')
?.innerText;
const link = tweet.querySelector('[data-testid="tweet"] a[aria-label]')
?.href;
// This version limits the ID to 1-19 digits (Twitter's status IDs are currently 19 digits).
const tweetId = link.match(/\/status\/([0-9]{1,19})/)?.[1];
const img = tweet.querySelector('[data-testid="tweetPhoto"] img')?.src;
const createdAt = tweet.querySelector('[data-testid="tweet"] time')
?.dateTime;
const avatar = tweet.querySelector('[data-testid="tweet"] a div img')?.src;
const userName = tweet.querySelector('[data-testid="tweet"] [dir=ltr]')
?.innerText;
const replies = tweet.querySelector('[data-testid="reply"]')?.innerText;
const likes = tweet.querySelector('[data-testid*="like"]')?.innerText;
const retweets = tweet.querySelector('[data-testid="retweet"]')?.innerText;
items.push({
tweetId,
userName,
avatar,
text,
link,
img,
createdAt,
replies,
likes,
retweets,
});
}
return items;
}
let items = []
for(let i=0; i<5; i++){
const newItems = extractItems()
items = [...items, ...newItems];
window.scrollBy(0, 3000)
await delay(1500)
}
console.log({items})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment