Merge pull request #1818 from omnivore-app/fix/energy-world-newsletter

Preparse the newsletter content
This commit is contained in:
Hongbo Wu
2023-02-17 22:41:20 +08:00
committed by GitHub
4 changed files with 28 additions and 2 deletions

View File

@ -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

View File

@ -466,6 +466,8 @@ export const parseEmailAddress = (from: string): addressparser.EmailAddress => {
export const fetchFavicon = async (
url: string
): Promise<string | undefined> => {
// 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 })

View File

@ -72,6 +72,7 @@ const contentHandlers: ContentHandler[] = [
new BloombergNewsletterHandler(),
new SubstackHandler(),
new StackOverflowHandler(),
new EnergyWorldHandler(),
]
const newsletterHandlers: ContentHandler[] = [

View File

@ -16,4 +16,29 @@ export class EnergyWorldHandler extends ContentHandler {
input.from === 'ETEnergyworld Latest News<newsletter@etenergyworld.com>'
)
}
shouldPreParse(url: string, dom: Document): boolean {
return dom.querySelectorAll('img[src*="etenergyworld.png"]').length > 0
}
async preParse(url: string, dom: Document): Promise<Document> {
// 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)
}
}