generalize posting with first found picture in content

This commit is contained in:
Tykayn 2022-12-14 16:38:47 +01:00 committed by tykayn
parent 656e1e43fd
commit bd8095e822
5 changed files with 154 additions and 69 deletions

View File

@ -179,7 +179,7 @@
"post_author": 1, "post_author": 1,
"post_date": "2015-11-22 20:42:54", "post_date": "2015-11-22 20:42:54",
"post_date_gmt": "2015-11-22 19:42:54", "post_date_gmt": "2015-11-22 19:42:54",
"post_content": "<p><a href=\"http://tykayn.fr/wp-content/uploads/i/2015/11novembre/journee_langues_preview.jpg\" title=\"journee_langues_preview.jpg\"><img src=\"http://blog.artlemoine.com//public/i/2015/11novembre/.journee_langues_preview_m.jpg\" alt=\"journee_langues_preview.jpg\" style=\"display:block; margin:0 auto;\" title=\"journee_langues_preview.jpg, nov. 2015\" /></a>\nUne ptite illu sur qzine pour ma part aujourdhui. Je l'ai aussi mise <a href=\"http://tykayn.deviantart.com/art/tongues-day-573234936\" hreflang=\"fr\">sur mon deviantart</a> si vous voulez voir d'autres de mes gribouilles :3\n<a href=\"http://qzine.fr/blog/maitriser-les-langues/\">http://qzine.fr/blog/maitriser-les-langues/</a>\nD'ailleurs sur qzine.fr on se prépare avec plein d'artistes pour le projet foufou de publier un calendrier de l'avent qui va réchauffer l'hiver, ça va être beau *-* <br /></p>", "post_content": "<p><a href=\"http://tykayn.fr/wp-content/uploads/i/2015/11novembre/journee_langues_preview.jpg\" title=\"journee_langues_preview.jpg\"><img src=\"https://www.tykayn.fr/wp-content/uploads/i/2015/11novembre/.journee_langues_preview_m.jpg\" alt=\"journee_langues_preview.jpg\" style=\"display:block; margin:0 auto;\" title=\"journee_langues_preview.jpg, nov. 2015\" /></a>\nUne ptite illu sur qzine pour ma part aujourdhui. Je l'ai aussi mise <a href=\"http://tykayn.deviantart.com/art/tongues-day-573234936\" hreflang=\"fr\">sur mon deviantart</a> si vous voulez voir d'autres de mes gribouilles :3\n<a href=\"http://qzine.fr/blog/maitriser-les-langues/\">http://qzine.fr/blog/maitriser-les-langues/</a>\nD'ailleurs sur qzine.fr on se prépare avec plein d'artistes pour le projet foufou de publier un calendrier de l'avent qui va réchauffer l'hiver, ça va être beau *-* <br /></p>",
"post_title": "une rousse une langue", "post_title": "une rousse une langue",
"post_excerpt": "", "post_excerpt": "",
"post_status": "publish", "post_status": "publish",

View File

@ -1,11 +1,11 @@
import fs from "fs"; import fs from "fs";
import path from 'path'; import path from 'path';
import sendPostMastodon, {randomIntFromInterval, findFirstImageInContent} from './utils.mjs' import sendPostMastodon, {randomIntFromInterval, findFirstImageInContent, findPictureAndSendPost} from './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'))
let reallySendPost = false; let reallySendPost = false;
reallySendPost = true; // reallySendPost = true;
export function getRandomElementOfArray(listItems) { export function getRandomElementOfArray(listItems) {
@ -35,12 +35,14 @@ function postLink() {
let configPost = { let configPost = {
author: 'tykayn', author: 'tykayn',
website: 'cipherbliss',
slug: postObject.post_name,
postObject,
folder_image: folderBlogPostsPreview,
image: 'cipherbliss_post_' + randomIntFromInterval(1 , 3) + '.jpg', image: 'cipherbliss_post_' + randomIntFromInterval(1 , 3) + '.jpg',
message: `# [${postObject.post_title}](https://www.cipherbliss.com/${postObject.post_name}) message: `# [${postObject.post_title}](https://www.cipherbliss.com/${postObject.post_name})
* ${postObject.post_date} " ${filteredExcerpt} "
> ${filteredExcerpt}
* #tykayn #cipherbliss #blog`, * #tykayn #cipherbliss #blog`,
reallySendPost reallySendPost
} }
@ -48,7 +50,7 @@ function postLink() {
console.log("configPost.image", configPost.image) console.log("configPost.image", configPost.image)
sendPostMastodon(configPost) findPictureAndSendPost(postObject.content.rendered, configPost)
console.log("post ID: ", postObject.ID) console.log("post ID: ", postObject.ID)
} }

View File

@ -1,7 +1,13 @@
import fs from "fs"; import fs from "fs";
import path from 'path'; import path from 'path';
import sendPostMastodon, {randomIntFromInterval, findFirstImageInContent} from './utils.mjs' import sendPostMastodon, {
randomIntFromInterval,
findFirstImageInContent,
downloadImage,
findPictureAndSendPost
} from './utils.mjs'
const folderBlogPostsPreview = process.cwd() + '/assets/blog_posts_medias/'
/** /**
* *
@ -18,7 +24,7 @@ import sendPostMastodon, {randomIntFromInterval, findFirstImageInContent} from '
const __dirname = path.resolve(); const __dirname = path.resolve();
const list_posts_json = JSON.parse(fs.readFileSync(__dirname + "/assets/documents/qzine_posts_all.json", 'utf-8')) const list_posts_json = JSON.parse(fs.readFileSync(__dirname + "/assets/documents/qzine_posts_all.json", 'utf-8'))
let reallySendPost = false; let reallySendPost = false;
reallySendPost = true; // reallySendPost = true;
export function getRandomElementOfArray(listItems) { export function getRandomElementOfArray(listItems) {
@ -26,14 +32,14 @@ export function getRandomElementOfArray(listItems) {
} }
function getRandomLink() { function getRandomLinkQzine() {
let filteredLinks = list_posts_json.filter(elem => elem.status === 'publish') let filteredLinks = list_posts_json.filter(elem => elem.status === 'publish')
return getRandomElementOfArray(filteredLinks) return getRandomElementOfArray(filteredLinks)
} }
function postLink() { function postLink() {
let postObject = getRandomLink() let postObject = getRandomLinkQzine()
console.log("envoi de post par le compte Qzine - post n°" ,postObject.id) console.log("envoi de post par le compte Qzine - post n°" ,postObject.id)
let filteredExcerpt = postObject.excerpt.rendered.replace(/<[^>]+>/g, '') let filteredExcerpt = postObject.excerpt.rendered.replace(/<[^>]+>/g, '')
@ -47,17 +53,21 @@ function postLink() {
let configPost = { let configPost = {
author: 'qzine', author: 'qzine',
// image: 'qzine_default.jpg', website: 'qzine',
slug: postObject.title.rendered,
postObject,
folder_image: folderBlogPostsPreview,
image: 'qzine_post_' + randomIntFromInterval(1 , 4) + '.jpg', image: 'qzine_post_' + randomIntFromInterval(1 , 4) + '.jpg',
message: `# [ !Qzine - ${postObject.title.rendered}](${postObject.link}) message: `!Qzine - ${postObject.title.rendered}
* ${postObject.date} - ${postObject.link} * ${postObject.link}
${filteredExcerpt} ${filteredExcerpt}
* #qzine #qzineblog #blog #sexe #relations #éducation #plaisir #sociologie`, * #qzine #qzineblog #blog #sexe #relations #éducation #plaisir #sociologie`,
reallySendPost reallySendPost
} }
// console.log("configPost.message", configPost.message)
sendPostMastodon(configPost) // console.log('postContent' , postContent)
findPictureAndSendPost(postObject.content.rendered, configPost)
} }
postLink(); postLink();

View File

@ -1,6 +1,9 @@
import fs from "fs"; import fs from "fs";
import path from 'path'; import path from 'path';
import sendPostMastodon, {findFirstImageInContent, randomIntFromInterval, downloadImage} from './utils.mjs' import {
randomIntFromInterval,
findPictureAndSendPost, getRandomLinkGeneral
} from './utils.mjs'
import Masto from "mastodon"; import Masto from "mastodon";
const __dirname = path.resolve(); const __dirname = path.resolve();
@ -9,22 +12,13 @@ const tkpostsjson = JSON.parse(fs.readFileSync(__dirname + "/assets/documents/ty
let reallySendPost = false; let reallySendPost = false;
reallySendPost = true; // reallySendPost = true;
export function getRandomElementOfArray(listItems) {
return listItems[Math.floor(Math.random() * listItems.length)]
}
function getRandomLink() {
let filteredLinks = tkpostsjson.filter(elem => elem.post_status === 'publish')
return getRandomElementOfArray(filteredLinks)
}
function postLink() { function postLink() {
let postObject = getRandomLink() let postObject = getRandomLinkGeneral(tkpostsjson)
console.log("envoi de post par tykayn") console.log("envoi de post par tykayn")
let filteredExcerpt = postObject.post_content.replace(/<[^>]+>/g, '') let filteredExcerpt = postObject.post_content.replace(/<[^>]+>/g, '')
@ -37,47 +31,20 @@ function postLink() {
let configPost = { let configPost = {
author: 'tykayn', author: 'tykayn',
website: 'tykayn_blog',
slug: postObject.guid,
postObject,
folder_image: folderBlogPostsPreview,
image: 'tk_blog_bannieres_oct2010-' + randomIntFromInterval(1, 10) + '.jpg', image: 'tk_blog_bannieres_oct2010-' + randomIntFromInterval(1, 10) + '.jpg',
message: `# [${postObject.post_title}](${postObject.guid}) message: `# [${postObject.post_title}](${postObject.guid})
* ${postObject.post_date} - ${postObject.guid} * ${postObject.guid}
${filteredExcerpt} " ${filteredExcerpt} "
* #tykayn #tkblog #blog`, * #tykayn #tkblog #blog`,
reallySendPost reallySendPost
} }
// ajouter la première image du post de blog // ajouter la première image du post de blog
let firstPictureSource = findFirstImageInContent(postObject.post_content); findPictureAndSendPost(postObject.post_content, configPost)
if (firstPictureSource) {
console.log("firstPictureSource found", firstPictureSource)
downloadImage(firstPictureSource, folderBlogPostsPreview + 'media_post_' + postObject.post_name + '.jpg')
.then((res) => {
// suite du poste avec upload d'image
console.log('on envoie le media et l image')
configPost.folder_image = folderBlogPostsPreview;
configPost.image = 'media_post_' + postObject.post_name + '.jpg';
sendPostMastodon(configPost)
},
(err) => {
console.log('pas dimage trouvée pour l URL ', firstPictureSource, err)
sendPostMastodon(configPost)
}
)
.catch((err) => {
console.log('erreur avec cette URL ', firstPictureSource, err)
sendPostMastodon(configPost)
})
} else {
// no image provided
console.log("pas d'image dans le corps du texte")
// on envoie avec l'image par défaut
sendPostMastodon(configPost)
}
} }

View File

@ -25,10 +25,13 @@ export let defaultConfigMasto = {
sensitive: false, sensitive: false,
reallySendPost: false, reallySendPost: false,
image: '', image: '',
folder_image: 'assets/', folder_image: process.cwd() + '/assets/blog_posts_medias/',
message: "Hey coucou! on est le" + nowDate, message: "Hey coucou! on est le" + nowDate,
scheduled_at: "", scheduled_at: "",
content_type: "text/markdown" content_type: "text/markdown",
website: 'qzine',
slug: 'default_post_title',
postObject : {},
} }
@ -37,6 +40,11 @@ export function tokenForAuthorIsPresentInDotEnv(author) {
return process.env['TOKEN_' + author.toUpperCase()]; return process.env['TOKEN_' + author.toUpperCase()];
} }
/**
* send post to mastodon with config
* @param config
* @returns {*}
*/
export default function sendPostMastodon(config) { export default function sendPostMastodon(config) {
// override defaults with input argument // override defaults with input argument
@ -128,6 +136,32 @@ export default function sendPostMastodon(config) {
} }
} }
// Slugify a string
export function slugify(str)
{
str = str.replace(/^\s+|\s+$/g, '');
// Make the string lowercase
str = str.toLowerCase();
// Remove accents, swap ñ for n, etc
var from = "ÁÄÂÀÃÅČÇĆĎÉĚËÈÊẼĔȆÍÌÎÏŇÑÓÖÒÔÕØŘŔŠŤÚŮÜÙÛÝŸŽáäâàãåčçćďéěëèêẽĕȇíìîïňñóöòôõøðřŕšťúůüùûýÿžþÞĐđßÆa·/_,:;";
var to = "AAAAAACCCDEEEEEEEEIIIINNOOOOOORRSTUUUUUYYZaaaaaacccdeeeeeeeeiiiinnooooooorrstuuuuuyyzbBDdBAa------";
for (var i=0, l=from.length ; i<l ; i++) {
str = str.replace(new RegExp(from.charAt(i), 'g'), to.charAt(i));
}
// Remove invalid chars
str = str.replace(/[^a-z0-9 -]/g, '')
// Collapse whitespace and replace by -
.replace(/\s+/g, '-')
// Collapse dashes
.replace(/-+/g, '-');
return str;
}
/** /**
* @name listFilesOfFolder * @name listFilesOfFolder
* lister les noms de fichier que l'on peut publier dans un dossier. * lister les noms de fichier que l'on peut publier dans un dossier.
@ -162,9 +196,17 @@ 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 first = htmlContent.match(/<img\s[^>]*?src\s*=\s*['\"]([^'\"]*?)['\"][^>]*?>/)[0]; let foundPictures = htmlContent.match(/<img\s[^>]*?src\s*=\s*['\"]([^'\"]*?)['\"][^>]*?>/);
let first = '';
if(foundPictures && foundPictures[0]){
first = foundPictures[0]
}else{
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]){
@ -172,12 +214,18 @@ export function findFirstImageInContent(htmlContent) {
result = result[1] result = result[1]
} }
} }
console.log(result) result = clearLink(result)
result = result.replace('http:', 'https:') console.log('clearLink', result)
result = result.replace('https://www.ailesse.info/~tykayn/bazar/kotlife', 'https://www.tykayn.fr/wp-content/uploads/i/kotlife')
return result; return result;
} }
function clearLink(linkString){
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://blog.artlemoine.com/public/i', 'https://www.tykayn.fr/wp-content/uploads/i')
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')
@ -220,4 +268,62 @@ export function CropPictue(pictureName, width = 500, height = 300) {
.toFile('thumb_' + pictureName, function (err) { .toFile('thumb_' + pictureName, function (err) {
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
* @returns {*}
*/
export function getRandomLinkGeneral(tkpostsjson) {
let filteredLinks = []
if (tkpostsjson[0].post_status) {
filteredLinks = tkpostsjson.filter(elem => elem.post_status === 'publish')
} else if (tkpostsjson[0].status) {
filteredLinks = tkpostsjson.filter(elem => elem.status === 'publish')
}
return getRandomElementOfArray(filteredLinks)
}
export function getRandomElementOfArray(listItems) {
return listItems[Math.floor(Math.random() * listItems.length)]
}
/**
* trouver l'image du contenu si il y en a
* @param postContent
* @param configPost
*/
export function findPictureAndSendPost(postContent, configPost){
let firstPictureSource = findFirstImageInContent(postContent);
let filePathImage = `${configPost.folder_image}_${configPost.website}_media_post_${slugify(configPost.slug)}.jpg`
if (firstPictureSource) {
console.log("firstPictureSource found", firstPictureSource)
downloadImage(firstPictureSource, filePathImage)
.then((res) => {
// suite du poste avec upload d'image
console.log('on envoie le media et l image' , filePathImage)
sendPostMastodon(configPost)
},
(err) => {
console.log('pas dimage trouvée pour l URL ', firstPictureSource, err)
sendPostMastodon(configPost)
}
)
.catch((err) => {
console.log('erreur avec cette URL ', firstPictureSource, err)
sendPostMastodon(configPost)
})
} else {
// no image provided
console.log("pas d'image dans le corps du texte", configPost.image)
// on envoie avec l'image par défaut
sendPostMastodon(configPost)
}
} }