Last active
February 6, 2025 10:23
-
-
Save VladSez/808089ac17b8bf02238ee00b2142a7d9 to your computer and use it in GitHub Desktop.
parse twitter
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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