Save Instapaper likes to PDF
const puppeteer = require('puppeteer')
const express = require('express')
const app = express()
const CREDS = require('./creds')
console.log(`${new Date()} > Started`)
async function genPDF(url) {
// Init
const browser = await puppeteer.launch()
const page = await browser.newPage()
await page.goto('https://www.instapaper.com/user/login')
// Logging start
const USERNAME_SELECTOR = '#username'
const PASSWORD_SELECTOR = '#password'
const BUTTON_SELECTOR = '#log_in'
await page.click(USERNAME_SELECTOR)
await page.type(CREDS.username_instapaper)
await page.click(PASSWORD_SELECTOR)
await page.type(CREDS.password_instapaper)
await page.click(BUTTON_SELECTOR)
console.log(`${new Date()} > Logging in`)
await page.waitForNavigation()
console.log(`${new Date()} > Landed at home, Navigating to article page`)
// Goto article page
await page.goto(url)
console.log(`${new Date()} > Landed at article page, generating PDF`)
const articleTitleRaw = await page.$eval('main div#titlebar h1', el => el.innerHTML)
const articleTitle = articleTitleRaw.replace(/[`~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi, '')
// Generate PDF
await page.pdf({path: `pdf/${articleTitle}.pdf`, format: 'A5'})
console.log(`${new Date()} > Export PDF completed as name ${articleTitle}.pdf at pdf directory`)
browser.close()
}
app.post('/genpdf', function(req, res) {
let instaArticleUrl = `https://www.instapaper.com/text?u=${req.query.url}`
if (req.query.token == 'mytoken') {
console.log('genpdf function called')
genPDF(instaArticleUrl)
res.send('Node Version: ' + process.version)
} else {
console.log('invilid token')
res.send('Node Version: ' + process.version)
}
})
app.listen(1337)
// http://localhost:1337/genpdf?token=mytoken&url=https://www.reuters.com/article/us-hsbc-ceo/hsbc-picks-retail-head-john-flint-as-next-ceo-newspaper-idUSKBN1CD0BI
module.exports = {
username_instapaper: 'MyInstapaperID',
password_instapaper: 'MyPasswordOfInstapaper',
}