diff --git a/packages/api/src/routers/svc/newsletters.ts b/packages/api/src/routers/svc/newsletters.ts index 48fee62a4..d8e81f639 100644 --- a/packages/api/src/routers/svc/newsletters.ts +++ b/packages/api/src/routers/svc/newsletters.ts @@ -73,8 +73,6 @@ export function newsletterServiceRouter() { console.log('create') const { message, expired } = readPushSubscription(req) - console.log('pubsub message:', message, 'expired:', expired) - if (!message) { res.status(400).send('Bad Request') return diff --git a/packages/api/src/utils/parser.ts b/packages/api/src/utils/parser.ts index 7fe72ebfd..e940e98d3 100644 --- a/packages/api/src/utils/parser.ts +++ b/packages/api/src/utils/parser.ts @@ -466,6 +466,8 @@ export const parseEmailAddress = (from: string): addressparser.EmailAddress => { export const fetchFavicon = async ( url: string ): Promise => { + // don't fetch favicon for fake urls + if (url.startsWith(FAKE_URL_PREFIX)) return undefined try { // get the correct url if it's a redirect const response = await axios.head(url, { timeout: 5000 }) diff --git a/packages/content-handler/src/index.ts b/packages/content-handler/src/index.ts index 230a3dd12..4e61552ca 100644 --- a/packages/content-handler/src/index.ts +++ b/packages/content-handler/src/index.ts @@ -72,6 +72,7 @@ const contentHandlers: ContentHandler[] = [ new BloombergNewsletterHandler(), new SubstackHandler(), new StackOverflowHandler(), + new EnergyWorldHandler(), ] const newsletterHandlers: ContentHandler[] = [ diff --git a/packages/content-handler/src/newsletters/energy-world.ts b/packages/content-handler/src/newsletters/energy-world.ts index d66f487a6..2055b9fd6 100644 --- a/packages/content-handler/src/newsletters/energy-world.ts +++ b/packages/content-handler/src/newsletters/energy-world.ts @@ -16,4 +16,29 @@ export class EnergyWorldHandler extends ContentHandler { input.from === 'ETEnergyworld Latest News' ) } + + shouldPreParse(url: string, dom: Document): boolean { + return dom.querySelectorAll('img[src*="etenergyworld.png"]').length > 0 + } + + async preParse(url: string, dom: Document): Promise { + // get the main content + const main = dom.querySelector('table[class="nletter-wrap"]') + if (!main) { + return Promise.resolve(dom) + } + + // create a new dom + const newDom = dom.createDocumentFragment() + + // add the content to the new dom + main.querySelectorAll('table[class="multi-cols"] tr').forEach((tr) => { + const p = dom.createElement('p') + p.innerHTML = tr.innerHTML + newDom.appendChild(p) + }) + dom.body.replaceChildren(newDom) + + return Promise.resolve(dom) + } }