zhangtai
10/9/2017 - 5:24 AM

Save Instapaper likes to PDF

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',
}