refacto functions of utils in split concerns, add wips to recommend people
This commit is contained in:
parent
5f7231ca68
commit
db339d4f52
3
.gitignore
vendored
3
.gitignore
vendored
@ -3,7 +3,8 @@
|
|||||||
.yarn
|
.yarn
|
||||||
node_modules
|
node_modules
|
||||||
mastodon_multi_accounts.db
|
mastodon_multi_accounts.db
|
||||||
#assets/documents/*.json
|
assets/documents/abonnements_tykayn.json
|
||||||
|
assets/documents/following_accounts.csv
|
||||||
#assets/documents/*.rss
|
#assets/documents/*.rss
|
||||||
#assets/documents/*.html
|
#assets/documents/*.html
|
||||||
assets/pictures/meme/not_published/*
|
assets/pictures/meme/not_published/*
|
||||||
|
@ -3,7 +3,7 @@ import sendPostMastodon, {
|
|||||||
getArticlesFromDaysInRssFeed,
|
getArticlesFromDaysInRssFeed,
|
||||||
makeTitleContentFromRss,
|
makeTitleContentFromRss,
|
||||||
parseRssFeed,
|
parseRssFeed,
|
||||||
} from "./utils.mjs";
|
} from "./libs/utils.mjs";
|
||||||
|
|
||||||
const afis_rss_feed_url = 'https://afis.org/rss.xml';
|
const afis_rss_feed_url = 'https://afis.org/rss.xml';
|
||||||
const days_back_in_rss_feed = 7;
|
const days_back_in_rss_feed = 7;
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
|
|
||||||
import sendPostMastodon from "./utils.mjs";
|
import sendPostMastodon from "./libs/utils.mjs";
|
||||||
import * as coming_events_json from './../assets/documents/agendadulibre_coming_openstreetmap.json' assert { type: "json" };
|
import * as coming_events_json from './../assets/documents/agendadulibre_coming_openstreetmap.json' assert { type: "json" };
|
||||||
import {getArticlesFromDaysInJson} from "./utils.mjs";
|
|
||||||
|
import {getArticlesFromDaysInJson} from './libs/rss_management.mjs'
|
||||||
|
|
||||||
const days_filter = 7;
|
const days_filter = 7;
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ import sendPostMastodon, {
|
|||||||
findFirstImageInContent,
|
findFirstImageInContent,
|
||||||
findPictureAndSendPost,
|
findPictureAndSendPost,
|
||||||
getRandomElementOfArray
|
getRandomElementOfArray
|
||||||
} from './utils.mjs'
|
} from './libs/utils.mjs'
|
||||||
|
|
||||||
const __dirname = path.resolve();
|
const __dirname = path.resolve();
|
||||||
const tkpostsjson = JSON.parse(fs.readFileSync(__dirname + "/assets/documents/cipherbliss_tkwp_posts.json", 'utf-8'))
|
const tkpostsjson = JSON.parse(fs.readFileSync(__dirname + "/assets/documents/cipherbliss_tkwp_posts.json", 'utf-8'))
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
import * as coming_events_json from './../assets/documents/idf_agendadulibre_coming.json' assert { type: "json" } ;
|
import * as coming_events_json from './../assets/documents/idf_agendadulibre_coming.json' assert { type: "json" } ;
|
||||||
import sendPostMastodon, {getArticlesFromDaysInJson, filterRegionAgendaDuLibreEvents, groupEventsByDay} from "./utils.mjs";
|
import sendPostMastodon, { filterRegionAgendaDuLibreEvents, groupEventsByDay} from "./libs/utils.mjs";
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
import {diffDaysBetweenTwoDates} from "./utils.mjs";
|
|
||||||
|
import {getArticlesFromDaysInJson,diffDaysBetweenTwoDates} from './libs/rss_management.mjs'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import {createMastoFetcherWithAuthorLogin} from "./utils.mjs";
|
import {createMastoFetcherWithAuthorLogin} from "./libs/utils.mjs";
|
||||||
import moment from 'moment'
|
import moment from 'moment'
|
||||||
|
|
||||||
moment.locale('fr')
|
moment.locale('fr')
|
||||||
@ -19,6 +19,7 @@ console.log('get mentions on all accounts managed')
|
|||||||
|
|
||||||
export async function getMentionsOfAccount(accountToFetch) {
|
export async function getMentionsOfAccount(accountToFetch) {
|
||||||
|
|
||||||
|
console.log('\n fetching account: ', accountToFetch)
|
||||||
const masto = createMastoFetcherWithAuthorLogin(accountToFetch)
|
const masto = createMastoFetcherWithAuthorLogin(accountToFetch)
|
||||||
let results = {}
|
let results = {}
|
||||||
|
|
||||||
@ -54,8 +55,9 @@ export async function getMentionsOfAccount(accountToFetch) {
|
|||||||
|
|
||||||
const accounts = [
|
const accounts = [
|
||||||
'qzine',
|
'qzine',
|
||||||
// 'tykayn',
|
'tykayn',
|
||||||
// 'curator',
|
'curator',
|
||||||
|
'kurator',
|
||||||
// 'modominem',
|
// 'modominem',
|
||||||
'voixdunucleaire',
|
'voixdunucleaire',
|
||||||
// 'voicesofnuclear',
|
// 'voicesofnuclear',
|
||||||
|
0
helpers/libs/mastodon_wrappers.mjs
Normal file
0
helpers/libs/mastodon_wrappers.mjs
Normal file
84
helpers/libs/rss_management.mjs
Normal file
84
helpers/libs/rss_management.mjs
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
|
||||||
|
import Parser from 'rss-parser';
|
||||||
|
import {diffDaysBetweenTwoDates} from "./utils";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fetch and return a parsed rss feed
|
||||||
|
* @param url
|
||||||
|
* @returns {Promise<*>}
|
||||||
|
*/
|
||||||
|
export async function parseRssFeed(url){
|
||||||
|
let parsedFeed = await parser.parseURL(url);
|
||||||
|
|
||||||
|
console.log(parsedFeed.title);
|
||||||
|
|
||||||
|
parsedFeed.items.forEach((item) => {
|
||||||
|
console.log(item.title);
|
||||||
|
});
|
||||||
|
return parsedFeed
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get a subset of rss parsed items
|
||||||
|
* @param parsedRssFeed
|
||||||
|
* @param days
|
||||||
|
* @returns {T[]}
|
||||||
|
*/
|
||||||
|
export function getArticlesFromDaysInRssFeed(parsedRssFeed , days=7) {
|
||||||
|
|
||||||
|
// return parsedRssFeed.items.splice(0,days);
|
||||||
|
return parsedRssFeed.items.splice(0,6);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export function makeTitleContentFromRss(parsedFeed) {
|
||||||
|
|
||||||
|
let content = ''
|
||||||
|
let counter = 0;
|
||||||
|
if (!parsedFeed.length) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
parsedFeed.forEach((item) => {
|
||||||
|
// if (!counter) {
|
||||||
|
// console.log('first item', item)
|
||||||
|
// }
|
||||||
|
let cleanedTitle= item.title.replace('[','').trim()
|
||||||
|
cleanedTitle= cleanedTitle.replace(']','').trim()
|
||||||
|
content += `\n* [${cleanedTitle}](${item.link}) `;
|
||||||
|
content += `\n ${item.isoDate.substring(0,10)} : ${item.contentSnippet.split('\n')[0]} \n`;
|
||||||
|
counter++;
|
||||||
|
});
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get a subset of articles in a specified range number of days in the past
|
||||||
|
* @param json_content
|
||||||
|
* @param nbOfDays
|
||||||
|
* @returns {[]}
|
||||||
|
*/
|
||||||
|
export function getArticlesFromDaysInJson(json_content,nbOfDays){
|
||||||
|
|
||||||
|
let today = new Date()
|
||||||
|
let selectedEvents = [];
|
||||||
|
|
||||||
|
console.log('getArticlesFromDaysInJson: filtre nbOfDays', nbOfDays)
|
||||||
|
console.log('events ', json_content.length)
|
||||||
|
json_content.forEach((item) => {
|
||||||
|
|
||||||
|
let differenceDays = diffDaysBetweenTwoDates(new Date(item.start_time) ,today);
|
||||||
|
|
||||||
|
if( differenceDays < nbOfDays){
|
||||||
|
console.log('on garde', differenceDays,item.city, item.title)
|
||||||
|
selectedEvents.push(item)
|
||||||
|
}
|
||||||
|
// else{
|
||||||
|
// console.log('on ne garde pas', differenceDays,item.city, item.title)
|
||||||
|
// }
|
||||||
|
})
|
||||||
|
|
||||||
|
return selectedEvents
|
||||||
|
}
|
||||||
|
|
@ -5,6 +5,7 @@ import fs from 'fs';
|
|||||||
import https from 'https';
|
import https from 'https';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
let local_node_env_conf = dotenv.config()
|
let local_node_env_conf = dotenv.config()
|
||||||
const myArgs = process.argv.slice(2);
|
const myArgs = process.argv.slice(2);
|
||||||
export const reallySendPost = hasCliArgument('--force');
|
export const reallySendPost = hasCliArgument('--force');
|
||||||
@ -26,7 +27,7 @@ export let defaultConfigMasto = {
|
|||||||
visibility: 'public',
|
visibility: 'public',
|
||||||
language: 'fr',
|
language: 'fr',
|
||||||
sensitive: false,
|
sensitive: false,
|
||||||
disable_slugify:false,
|
disable_slugify: false,
|
||||||
reallySendPost,
|
reallySendPost,
|
||||||
image: '',
|
image: '',
|
||||||
folder_image: process.cwd() + '/assets/blog_posts_medias/',
|
folder_image: process.cwd() + '/assets/blog_posts_medias/',
|
||||||
@ -36,7 +37,7 @@ export let defaultConfigMasto = {
|
|||||||
content_type: "text/markdown",
|
content_type: "text/markdown",
|
||||||
website: 'qzine',
|
website: 'qzine',
|
||||||
slug: 'default_post_title',
|
slug: 'default_post_title',
|
||||||
postObject : {},
|
postObject: {},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -49,7 +50,7 @@ export function tokenForAuthorIsPresentInDotEnv(author) {
|
|||||||
* @param userNickName
|
* @param userNickName
|
||||||
* @returns {Mastodon}
|
* @returns {Mastodon}
|
||||||
*/
|
*/
|
||||||
export function createMastoFetcherWithAuthorLogin(userNickName){
|
export function createMastoFetcherWithAuthorLogin(userNickName) {
|
||||||
let accessToken = process.env['TOKEN_' + userNickName.toUpperCase()]
|
let accessToken = process.env['TOKEN_' + userNickName.toUpperCase()]
|
||||||
const masto = new Masto({
|
const masto = new Masto({
|
||||||
access_token: accessToken,
|
access_token: accessToken,
|
||||||
@ -57,6 +58,7 @@ export function createMastoFetcherWithAuthorLogin(userNickName){
|
|||||||
});
|
});
|
||||||
return masto;
|
return masto;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* send post to mastodon with config
|
* send post to mastodon with config
|
||||||
* @param config
|
* @param config
|
||||||
@ -132,9 +134,9 @@ export default function sendPostMastodon(config) {
|
|||||||
else if (config.image) {
|
else if (config.image) {
|
||||||
|
|
||||||
var id;
|
var id;
|
||||||
console.log("envoi du média", config.folder_image +config.image)
|
console.log("envoi du média", config.folder_image + config.image)
|
||||||
// upload new media
|
// upload new media
|
||||||
return masto.post('media', {file: fs.createReadStream(config.folder_image +config.image)})
|
return masto.post('media', {file: fs.createReadStream(config.folder_image + config.image)})
|
||||||
.then(resp => {
|
.then(resp => {
|
||||||
id = resp.data.id;
|
id = resp.data.id;
|
||||||
params.media_ids = [id]
|
params.media_ids = [id]
|
||||||
@ -160,8 +162,7 @@ export default function sendPostMastodon(config) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Slugify a string
|
// Slugify a string
|
||||||
export function slugify(str)
|
export function slugify(str) {
|
||||||
{
|
|
||||||
str = str.replace(/^\s+|\s+$/g, '');
|
str = str.replace(/^\s+|\s+$/g, '');
|
||||||
|
|
||||||
// Make the string lowercase
|
// Make the string lowercase
|
||||||
@ -170,7 +171,7 @@ export function slugify(str)
|
|||||||
// Remove accents, swap ñ for n, etc
|
// Remove accents, swap ñ for n, etc
|
||||||
var from = "ÁÄÂÀÃÅČÇĆĎÉĚËÈÊẼĔȆÍÌÎÏŇÑÓÖÒÔÕØŘŔŠŤÚŮÜÙÛÝŸŽáäâàãåčçćďéěëèêẽĕȇíìîïňñóöòôõøðřŕšťúůüùûýÿžþÞĐđßÆa·/_,:;";
|
var from = "ÁÄÂÀÃÅČÇĆĎÉĚËÈÊẼĔȆÍÌÎÏŇÑÓÖÒÔÕØŘŔŠŤÚŮÜÙÛÝŸŽáäâàãåčçćďéěëèêẽĕȇíìîïňñóöòôõøðřŕšťúůüùûýÿžþÞĐđßÆa·/_,:;";
|
||||||
var to = "AAAAAACCCDEEEEEEEEIIIINNOOOOOORRSTUUUUUYYZaaaaaacccdeeeeeeeeiiiinnooooooorrstuuuuuyyzbBDdBAa------";
|
var to = "AAAAAACCCDEEEEEEEEIIIINNOOOOOORRSTUUUUUYYZaaaaaacccdeeeeeeeeiiiinnooooooorrstuuuuuyyzbBDdBAa------";
|
||||||
for (var i=0, l=from.length ; i<l ; i++) {
|
for (var i = 0, l = from.length; i < l; i++) {
|
||||||
str = str.replace(new RegExp(from.charAt(i), 'g'), to.charAt(i));
|
str = str.replace(new RegExp(from.charAt(i), 'g'), to.charAt(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -219,20 +220,20 @@ export function initializeFolderForPictures(folderName) {
|
|||||||
* @param htmlContent
|
* @param htmlContent
|
||||||
* @returns {string}
|
* @returns {string}
|
||||||
*/
|
*/
|
||||||
export function findFirstImageInContent(htmlContent='') {
|
export function findFirstImageInContent(htmlContent = '') {
|
||||||
let result = ''
|
let result = ''
|
||||||
let foundPictures = htmlContent.match(/<img\s[^>]*?src\s*=\s*['\"]([^'\"]*?)['\"][^>]*?>/);
|
let foundPictures = htmlContent.match(/<img\s[^>]*?src\s*=\s*['\"]([^'\"]*?)['\"][^>]*?>/);
|
||||||
let first = '';
|
let first = '';
|
||||||
if(foundPictures && foundPictures[0]){
|
if (foundPictures && foundPictures[0]) {
|
||||||
|
|
||||||
first = foundPictures[0]
|
first = foundPictures[0]
|
||||||
|
|
||||||
}else{
|
} else {
|
||||||
console.log('pas d image trouvée dans le contenu ', htmlContent)
|
console.log('pas d image trouvée dans le contenu ', htmlContent)
|
||||||
}
|
}
|
||||||
if (first) {
|
if (first) {
|
||||||
result = first.match(/src\=\"(.*)\"/i)
|
result = first.match(/src\=\"(.*)\"/i)
|
||||||
if(result.length && result[0]){
|
if (result.length && result[0]) {
|
||||||
result = result[0].split('"')
|
result = result[0].split('"')
|
||||||
result = result[1]
|
result = result[1]
|
||||||
}
|
}
|
||||||
@ -242,7 +243,7 @@ export function findFirstImageInContent(htmlContent='') {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
function clearLink(linkString){
|
function clearLink(linkString) {
|
||||||
linkString = linkString.replace('http:', 'https:')
|
linkString = linkString.replace('http:', 'https:')
|
||||||
linkString = linkString.replace('https://www.ailesse.info/~tykayn/bazar/kotlife', 'https://www.tykayn.fr/wp-content/uploads/i/kotlife')
|
linkString = linkString.replace('https://www.ailesse.info/~tykayn/bazar/kotlife', 'https://www.tykayn.fr/wp-content/uploads/i/kotlife')
|
||||||
linkString = linkString.replace('https://blog.artlemoine.com/public/i', 'https://www.tykayn.fr/wp-content/uploads/i')
|
linkString = linkString.replace('https://blog.artlemoine.com/public/i', 'https://www.tykayn.fr/wp-content/uploads/i')
|
||||||
@ -250,6 +251,7 @@ function clearLink(linkString){
|
|||||||
|
|
||||||
return linkString
|
return linkString
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* usage:
|
* usage:
|
||||||
* downloadImage('https://upload.wikimedia.org/wikipedia/en/thumb/7/7d/Lenna_%28test_image%29.png/440px-Lenna_%28test_image%29.png', 'lena.png')
|
* downloadImage('https://upload.wikimedia.org/wikipedia/en/thumb/7/7d/Lenna_%28test_image%29.png/440px-Lenna_%28test_image%29.png', 'lena.png')
|
||||||
@ -262,10 +264,10 @@ function clearLink(linkString){
|
|||||||
export function downloadImage(url, filepath) {
|
export function downloadImage(url, filepath) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const options = {
|
const options = {
|
||||||
headers: { "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.52" }
|
headers: {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.52"}
|
||||||
};
|
};
|
||||||
|
|
||||||
https.get( url, options, (res) => {
|
https.get(url, options, (res) => {
|
||||||
if (res.statusCode === 200) {
|
if (res.statusCode === 200) {
|
||||||
res.pipe(fs.createWriteStream(filepath))
|
res.pipe(fs.createWriteStream(filepath))
|
||||||
.on('error', reject)
|
.on('error', reject)
|
||||||
@ -297,6 +299,7 @@ export function CropPicture(pictureName, width = 500, height = 300) {
|
|||||||
if (err) console.log(err);
|
if (err) console.log(err);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* prendre un post parmi tous ceux du blog, dans ceux qui ont été publiés
|
* prendre un post parmi tous ceux du blog, dans ceux qui ont été publiés
|
||||||
* @returns {*}
|
* @returns {*}
|
||||||
@ -318,7 +321,7 @@ export function getRandomLinkGeneral(tkpostsjson) {
|
|||||||
* @param postContent
|
* @param postContent
|
||||||
* @param configPost
|
* @param configPost
|
||||||
*/
|
*/
|
||||||
export function findPictureAndSendPost(postContent, configPost){
|
export function findPictureAndSendPost(postContent, configPost) {
|
||||||
|
|
||||||
let firstPictureSource = findFirstImageInContent(postContent);
|
let firstPictureSource = findFirstImageInContent(postContent);
|
||||||
|
|
||||||
@ -329,7 +332,7 @@ export function findPictureAndSendPost(postContent, configPost){
|
|||||||
console.log("firstPictureSource found", firstPictureSource)
|
console.log("firstPictureSource found", firstPictureSource)
|
||||||
|
|
||||||
// check if picture already exist
|
// check if picture already exist
|
||||||
console.log('on envoie le média et l image : ' , filePathForDownloadedImage)
|
console.log('on envoie le média et l image : ', filePathForDownloadedImage)
|
||||||
downloadImage(firstPictureSource, filePathForDownloadedImage)
|
downloadImage(firstPictureSource, filePathForDownloadedImage)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
// suite du poste avec upload d'image
|
// suite du poste avec upload d'image
|
||||||
@ -360,97 +363,22 @@ export function findPictureAndSendPost(postContent, configPost){
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* find cli argument
|
* find cli argument
|
||||||
* @param argument
|
* @param argument
|
||||||
* @returns {boolean}
|
* @returns {boolean}
|
||||||
*/
|
*/
|
||||||
export function hasCliArgument(argument){
|
export function hasCliArgument(argument) {
|
||||||
return myArgs.indexOf(argument) !== -1
|
return myArgs.indexOf(argument) !== -1
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
import Parser from 'rss-parser';
|
|
||||||
import moment from "moment";
|
import moment from "moment";
|
||||||
|
|
||||||
let parser = new Parser();
|
let parser = new Parser();
|
||||||
|
|
||||||
|
|
||||||
/**
|
export function diffDaysBetweenTwoDates(date1, date2) {
|
||||||
* fetch and return a parsed rss feed
|
|
||||||
* @param url
|
|
||||||
* @returns {Promise<*>}
|
|
||||||
*/
|
|
||||||
export async function parseRssFeed(url){
|
|
||||||
let parsedFeed = await parser.parseURL(url);
|
|
||||||
|
|
||||||
console.log(parsedFeed.title);
|
|
||||||
|
|
||||||
parsedFeed.items.forEach((item) => {
|
|
||||||
console.log(item.title);
|
|
||||||
});
|
|
||||||
return parsedFeed
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* get a subset of rss parsed items
|
|
||||||
* @param parsedRssFeed
|
|
||||||
* @param days
|
|
||||||
* @returns {T[]}
|
|
||||||
*/
|
|
||||||
export function getArticlesFromDaysInRssFeed(parsedRssFeed , days=7) {
|
|
||||||
|
|
||||||
// return parsedRssFeed.items.splice(0,days);
|
|
||||||
return parsedRssFeed.items.splice(0,6);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
export function makeTitleContentFromRss(parsedFeed) {
|
|
||||||
|
|
||||||
let content = ''
|
|
||||||
let counter = 0;
|
|
||||||
if (!parsedFeed.length) {
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
parsedFeed.forEach((item) => {
|
|
||||||
// if (!counter) {
|
|
||||||
// console.log('first item', item)
|
|
||||||
// }
|
|
||||||
let cleanedTitle= item.title.replace('[','').trim()
|
|
||||||
cleanedTitle= cleanedTitle.replace(']','').trim()
|
|
||||||
content += `\n* [${cleanedTitle}](${item.link}) `;
|
|
||||||
content += `\n ${item.isoDate.substring(0,10)} : ${item.contentSnippet.split('\n')[0]} \n`;
|
|
||||||
counter++;
|
|
||||||
});
|
|
||||||
return content;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
export function getArticlesFromDaysInJson(json_content,nbOfDays){
|
|
||||||
|
|
||||||
let today = new Date()
|
|
||||||
let selectedEvents = [];
|
|
||||||
|
|
||||||
console.log('getArticlesFromDaysInJson: filtre nbOfDays', nbOfDays)
|
|
||||||
console.log('events ', json_content.length)
|
|
||||||
json_content.forEach((item) => {
|
|
||||||
|
|
||||||
let differenceDays = diffDaysBetweenTwoDates(new Date(item.start_time) ,today);
|
|
||||||
|
|
||||||
if( differenceDays < nbOfDays){
|
|
||||||
console.log('on garde', differenceDays,item.city, item.title)
|
|
||||||
selectedEvents.push(item)
|
|
||||||
}
|
|
||||||
// else{
|
|
||||||
// console.log('on ne garde pas', differenceDays,item.city, item.title)
|
|
||||||
// }
|
|
||||||
})
|
|
||||||
|
|
||||||
return selectedEvents
|
|
||||||
}
|
|
||||||
|
|
||||||
export function diffDaysBetweenTwoDates(date1,date2) {
|
|
||||||
|
|
||||||
const a = moment(date1);
|
const a = moment(date1);
|
||||||
const b = moment(date2);
|
const b = moment(date2);
|
||||||
@ -459,11 +387,10 @@ export function diffDaysBetweenTwoDates(date1,date2) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
export function filterRegionAgendaDuLibreEvents(events_list, filter_critera) {
|
export function filterRegionAgendaDuLibreEvents(events_list, filter_critera) {
|
||||||
let selection = []
|
let selection = []
|
||||||
events_list.forEach(item=> {
|
events_list.forEach(item => {
|
||||||
if( item.region_id == filter_critera){
|
if (item.region_id == filter_critera) {
|
||||||
selection.push(item)
|
selection.push(item)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -472,13 +399,13 @@ export function filterRegionAgendaDuLibreEvents(events_list, filter_critera) {
|
|||||||
|
|
||||||
moment.locale('fr');
|
moment.locale('fr');
|
||||||
|
|
||||||
export function groupEventsByDay(events_list){
|
export function groupEventsByDay(events_list) {
|
||||||
let selection = {}
|
let selection = {}
|
||||||
events_list.forEach(item=> {
|
events_list.forEach(item => {
|
||||||
|
|
||||||
let formattedDay = moment(item.start_time).format('dddd DD')
|
let formattedDay = moment(item.start_time).format('dddd DD')
|
||||||
|
|
||||||
if( ! selection[formattedDay]){
|
if (!selection[formattedDay]) {
|
||||||
selection[formattedDay] = []
|
selection[formattedDay] = []
|
||||||
}
|
}
|
||||||
selection[formattedDay].push(item)
|
selection[formattedDay].push(item)
|
@ -1,6 +1,6 @@
|
|||||||
import fs from "fs";
|
import fs from "fs";
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import {getRandomElementOfArray, listFilesOfFolder} from './utils.mjs'
|
import {getRandomElementOfArray, listFilesOfFolder} from './libs/utils.mjs'
|
||||||
import Masto from "mastodon";
|
import Masto from "mastodon";
|
||||||
|
|
||||||
const __dirname = path.resolve();
|
const __dirname = path.resolve();
|
||||||
|
@ -4,7 +4,7 @@ import sendPostMastodon, {
|
|||||||
randomIntFromInterval,
|
randomIntFromInterval,
|
||||||
getRandomElementOfArray,
|
getRandomElementOfArray,
|
||||||
findPictureAndSendPost, getRandomLinkGeneral
|
findPictureAndSendPost, getRandomLinkGeneral
|
||||||
} from './utils.mjs'
|
} from './libs/utils.mjs'
|
||||||
|
|
||||||
const folderBlogPostsPreview = process.cwd() + '/assets/blog_posts_medias/'
|
const folderBlogPostsPreview = process.cwd() + '/assets/blog_posts_medias/'
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ import {
|
|||||||
randomIntFromInterval,
|
randomIntFromInterval,
|
||||||
findPictureAndSendPost, getRandomLinkGeneral, hasCliArgument, slugify
|
findPictureAndSendPost, getRandomLinkGeneral, hasCliArgument, slugify
|
||||||
|
|
||||||
} from './utils.mjs'
|
} from './libs/utils.mjs'
|
||||||
import Masto from "mastodon";
|
import Masto from "mastodon";
|
||||||
|
|
||||||
const __dirname = path.resolve();
|
const __dirname = path.resolve();
|
||||||
|
@ -7,7 +7,7 @@ import rp from "request-promise";
|
|||||||
import $ from "cheerio";
|
import $ from "cheerio";
|
||||||
import fs from "fs";
|
import fs from "fs";
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import sendPostMastodon, {downloadImage, randomIntFromInterval, slugify} from './utils.mjs'
|
import sendPostMastodon, {downloadImage, randomIntFromInterval, slugify} from './libs/utils.mjs'
|
||||||
import {getSourceOfDescriptorPageContent} from "./osm_get_description_picture.mjs";
|
import {getSourceOfDescriptorPageContent} from "./osm_get_description_picture.mjs";
|
||||||
|
|
||||||
const __dirname = path.resolve();
|
const __dirname = path.resolve();
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
import fs from "fs";
|
import fs from "fs";
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import {getRandomElementOfArray, listFilesOfFolder} from '../utils.mjs'
|
import {getRandomElementOfArray, listFilesOfFolder} from '../libs/utils.mjs'
|
||||||
import Masto from "mastodon";
|
import Masto from "mastodon";
|
||||||
|
|
||||||
const __dirname = path.resolve();
|
const __dirname = path.resolve();
|
||||||
|
|
||||||
// choisir un type de publication au hasard dans les dossiers "picture"
|
// choisir un type de publication au hasard dans les dossiers "picture"
|
||||||
|
|
||||||
import pictureFolderDescriptions from "../describe_picture_folders.mjs"
|
import pictureFolderDescriptions from "../libs/describe_picture_folders.mjs"
|
||||||
const typeOfFolder = getRandomElementOfArray(Object.keys(pictureFolderDescriptions))
|
const typeOfFolder = getRandomElementOfArray(Object.keys(pictureFolderDescriptions))
|
||||||
|
|
||||||
console.log(typeOfFolder)
|
console.log(typeOfFolder)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
// let firstimgsource = findFirstImageInContent(postObject.post_content)
|
// let firstimgsource = findFirstImageInContent(postObject.post_content)
|
||||||
import {findFirstImageInContent} from "../utils.mjs";
|
import {findFirstImageInContent} from "../libs/utils.mjs";
|
||||||
|
|
||||||
let myContentHtml =
|
let myContentHtml =
|
||||||
"Protonmail, la fameuse boite email zéro connaissance de la part de l’hébergeur Suisse, développé à source ouverte depuis son origine et par des techos du CERN, permet de supprimer le contenu de pas mal de dossiers, mais pas de la boite de réception principale.\n" +
|
"Protonmail, la fameuse boite email zéro connaissance de la part de l’hébergeur Suisse, développé à source ouverte depuis son origine et par des techos du CERN, permet de supprimer le contenu de pas mal de dossiers, mais pas de la boite de réception principale.\n" +
|
||||||
|
83
helpers/wip/recommandations_curator.mjs
Normal file
83
helpers/wip/recommandations_curator.mjs
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
|
||||||
|
import sendPostMastodon, {
|
||||||
|
getArticlesFromDaysInRssFeed,
|
||||||
|
makeTitleContentFromRss,
|
||||||
|
parseRssFeed,
|
||||||
|
} from "./libs/utils.mjs";
|
||||||
|
|
||||||
|
// const afis_rss_feed_url = 'https://afis.org/rss.xml';
|
||||||
|
// const days_back_in_rss_feed = 7;
|
||||||
|
|
||||||
|
async function postLink() {
|
||||||
|
|
||||||
|
|
||||||
|
// selectionner un compte parmi les gens suivis dans une liste
|
||||||
|
|
||||||
|
// export des abonnements utilisateur https://mastodon.cipherbliss.com/settings/exports/follows.csv/home/cipherbliss/Nextcloud/inbox/following_accounts.csv
|
||||||
|
// <https://mastodon.cipherbliss.com/api/v1/accounts/1/following?max_id=19658>; rel="next", <https://mastodon.cipherbliss.com/api/v1/accounts/1/following?since_id=20294>; rel="prev"
|
||||||
|
// https://mastodon.cipherbliss.com/api/v1/accounts/relationships?id[]=109484382634211819&id[]=109280269336881811&id[]=109280889310776283&id[]=109248504398682634&id[]=109310268216721885&id[]=109916178850231009&id[]=109541053771316772&id[]=151980&id[]=80685&id[]=106835252230809041&id[]=109167546376395742&id[]=109791782092094822&id[]=109770197347890560&id[]=109768052505508503&id[]=108202891614303950&id[]=109749045115736569&id[]=109739290485102920&id[]=109330282577556324&id[]=109280646010767217&id[]=109722335836985403&id[]=109542013632346871&id[]=109278739925137927&id[]=109659515794606337&id[]=109292570383233152&id[]=109660244192213202&id[]=109303521370666602&id[]=109523867267929049&id[]=109643780720044907&id[]=109386436202793665&id[]=109501996699619458&id[]=109632939061534470&id[]=109621031128728719&id[]=109620790782200477&id[]=139144&id[]=109592762903342668&id[]=109603261782470086&id[]=109591788539379136&id[]=109570049875530270&id[]=109381927764082328&id[]=109554213128019255
|
||||||
|
// exemple d'account:
|
||||||
|
/**
|
||||||
|
{
|
||||||
|
"id": "109484382634211819",
|
||||||
|
"username": "GalmeshRosewood",
|
||||||
|
"acct": "GalmeshRosewood@mastodon.art",
|
||||||
|
"display_name": "Galmesh Rosewood",
|
||||||
|
"locked": false,
|
||||||
|
"bot": false,
|
||||||
|
"discoverable": true,
|
||||||
|
"group": false,
|
||||||
|
"created_at": "2022-12-05T00:00:00.000Z",
|
||||||
|
"note": "<p>I'm Galmesh Rosewood and I want to be a lewd artist. (It's a Monkey Island ref). Male from France. Some content won't be family-friendly.</p>",
|
||||||
|
"url": "https://mastodon.art/@GalmeshRosewood",
|
||||||
|
"avatar": "https://mastodon.cipherbliss.com/system/cache/accounts/avatars/109/484/382/634/211/819/original/4d3c4ded9ae95202.jpg",
|
||||||
|
"avatar_static": "https://mastodon.cipherbliss.com/system/cache/accounts/avatars/109/484/382/634/211/819/original/4d3c4ded9ae95202.jpg",
|
||||||
|
"header": "https://mastodon.cipherbliss.com/system/cache/accounts/headers/109/484/382/634/211/819/original/5b1822520e4ae3b3.png",
|
||||||
|
"header_static": "https://mastodon.cipherbliss.com/system/cache/accounts/headers/109/484/382/634/211/819/original/5b1822520e4ae3b3.png",
|
||||||
|
"followers_count": 762,
|
||||||
|
"following_count": 195,
|
||||||
|
"statuses_count": 327,
|
||||||
|
"last_status_at": "2023-03-04",
|
||||||
|
"emojis": [],
|
||||||
|
"fields": [
|
||||||
|
{
|
||||||
|
"name": "Linktree",
|
||||||
|
"value": "<a href=\"https://linktr.ee/galmeshrosewood\" rel=\"nofollow noopener noreferrer\" target=\"_blank\"><span class=\"invisible\">https://</span><span class=\"\">linktr.ee/galmeshrosewood</span><span class=\"invisible\"></span></a>",
|
||||||
|
"verified_at": null
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
// faire un repost de média
|
||||||
|
// POST /api/v1/statuses/109965725969165853/reblog
|
||||||
|
|
||||||
|
// autre action:
|
||||||
|
// faire une liste de recommandation de 3 gens à follow au hasard pris dans cette liste,
|
||||||
|
// avec en image attachée un des médias postés par les comptes en question
|
||||||
|
|
||||||
|
|
||||||
|
// console.log("envoi de post des articles afis sciences publiés depuis " + days_back_in_rss_feed + " jours par le compte afis91")
|
||||||
|
//
|
||||||
|
// let parsedFeed = await parseRssFeed(afis_rss_feed_url)
|
||||||
|
// let articles = await getArticlesFromDaysInRssFeed(parsedFeed, days_back_in_rss_feed)
|
||||||
|
// console.log('articles', articles)
|
||||||
|
// let contentOfPost = 'Articles des ' + days_back_in_rss_feed + ' derniers jours sur le site web de l\'AFIS: \n'
|
||||||
|
// + makeTitleContentFromRss(articles)
|
||||||
|
//
|
||||||
|
// let configPost = {
|
||||||
|
// author: 'afis91',
|
||||||
|
// website: 'afis.org',
|
||||||
|
// // disable_slugify: true,
|
||||||
|
// slug: "afis_picture",
|
||||||
|
// content_type: "text/markdown",
|
||||||
|
// folder_image: process.cwd() + '/assets/',
|
||||||
|
// image: "afis_picture_of_the_day.jpg",
|
||||||
|
// message: `# ${contentOfPost}
|
||||||
|
//
|
||||||
|
// #afis #science #pseudoScience #hebdo`,
|
||||||
|
// }
|
||||||
|
// sendPostMastodon(configPost)
|
||||||
|
}
|
||||||
|
|
||||||
|
postLink();
|
@ -1,6 +1,6 @@
|
|||||||
import fs from "fs";
|
import fs from "fs";
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import {getRandomElementOfArray, listFilesOfFolder} from '../utils.mjs'
|
import {getRandomElementOfArray, listFilesOfFolder} from '../libs/utils.mjs'
|
||||||
import Masto from "mastodon";
|
import Masto from "mastodon";
|
||||||
|
|
||||||
const __dirname = path.resolve();
|
const __dirname = path.resolve();
|
||||||
|
@ -2,7 +2,7 @@ var express = require('express');
|
|||||||
var router = express.Router();
|
var router = express.Router();
|
||||||
var sqlite3 = require('sqlite3');
|
var sqlite3 = require('sqlite3');
|
||||||
var Masto = require('mastodon');
|
var Masto = require('mastodon');
|
||||||
// import accounts_to_select from '../src/configs.js'
|
// import accounts_to_select from '../src/configs.mjs'
|
||||||
|
|
||||||
const accounts_to_select = [
|
const accounts_to_select = [
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user