40 lines
1.2 KiB
JavaScript
40 lines
1.2 KiB
JavaScript
/* eslint-disable no-undef */
|
|
/* eslint-disable no-empty */
|
|
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
|
/* eslint-disable @typescript-eslint/no-var-requires */
|
|
/* eslint-disable @typescript-eslint/no-require-imports */
|
|
require('dotenv').config();
|
|
const Url = require('url');
|
|
const axios = require('axios');
|
|
const { promisify } = require('util');
|
|
const { DateTime } = require('luxon');
|
|
const os = require('os');
|
|
const jsdom = require("jsdom");
|
|
const { Cipher } = require('crypto');
|
|
const { JSDOM } = jsdom;
|
|
|
|
|
|
|
|
exports.appleNewsHandler = {
|
|
|
|
shouldPrehandle: (url, env) => {
|
|
const u = new URL(url);
|
|
if (u.hostname === 'apple.news') {
|
|
return true;
|
|
}
|
|
return false
|
|
},
|
|
|
|
prehandle: async (url, env) => {
|
|
const MOBILE_USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36'
|
|
const response = await axios.get(url, { headers: { 'User-Agent': MOBILE_USER_AGENT } } );
|
|
const data = response.data;
|
|
|
|
const dom = new JSDOM(data);
|
|
|
|
// make sure its a valid URL by wrapping in new URL
|
|
const u = new URL(dom.window.document.querySelector('span.click-here').parentNode.href);
|
|
return { url: u.href };
|
|
}
|
|
}
|