const nodemailer = require("nodemailer"); const { Pool } = require('pg'); var parse = require('pg-connection-string').parse; var config = parse(process.env.DATABASE_URL); const pool = new Pool(config); // ***** update daily top 3 news const updateEmailNews = async (req, res) => { try { const catList = ["science", "india", 'business', "sports", "entertainment", "technology", "world"]; catList.forEach(async (cat) => { const data = await getTopNews(cat); data.forEach(async (d) => { const summary = await getSummary(d.article_url); //set news in database try { const query = ` update top_news set title = $1, article_url = $2, source = $3, summary = $4, published_date = $5 where category = '${cat}_${data.indexOf(d) + 1}' ; `; const values = [ d.title, d.article_url, d.source_name, summary, d.published_date ]; await pool.query(query, values); } catch (er) { console.log(er); } }); }); res.send({ "status": "running" }); } catch (e) { console.log(e); } } async function getTopNews(category) { const query = ` select title, article_url, category, source_name, published_date from news where category like '%${category}%' order by published_date desc limit 3; `; const data = await pool.query(query); return data.rows; } async function getSummary(url) { //console.log(url) const apiUrl = 'https://yashxx07-summarize-articles.hf.space/summarize-v1'; const options = { method: 'POST', headers: { 'content-type': 'application/json', }, body: JSON.stringify({ "url": url, "max_tokens": 500 }) }; try { const response = await fetch(apiUrl, options); const result = await response.text(); //console.log(result); return result; } catch (error) { console.error(error); } } // const transporter = nodemailer.createTransport({ // host: 'smtp.mailchimp.com', // port: 587, // Mailchimp SMTP port // secure: false, // true for 465, false for other ports // auth: { // user: 'your_mailchimp_username', // pass: 'your_mailchimp_password' // } // }); const transporter = nodemailer.createTransport({ host: "smtp.elasticemail.com", port: 2525, auth: { user: process.env.ID, pass: process.env.PASS, }, }); async function sendToUser(email, mailContent) { try { await transporter.sendMail({ from: { name: "RapidRecap", address: process.env.EMAIL }, to: email, subject: "Today's Top News", html: mailContent }); return "Email sent successfully!"; } catch (error) { console.error(error); } } async function getEmailsList(time) { try { const query = ` select * from subs where time = '${time}';`; const data = await pool.query(query); return data.rows; } catch (e) { console.log(e); } } async function getAllNews() { try { const query = ` select * from top_news; `; const data = await pool.query(query); return data.rows; } catch (e) { console.log(e); } } function craftEmailTemplate(user, newsList) { const filteredNews = newsList.filter(item => user.category.includes(item.category.slice(0, -2)) && item.summary != `""`); shuffleArray(filteredNews); // Construct the mail content const mailContent = filteredNews.slice(0, 3).map(doc => `
Source: ${doc.source}
Published On: ${convertToDateString(doc.published_date)}
${doc.summary.slice(2, -1)}