From a5ddc9acedf8cb82e3a6ab5a60576285e07c1c7e Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Fri, 23 Jun 2023 16:56:03 +0800 Subject: [PATCH] lowercase username before comparing --- .../src/websites/nitter-handler.ts | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/packages/content-handler/src/websites/nitter-handler.ts b/packages/content-handler/src/websites/nitter-handler.ts index 7ac6b83fa..6f0e1dda5 100644 --- a/packages/content-handler/src/websites/nitter-handler.ts +++ b/packages/content-handler/src/websites/nitter-handler.ts @@ -133,17 +133,20 @@ export class NitterHandler extends ContentHandler { function parseTweet(tweet: Element): Tweet | null { const header = tweet.querySelector('.tweet-header') if (!header) { + console.error('no header found', tweet) return null } const author = authorParser(header) const body = tweet.querySelector('.tweet-body') if (!body) { + console.error('no body found', tweet) return null } const tweetDateElement = body.querySelector('.tweet-date a') if (!tweetDateElement) { + console.error('no tweet date found', tweet) return null } const createdAt = dateParser(tweetDateElement) @@ -151,6 +154,7 @@ export class NitterHandler extends ContentHandler { const content = body.querySelector('.tweet-content') if (!content) { + console.error('no content found', tweet) return null } const text = content.textContent ?? '' @@ -195,7 +199,6 @@ export class NitterHandler extends ContentHandler { console.debug('latency', latency) html = response.data as string - console.debug('html', html) this.instance = instance await this.incrementInstanceScore(redisClient, instance, latency) @@ -215,6 +218,7 @@ export class NitterHandler extends ContentHandler { } } if (!this.instance || !html) { + console.error('no instance or html found') return [] } @@ -223,11 +227,16 @@ export class NitterHandler extends ContentHandler { // get the main thread including tweets and threads const mainThread = document.querySelector('.main-thread') if (!mainThread) { + console.error('no main thread found') return [] } const timelineItems = Array.from( mainThread.querySelectorAll('.timeline-item') ) + if (timelineItems.length === 0) { + console.error('no timeline items found') + return [] + } for (let i = 0; i < timelineItems.length; i++) { const item = timelineItems[i] const classList = item.classList @@ -236,13 +245,14 @@ export class NitterHandler extends ContentHandler { classList.contains('unavailable') || classList.contains('earlier-replies') ) { - console.debug('skip unavailable tweets and earlier replies', item) + console.info('skip unavailable tweets and earlier replies') continue } // if there are more replies, get them if (classList.contains('more-replies')) { const newUrl = item.querySelector('a')?.getAttribute('href') if (!newUrl) { + console.error('new url', newUrl) break } @@ -256,13 +266,14 @@ export class NitterHandler extends ContentHandler { html = response.data as string } catch (error) { - console.info('Error parsing html', error) + console.error('Error getting tweets', error) break } const document = parseHTML(html).document const nextThread = document.querySelector('.main-thread .after-tweet') if (!nextThread) { + console.error('no next thread found') break } @@ -277,7 +288,7 @@ export class NitterHandler extends ContentHandler { const tweet = parseTweet(item) // filter out replies - if (tweet && tweet.author.username === username) { + if (tweet && tweet.author.username.toLowerCase() === username) { tweets.push(tweet) } } @@ -338,7 +349,7 @@ export class NitterHandler extends ContentHandler { )}` const description = _.escape(tweet.text) const imageDomain = - domain === 'twitter.com' + domain.toLowerCase() === 'twitter.com' ? 'https://pbs.twimg.com' : 'https://nitter.net/pic'