mirror of
https://forge.chapril.org/tykayn/orgmode-to-gemini-blog
synced 2025-06-20 09:04:42 +02:00
site builder ok
This commit is contained in:
parent
7e9e8f2436
commit
83dd9f7472
27 changed files with 526 additions and 235 deletions
|
@ -0,0 +1,193 @@
|
|||
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta property="og:image" content="https://www.cipherbliss.com/wp-content/uploads/2016/12/rond.png">
|
||||
<meta property="og:locale" content="fr_FR">
|
||||
<meta property="og:description" content="Code, nouvelles technologies et entrepreneurariat par B. Lemoine">
|
||||
<meta property="og:url" content="https://www.cipherbliss.com">
|
||||
<meta property="og:site_name" content="Cipher Bliss">
|
||||
<link rel="alternate" type="application/rss+xml" title="Cipher Bliss » Flux" href="https://www.cipherbliss.com/feed/">
|
||||
<link href="/style.css" rel="stylesheet">
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title></title>
|
||||
<meta name="author" content="">
|
||||
<link rel="alternate" type="application/rss+xml" title="Cipher Bliss » Flux"
|
||||
href="https://www.cipherbliss.com/feed/">
|
||||
<meta property="og:title" content="">
|
||||
<meta property="og:locale" content="fr_FR">
|
||||
<!-- Description de la page -->
|
||||
<meta name="description" content="">
|
||||
<meta name="reply-to" content="contact@cipherbliss.com">
|
||||
<link rel="icon" type="image/png" href="https://www.cipherbliss.com/wp-content/uploads/2016/12/rond.png">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="page">
|
||||
<header id="masthead" class="site-header">
|
||||
<div class="header-image" style="background: url(https://www.cipherbliss.com/wp-content/uploads/2016/11/bg.jpg)">
|
||||
<a href="/">
|
||||
<img src="https://www.cipherbliss.com/wp-content/uploads/2016/12/rond.png" class="site-icon img">
|
||||
</a>
|
||||
<h1 class="blog-title">Cipher Bliss</h1>
|
||||
<p class="blog-subtitle">Code, nouvelles technologies et entrepreneurariat par B. Lemoine</p>
|
||||
</div>
|
||||
<nav class="navbar is-fixed-top is-dark" role="navigation" aria-label="main navigation">
|
||||
<div class="navbar-brand">
|
||||
<a class="navbar-item" href="https://www.cipherbliss.com">
|
||||
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="navbarBasicExample" class="navbar-menu">
|
||||
<div class="navbar-start">
|
||||
<a class="navbar-item" href="https://www.cipherbliss.com">
|
||||
<img src="https://www.cipherbliss.com/wp-content/uploads/2016/12/rond.png"
|
||||
class="img-fluid">
|
||||
</a>
|
||||
|
||||
<nav>
|
||||
<a href="/">Accueil</a>
|
||||
<a href="https://portfolio.cipherbliss.com">Portfolio</a>
|
||||
<a href="/feed">Flux RSS</a>
|
||||
<a href="/contact">Contact</a>
|
||||
<a href="/ressources-de-café-vie-privée">Ressources</a>
|
||||
</nav>
|
||||
|
||||
</div>
|
||||
<div class="navbar-end">
|
||||
<div class="navbar-item">
|
||||
<form role="search" method="get" class="search-form" action="/">
|
||||
<label>
|
||||
<input class="search-field" placeholder="Recherche" value="" name="s"
|
||||
type="search">
|
||||
</label>
|
||||
<input class="is-hidden search-submit" value="Rechercher" type="submit">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
<main class="body-wrap boxed-container">
|
||||
<article class="content">
|
||||
|
||||
<header id="title-block-header">
|
||||
<h1 class="title">cipherbliss_blog</h1>
|
||||
</header>
|
||||
<h1 id="création-dun-blog-gemini-1">Création d'un blog gemini</h1>
|
||||
<p>Et hop, un générateur qui fait le café à partir de fichiers orgmode
|
||||
ou markdown.</p>
|
||||
<p>Génération de capsules gemini et blog html à partir d'articles en
|
||||
fichiers Orgmode.</p>
|
||||
<p>exemple avec le blog de DragonFeu.
|
||||
`sources/dragonfeu<sub>blog</sub>`</p>
|
||||
<p>Les articles sont écrits dans le dossier source/, leur nom permet de
|
||||
déduire l'ordre de publication grâce à une date YYY-MM-DD en début de
|
||||
nom de fichier ## création d'un article Pour un article en langue En,
|
||||
sur le blog cipherbliss<sub>blog</sub>, donner le titre entre guillemets
|
||||
ainsi: ```shell python3 new<sub>article</sub>.py
|
||||
cipherbliss<sub>blog</sub> en "Creation of a gemini blog" ``` ##
|
||||
prérequis pour installation</p>
|
||||
<p>Avoir des articles au format org, les mettre dans un dossier
|
||||
source/nom<sub>dublog</sub>, et avoir quelques bibliothèques dispo:</p>
|
||||
<p>```shell bash install.sh ``` [2024-11-04] Testé avec: Pandoc 2.9.2.1
|
||||
<a
|
||||
href="http://fr.archive.ubuntu.com/ubuntu/pool/universe/p/pandoc/pandoc_2.9.2.1-3ubuntu2_amd64.deb">http://fr.archive.ubuntu.com/ubuntu/pool/universe/p/pandoc/pandoc_2.9.2.1-3ubuntu2_amd64.deb</a></p>
|
||||
<p>Python 3.10.12 ## Conversion des fichiers Org vers gemini et html
|
||||
Ceci va convertir ce qui se trouve dans le dossier
|
||||
`sources/tykayn<sub>blog</sub>` et produire un site web dans
|
||||
`html<sub>output</sub>/tykayn<sub>blog</sub>` ainsi qu'une capsule
|
||||
gemini dans `capsules-gemini/tykayn<sub>blog</sub>`</p>
|
||||
<p>```shell bash converters.sh tykayn<sub>blog</sub> ```</p>
|
||||
<p>## Conversion de blog en capsule gemini</p>
|
||||
<p>L'idée est d'avoir un ensemble de billets de blogs en texte simple
|
||||
versionnés avec git et servis par une capsule gemini ainsi que par un
|
||||
site web. On aura besoin de convertir des billets existants, et de
|
||||
rédiger les nouveaux dans un format qui nous convient, par exemple
|
||||
markdown ou orgmode afin de rendre le tout le plus pérenne possible. On
|
||||
aura aussi besoin de référencer les images dans un dossier de notre
|
||||
dépot, et de gérer les relations entres articles pour que les liens
|
||||
aient du sens sur la capsule gemini autant que dans la version web. On
|
||||
souhaite aussi fournir un flux RSS, et un template de billet de blog
|
||||
avec une entête et un pied de page commun qui donne des moyens de
|
||||
contact, de soutenir l'auteur, et de revenir à l'accueil. On prendra
|
||||
aussi en charge différentes pages:</p>
|
||||
<ul>
|
||||
<li>à propos</li>
|
||||
<li>contact</li>
|
||||
<li>nos projets</li>
|
||||
<li>une liste des articles triés par date.</li>
|
||||
</ul>
|
||||
<p>Il nous faudra aussi un script de mise à jour du blog qui se charge
|
||||
de mettre à jour le flux rss, le dépot git. On peut aller chercher de
|
||||
l'automatisation dans la gestion de plusieurs capsules différentes en
|
||||
tagguant les articles par nom de blog, ce qui nécessite un fichier de
|
||||
config pour les correspondances.</p>
|
||||
<p>## Depuis wordpress Connec à la base de données mysql, et extraction
|
||||
de chaque article pour récupérer la partie HTML et la convertir en
|
||||
markdown et en fichiers org.</p>
|
||||
<p>## Depuis des fichiers orgmode. J'écris en orgmode une base de
|
||||
connaissances qui contient aussi un export de mes anciens billets de
|
||||
blog dans un dossier par blog. Pour cibler quels billets utiliser pour
|
||||
quel blog j'ai donc deux possibilités: leur chemin de fichier, ou des
|
||||
tags particuliers présents dans les fichiers org. <a
|
||||
href="id:5a197a1b-ddfe-4c79-8934-d9a28ab6df65">Textes de blog en
|
||||
préparation</a> <a
|
||||
href="https://forge.chapril.org/tykayn/org-report-stats">https://forge.chapril.org/tykayn/org-report-stats</a></p>
|
||||
<p>Rédaction, conversion, completion des nouveaux articles, régénération
|
||||
des indexs et flux rss, mise à jour du dépot git, publication des
|
||||
pages.</p>
|
||||
<p>Offpunk LazyBlog Dotclear, Wordpress, Hugo, Pélican Pandoc, PandocGmi
|
||||
<a
|
||||
href="https://github.com/njamescouk/pandocGmi/tree/master">https://github.com/njamescouk/pandocGmi/tree/master</a></p>
|
||||
<ul>
|
||||
<li>config par site web de son nom de domaine</li>
|
||||
<li>réécriture des liens internes</li>
|
||||
<li>réécriture des url des images vers le dossier courant</li>
|
||||
<li>réparer la génération de fichiers gmi</li>
|
||||
<li>template footer article: gestion article suivant et précédent</li>
|
||||
<li>conversion des liens avec nom de domaine si relatifs</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li>navigation sur les pages d'article</li>
|
||||
</ul>
|
||||
<p>- gestion des langues dans la source et la destination</p>
|
||||
<ul>
|
||||
<li>gestion multi site et multi langue</li>
|
||||
</ul>
|
||||
|
||||
<p class="after-article">
|
||||
|
||||
</p>
|
||||
</article>
|
||||
</main>
|
||||
<footer class="site-footer has-top-divider">
|
||||
<div class="container">
|
||||
<div class="site-footer-inner">
|
||||
|
||||
|
||||
|
||||
|
||||
<nav>
|
||||
<a href="/">Accueil</a>
|
||||
<a href="https://portfolio.cipherbliss.com">Portfolio</a>
|
||||
<a href="/feed">Flux RSS</a>
|
||||
<a href="/contact">Contact</a>
|
||||
<a href="/ressources-de-café-vie-privée">Ressources</a>
|
||||
</nav>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
</body>
|
||||
<!-- généré avec orgmode-to-gemini-blog par Tykayn -->
|
||||
</html>
|
||||
|
|
@ -10,12 +10,9 @@
|
|||
<meta property="og:description" content="Code, nouvelles technologies et entrepreneurariat par B. Lemoine">
|
||||
<meta property="og:url" content="https://www.cipherbliss.com">
|
||||
<meta property="og:site_name" content="Cipher Bliss">
|
||||
<link rel="alternate" type="application/rss+xml" title="Cipher Bliss » Flux"
|
||||
href="https://www.cipherbliss.com/feed/">
|
||||
<link rel="alternate" type="application/rss+xml" title="Cipher Bliss » Flux" href="https://www.cipherbliss.com/feed/">
|
||||
<link href="/style.css" rel="stylesheet">
|
||||
|
||||
<meta charset="utf-8">
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title></title>
|
||||
<meta name="author" content="">
|
||||
|
@ -79,182 +76,60 @@
|
|||
</header>
|
||||
<main class="body-wrap boxed-container">
|
||||
<article class="content">
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="generator" content="pandoc" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
|
||||
<title>cipherbliss_blog</title>
|
||||
<style>
|
||||
html {
|
||||
color: #1a1a1a;
|
||||
background-color: #fdfdfd;
|
||||
}
|
||||
body {
|
||||
margin: 0 auto;
|
||||
max-width: 36em;
|
||||
padding-left: 50px;
|
||||
padding-right: 50px;
|
||||
padding-top: 50px;
|
||||
padding-bottom: 50px;
|
||||
hyphens: auto;
|
||||
overflow-wrap: break-word;
|
||||
text-rendering: optimizeLegibility;
|
||||
font-kerning: normal;
|
||||
}
|
||||
@media (max-width: 600px) {
|
||||
body {
|
||||
font-size: 0.9em;
|
||||
padding: 12px;
|
||||
}
|
||||
h1 {
|
||||
font-size: 1.8em;
|
||||
}
|
||||
}
|
||||
@media print {
|
||||
html {
|
||||
background-color: white;
|
||||
}
|
||||
body {
|
||||
background-color: transparent;
|
||||
color: black;
|
||||
font-size: 12pt;
|
||||
}
|
||||
p, h2, h3 {
|
||||
orphans: 3;
|
||||
widows: 3;
|
||||
}
|
||||
h2, h3, h4 {
|
||||
page-break-after: avoid;
|
||||
}
|
||||
}
|
||||
p {
|
||||
margin: 1em 0;
|
||||
}
|
||||
a {
|
||||
color: #1a1a1a;
|
||||
}
|
||||
a:visited {
|
||||
color: #1a1a1a;
|
||||
}
|
||||
img {
|
||||
max-width: 100%;
|
||||
}
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
margin-top: 1.4em;
|
||||
}
|
||||
h5, h6 {
|
||||
font-size: 1em;
|
||||
font-style: italic;
|
||||
}
|
||||
h6 {
|
||||
font-weight: normal;
|
||||
}
|
||||
ol, ul {
|
||||
padding-left: 1.7em;
|
||||
margin-top: 1em;
|
||||
}
|
||||
li > ol, li > ul {
|
||||
margin-top: 0;
|
||||
}
|
||||
blockquote {
|
||||
margin: 1em 0 1em 1.7em;
|
||||
padding-left: 1em;
|
||||
border-left: 2px solid #e6e6e6;
|
||||
color: #606060;
|
||||
}
|
||||
code {
|
||||
font-family: Menlo, Monaco, Consolas, 'Lucida Console', monospace;
|
||||
font-size: 85%;
|
||||
margin: 0;
|
||||
hyphens: manual;
|
||||
}
|
||||
pre {
|
||||
margin: 1em 0;
|
||||
overflow: auto;
|
||||
}
|
||||
pre code {
|
||||
padding: 0;
|
||||
overflow: visible;
|
||||
overflow-wrap: normal;
|
||||
}
|
||||
.sourceCode {
|
||||
background-color: transparent;
|
||||
overflow: visible;
|
||||
}
|
||||
hr {
|
||||
background-color: #1a1a1a;
|
||||
border: none;
|
||||
height: 1px;
|
||||
margin: 1em 0;
|
||||
}
|
||||
table {
|
||||
margin: 1em 0;
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
overflow-x: auto;
|
||||
display: block;
|
||||
font-variant-numeric: lining-nums tabular-nums;
|
||||
}
|
||||
table caption {
|
||||
margin-bottom: 0.75em;
|
||||
}
|
||||
tbody {
|
||||
margin-top: 0.5em;
|
||||
border-top: 1px solid #1a1a1a;
|
||||
border-bottom: 1px solid #1a1a1a;
|
||||
}
|
||||
th {
|
||||
border-top: 1px solid #1a1a1a;
|
||||
padding: 0.25em 0.5em 0.25em 0.5em;
|
||||
}
|
||||
td {
|
||||
padding: 0.125em 0.5em 0.25em 0.5em;
|
||||
}
|
||||
header {
|
||||
margin-bottom: 4em;
|
||||
text-align: center;
|
||||
}
|
||||
#TOC li {
|
||||
list-style: none;
|
||||
}
|
||||
#TOC ul {
|
||||
padding-left: 1.3em;
|
||||
}
|
||||
#TOC > ul {
|
||||
padding-left: 0;
|
||||
}
|
||||
#TOC a:not(:hover) {
|
||||
text-decoration: none;
|
||||
}
|
||||
code{white-space: pre-wrap;}
|
||||
span.smallcaps{font-variant: small-caps;}
|
||||
div.columns{display: flex; gap: min(4vw, 1.5em);}
|
||||
div.column{flex: auto; overflow-x: auto;}
|
||||
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
|
||||
/* The extra [class] is a hack that increases specificity enough to
|
||||
override a similar rule in reveal.js */
|
||||
ul.task-list[class]{list-style: none;}
|
||||
ul.task-list li input[type="checkbox"] {
|
||||
font-size: inherit;
|
||||
width: 0.8em;
|
||||
margin: 0 0.8em 0.2em -1.6em;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<header id="title-block-header">
|
||||
<h1 class="title">cipherbliss_blog</h1>
|
||||
</header>
|
||||
<h1 id="ça-déménage-1">Ça déménage</h1>
|
||||
<p>Oui ce blog fait bouger les lignes avec son générateur statique fait
|
||||
maison. La peinture est fraîche.</p>
|
||||
</body>
|
||||
</html>
|
||||
<h1 id="tags---étiquettes-de-cipherbliss">Tags - Étiquettes de
|
||||
cipherbliss</h1>
|
||||
<p>Voici les thématiques abordées sur ce site:</p>
|
||||
<p><a href="file:///tag/ai/">AI</a> <a
|
||||
href="file:///tag/archives/">archives</a> <a
|
||||
href="file:///tag/autohebergement/">autohébergement</a> <a
|
||||
href="file:///tag/backup/">backup</a> <a
|
||||
href="file:///tag/blockchain/">blockchain</a> <a
|
||||
href="file:///tag/borg/">borg</a> <a
|
||||
href="file:///tag/caisse/">caisse</a> <a
|
||||
href="file:///tag/comptabilite/">comptabilité</a> <a
|
||||
href="file:///tag/comptes/">comptes</a> <a
|
||||
href="file:///tag/data-visualisation/">data visualisation</a> <a
|
||||
href="file:///tag/design/">design</a> <a
|
||||
href="file:///tag/email/">email</a> <a
|
||||
href="file:///tag/entreprise/">entreprise</a> <a
|
||||
href="file:///tag/entreprise-individuelle/">entreprise individuelle</a>
|
||||
<a href="file:///tag/ethereum/">ethereum</a> <a
|
||||
href="file:///tag/facebook/">facebook</a> <a
|
||||
href="file:///tag/factures/">factures</a> <a
|
||||
href="file:///tag/floss/">FLOSS</a> <a
|
||||
href="file:///tag/fediverse/">fédiverse</a> <a
|
||||
href="file:///tag/gestion-de-projet/">gestion de projet</a> <a
|
||||
href="file:///tag/gestion-du-temps/">gestion du temps</a> <a
|
||||
href="file:///tag/gestionnaire-de-mot-de-passe/">gestionnaire de mot de
|
||||
passe</a> <a href="file:///tag/gimp/">gimp</a> <a
|
||||
href="file:///tag/git/">git</a> <a
|
||||
href="file:///tag/logiciellibre/">logiciellibre</a> <a
|
||||
href="file:///tag/logiciel-libre/">logiciel libre</a> <a
|
||||
href="file:///tag/mastodon/">mastodon</a> <a
|
||||
href="file:///tag/mobilizon/">mobilizon</a> <a
|
||||
href="file:///tag/mot-de-passe/">mot de passe</a> <a
|
||||
href="file:///tag/mysql/">mysql</a> <a
|
||||
href="file:///tag/nextcloud/">nextcloud</a> <a
|
||||
href="file:///tag/open-source/">open source</a> <a
|
||||
href="file:///tag/openstreetmap/">openstreetmap</a> <a
|
||||
href="file:///tag/orgmode/">orgmode</a> <a
|
||||
href="file:///tag/osm/">OSM</a> <a href="file:///tag/photos/">photos</a>
|
||||
<a href="file:///tag/pim/">pim</a> <a
|
||||
href="file:///tag/projet/">projet</a> <a
|
||||
href="file:///tag/prevision/">prévision</a> <a
|
||||
href="file:///tag/python/">python</a> <a
|
||||
href="file:///tag/reseau-social/">réseau social</a> <a
|
||||
href="file:///tag/sauvegardes/">sauvegardes</a> <a
|
||||
href="file:///tag/script/">script</a> <a href="file:///tag/ux/">UX</a>
|
||||
<a href="file:///tag/vie-privee/">vie privée</a></p>
|
||||
|
||||
<p class="after-article">
|
||||
|
||||
</p>
|
||||
</article>
|
||||
</main>
|
||||
<footer class="site-footer has-top-divider">
|
||||
|
@ -263,6 +138,7 @@ maison. La peinture est fraîche.</p>
|
|||
|
||||
|
||||
|
||||
|
||||
<nav>
|
||||
<a href="/">Accueil</a>
|
||||
<a href="https://portfolio.cipherbliss.com">Portfolio</a>
|
|
@ -0,0 +1,189 @@
|
|||
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta property="og:image" content="https://www.cipherbliss.com/wp-content/uploads/2016/12/rond.png">
|
||||
<meta property="og:locale" content="fr_FR">
|
||||
<meta property="og:description" content="Code, nouvelles technologies et entrepreneurariat par B. Lemoine">
|
||||
<meta property="og:url" content="https://www.cipherbliss.com">
|
||||
<meta property="og:site_name" content="Cipher Bliss">
|
||||
<link rel="alternate" type="application/rss+xml" title="Cipher Bliss » Flux" href="https://www.cipherbliss.com/feed/">
|
||||
<link href="/style.css" rel="stylesheet">
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title></title>
|
||||
<meta name="author" content="">
|
||||
<link rel="alternate" type="application/rss+xml" title="Cipher Bliss » Flux"
|
||||
href="https://www.cipherbliss.com/feed/">
|
||||
<meta property="og:title" content="">
|
||||
<meta property="og:locale" content="fr_FR">
|
||||
<!-- Description de la page -->
|
||||
<meta name="description" content="">
|
||||
<meta name="reply-to" content="contact@cipherbliss.com">
|
||||
<link rel="icon" type="image/png" href="https://www.cipherbliss.com/wp-content/uploads/2016/12/rond.png">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="page">
|
||||
<header id="masthead" class="site-header">
|
||||
<div class="header-image" style="background: url(https://www.cipherbliss.com/wp-content/uploads/2016/11/bg.jpg)">
|
||||
<a href="/">
|
||||
<img src="https://www.cipherbliss.com/wp-content/uploads/2016/12/rond.png" class="site-icon img">
|
||||
</a>
|
||||
<h1 class="blog-title">Cipher Bliss</h1>
|
||||
<p class="blog-subtitle">Code, nouvelles technologies et entrepreneurariat par B. Lemoine</p>
|
||||
</div>
|
||||
<nav class="navbar is-fixed-top is-dark" role="navigation" aria-label="main navigation">
|
||||
<div class="navbar-brand">
|
||||
<a class="navbar-item" href="https://www.cipherbliss.com">
|
||||
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="navbarBasicExample" class="navbar-menu">
|
||||
<div class="navbar-start">
|
||||
<a class="navbar-item" href="https://www.cipherbliss.com">
|
||||
<img src="https://www.cipherbliss.com/wp-content/uploads/2016/12/rond.png"
|
||||
class="img-fluid">
|
||||
</a>
|
||||
|
||||
<nav>
|
||||
<a href="/">Accueil</a>
|
||||
<a href="https://portfolio.cipherbliss.com">Portfolio</a>
|
||||
<a href="/feed">Flux RSS</a>
|
||||
<a href="/contact">Contact</a>
|
||||
<a href="/ressources-de-café-vie-privée">Ressources</a>
|
||||
</nav>
|
||||
|
||||
</div>
|
||||
<div class="navbar-end">
|
||||
<div class="navbar-item">
|
||||
<form role="search" method="get" class="search-form" action="/">
|
||||
<label>
|
||||
<input class="search-field" placeholder="Recherche" value="" name="s"
|
||||
type="search">
|
||||
</label>
|
||||
<input class="is-hidden search-submit" value="Rechercher" type="submit">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
<main class="body-wrap boxed-container">
|
||||
<article class="content">
|
||||
|
||||
<header id="title-block-header">
|
||||
<h1 class="title">cipherbliss_blog</h1>
|
||||
</header>
|
||||
<h1
|
||||
id="connaître-la-couleur-des-jours-edf-tempo-en-ligne-de-commande-1">Connaître
|
||||
la couleur des jours EDF Tempo en ligne de commande</h1>
|
||||
<p>EDF expose une API pour connaître les couleurs de jour TEMPO, mais
|
||||
cette api n'est pas bien référencée sur le wouaib, ce sont donc des
|
||||
sites qui n'ont rien à voir qui vous donneront cette info avec moult
|
||||
trackers et pubs de partout.</p>
|
||||
<p>Voici l'url dont vous avez besoin:</p>
|
||||
<p>> <a
|
||||
href="https://api-commerce.edf.fr/commerce/activet/v1/calendrier-jours-effacement?option=TEMPO&dateApplicationBorneInf=%7Bdate_inférieure%7D&dateApplicationBorneSup=%7Bdate_supérieure%7D&identifiantConsommateur=src">https://api-commerce.edf.fr/commerce/activet/v1/calendrier-jours-effacement?option=TEMPO&dateApplicationBorneInf={date_inférieure}&dateApplicationBorneSup={date_supérieure}&identifiantConsommateur=src</a></p>
|
||||
<p>Cette API de commerce EDF ne fonctionne que si vous demandez des
|
||||
dates ayant 365 jours d'écart de différence, et si vous ne mettez pas de
|
||||
zéro précédant le numéro de journée au format année-mois-jour. Autre
|
||||
limitation, la couleur du jour du lendemain vous sera donnée seulement à
|
||||
partir de 11h du matin dans la journée.</p>
|
||||
<p>Fabriquez vous un petit script en python pour aller pêcher ce
|
||||
calendrier, piocher les couleurs des deux derniers jours. Il vous
|
||||
suffira d'un alias de commande pour lancer "python
|
||||
mon<sub>scripttempo</sub>.py" en ayant le dossier où le script est placé
|
||||
dans votre variable d'environnement PATH.</p>
|
||||
<div class="sourceCode" id="cb1"><pre
|
||||
class="sourceCode python"><code class="sourceCode python"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a><span class="im">import</span> requests</span>
|
||||
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a><span class="im">import</span> json</span>
|
||||
<span id="cb1-4"><a href="#cb1-4" aria-hidden="true" tabindex="-1"></a><span class="im">from</span> datetime <span class="im">import</span> datetime, timedelta </span>
|
||||
<span id="cb1-5"><a href="#cb1-5" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb1-6"><a href="#cb1-6" aria-hidden="true" tabindex="-1"></a><span class="kw">def</span> date_il_y_a_un_an(date):</span>
|
||||
<span id="cb1-7"><a href="#cb1-7" aria-hidden="true" tabindex="-1"></a> date_obj <span class="op">=</span> datetime.strptime(date, <span class="st">"%Y-%m-</span><span class="sc">%d</span><span class="st">"</span>)</span>
|
||||
<span id="cb1-8"><a href="#cb1-8" aria-hidden="true" tabindex="-1"></a> date_il_y_a_un_an <span class="op">=</span> date_obj <span class="op">-</span> timedelta(days<span class="op">=</span><span class="dv">365</span>)</span>
|
||||
<span id="cb1-9"><a href="#cb1-9" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> date_il_y_a_un_an.strftime(<span class="st">"%Y-%m-</span><span class="sc">%d</span><span class="st">"</span>)</span>
|
||||
<span id="cb1-10"><a href="#cb1-10" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb1-11"><a href="#cb1-11" aria-hidden="true" tabindex="-1"></a><span class="kw">def</span> get_tempo_for_today_and_tomorrow():</span>
|
||||
<span id="cb1-12"><a href="#cb1-12" aria-hidden="true" tabindex="-1"></a> <span class="co"># Obtenir la date d'aujourd'hui</span></span>
|
||||
<span id="cb1-13"><a href="#cb1-13" aria-hidden="true" tabindex="-1"></a> datenow <span class="op">=</span> datetime.now()</span>
|
||||
<span id="cb1-14"><a href="#cb1-14" aria-hidden="true" tabindex="-1"></a> sup <span class="op">=</span> (datenow <span class="op">+</span> timedelta(days<span class="op">=</span><span class="dv">1</span>))</span>
|
||||
<span id="cb1-15"><a href="#cb1-15" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb1-16"><a href="#cb1-16" aria-hidden="true" tabindex="-1"></a> inf <span class="op">=</span> date_il_y_a_un_an(datenow.strftime(<span class="st">"%Y-%m-</span><span class="sc">%d</span><span class="st">"</span>))</span>
|
||||
<span id="cb1-17"><a href="#cb1-17" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb1-18"><a href="#cb1-18" aria-hidden="true" tabindex="-1"></a> <span class="co"># Obtenir la date de demain</span></span>
|
||||
<span id="cb1-19"><a href="#cb1-19" aria-hidden="true" tabindex="-1"></a> sup <span class="op">=</span> sup.strftime(<span class="st">"%Y-%m-</span><span class="sc">%d</span><span class="st">"</span>)</span>
|
||||
<span id="cb1-20"><a href="#cb1-20" aria-hidden="true" tabindex="-1"></a> sup <span class="op">=</span> sup.replace(<span class="st">"-0"</span>, <span class="st">"-"</span>)</span>
|
||||
<span id="cb1-21"><a href="#cb1-21" aria-hidden="true" tabindex="-1"></a> inf <span class="op">=</span> inf.replace(<span class="st">"-0"</span>, <span class="st">"-"</span>)</span>
|
||||
<span id="cb1-22"><a href="#cb1-22" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb1-23"><a href="#cb1-23" aria-hidden="true" tabindex="-1"></a> <span class="co"># print("Date inf :", inf)</span></span>
|
||||
<span id="cb1-24"><a href="#cb1-24" aria-hidden="true" tabindex="-1"></a> <span class="co"># print("Date sup:", sup)</span></span>
|
||||
<span id="cb1-25"><a href="#cb1-25" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb1-26"><a href="#cb1-26" aria-hidden="true" tabindex="-1"></a> <span class="co"># URL de l'API d'EDF pour récupérer les informations sur les couleurs des jours de l'offre Tempo</span></span>
|
||||
<span id="cb1-27"><a href="#cb1-27" aria-hidden="true" tabindex="-1"></a> url <span class="op">=</span> <span class="ss">f"https://api-commerce.edf.fr/commerce/activet/v1/calendrier-jours-effacement?option=TEMPO&dateApplicationBorneInf=</span><span class="sc">{</span>inf<span class="sc">}</span><span class="ss">&dateApplicationBorneSup=</span><span class="sc">{</span>sup<span class="sc">}</span><span class="ss">&identifiantConsommateur=src"</span></span>
|
||||
<span id="cb1-28"><a href="#cb1-28" aria-hidden="true" tabindex="-1"></a> <span class="bu">print</span>(url)</span>
|
||||
<span id="cb1-29"><a href="#cb1-29" aria-hidden="true" tabindex="-1"></a> <span class="co"># Effectuer la requête HTTP et récupérer la réponse JSON</span></span>
|
||||
<span id="cb1-30"><a href="#cb1-30" aria-hidden="true" tabindex="-1"></a> response <span class="op">=</span> requests.get(url)</span>
|
||||
<span id="cb1-31"><a href="#cb1-31" aria-hidden="true" tabindex="-1"></a> data <span class="op">=</span> json.loads(response.text)</span>
|
||||
<span id="cb1-32"><a href="#cb1-32" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb1-33"><a href="#cb1-33" aria-hidden="true" tabindex="-1"></a> <span class="co"># Récupérer la liste des couleurs des jours pour les 30 prochains jours</span></span>
|
||||
<span id="cb1-34"><a href="#cb1-34" aria-hidden="true" tabindex="-1"></a> calendrier <span class="op">=</span> data[<span class="st">"content"</span>][<span class="st">"options"</span>][<span class="dv">0</span>][<span class="st">"calendrier"</span>]</span>
|
||||
<span id="cb1-35"><a href="#cb1-35" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb1-36"><a href="#cb1-36" aria-hidden="true" tabindex="-1"></a> texte_retour<span class="op">=</span><span class="st">""</span></span>
|
||||
<span id="cb1-37"><a href="#cb1-37" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb1-38"><a href="#cb1-38" aria-hidden="true" tabindex="-1"></a> <span class="co"># # Afficher les couleurs des jours pour le prochain jour</span></span>
|
||||
<span id="cb1-39"><a href="#cb1-39" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> jour <span class="kw">in</span> calendrier[<span class="op">-</span><span class="dv">2</span>:]:</span>
|
||||
<span id="cb1-40"><a href="#cb1-40" aria-hidden="true" tabindex="-1"></a> date <span class="op">=</span> jour[<span class="st">"dateApplication"</span>]</span>
|
||||
<span id="cb1-41"><a href="#cb1-41" aria-hidden="true" tabindex="-1"></a> code_couleur <span class="op">=</span> jour[<span class="st">"statut"</span>]</span>
|
||||
<span id="cb1-42"><a href="#cb1-42" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> code_couleur <span class="op">==</span> <span class="st">"TEMPO_BLEU"</span>:</span>
|
||||
<span id="cb1-43"><a href="#cb1-43" aria-hidden="true" tabindex="-1"></a> texte_retour<span class="op">+=</span>(<span class="ss">f"</span><span class="ch">\033</span><span class="ss">[34m</span><span class="sc">{</span>date<span class="sc">}</span><span class="ss">: journée </span><span class="sc">{</span>code_couleur<span class="sc">}</span><span class="ch">\033</span><span class="ss">[0m</span><span class="ch">\n</span><span class="ss">"</span>)</span>
|
||||
<span id="cb1-44"><a href="#cb1-44" aria-hidden="true" tabindex="-1"></a> <span class="cf">elif</span> code_couleur <span class="op">==</span> <span class="st">"TEMPO_BLANC"</span>:</span>
|
||||
<span id="cb1-45"><a href="#cb1-45" aria-hidden="true" tabindex="-1"></a> texte_retour<span class="op">+=</span>(<span class="ss">f"</span><span class="ch">\033</span><span class="ss">[37m</span><span class="sc">{</span>date<span class="sc">}</span><span class="ss">: journée </span><span class="sc">{</span>code_couleur<span class="sc">}</span><span class="ch">\033</span><span class="ss">[0m</span><span class="ch">\n</span><span class="ss">"</span>)</span>
|
||||
<span id="cb1-46"><a href="#cb1-46" aria-hidden="true" tabindex="-1"></a> <span class="cf">elif</span> code_couleur <span class="op">==</span> <span class="st">"TEMPO_ROUGE"</span>:</span>
|
||||
<span id="cb1-47"><a href="#cb1-47" aria-hidden="true" tabindex="-1"></a> texte_retour<span class="op">+=</span>(<span class="ss">f"</span><span class="ch">\033</span><span class="ss">[31m</span><span class="sc">{</span>date<span class="sc">}</span><span class="ss">: journée </span><span class="sc">{</span>code_couleur<span class="sc">}</span><span class="ch">\033</span><span class="ss">[0m</span><span class="ch">\n</span><span class="ss">"</span>)</span>
|
||||
<span id="cb1-48"><a href="#cb1-48" aria-hidden="true" tabindex="-1"></a> <span class="cf">else</span>:</span>
|
||||
<span id="cb1-49"><a href="#cb1-49" aria-hidden="true" tabindex="-1"></a> texte_retour<span class="op">+=</span>(<span class="ss">f"</span><span class="sc">{</span>date<span class="sc">}</span><span class="ss">: journée </span><span class="sc">{</span>code_couleur<span class="sc">}</span><span class="ss">"</span>)</span>
|
||||
<span id="cb1-50"><a href="#cb1-50" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb1-51"><a href="#cb1-51" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> texte_retour</span>
|
||||
<span id="cb1-52"><a href="#cb1-52" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb1-53"><a href="#cb1-53" aria-hidden="true" tabindex="-1"></a>texte <span class="op">=</span> get_tempo_for_today_and_tomorrow()</span>
|
||||
<span id="cb1-54"><a href="#cb1-54" aria-hidden="true" tabindex="-1"></a><span class="bu">print</span>(texte)</span>
|
||||
<span id="cb1-55"><a href="#cb1-55" aria-hidden="true" tabindex="-1"></a></span></code></pre></div>
|
||||
<p>Bonne réduction des pointes de conso!</p>
|
||||
|
||||
<p class="after-article">
|
||||
|
||||
</p>
|
||||
</article>
|
||||
</main>
|
||||
<footer class="site-footer has-top-divider">
|
||||
<div class="container">
|
||||
<div class="site-footer-inner">
|
||||
|
||||
|
||||
|
||||
|
||||
<nav>
|
||||
<a href="/">Accueil</a>
|
||||
<a href="https://portfolio.cipherbliss.com">Portfolio</a>
|
||||
<a href="/feed">Flux RSS</a>
|
||||
<a href="/contact">Contact</a>
|
||||
<a href="/ressources-de-café-vie-privée">Ressources</a>
|
||||
</nav>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
</body>
|
||||
<!-- généré avec orgmode-to-gemini-blog par Tykayn -->
|
||||
</html>
|
||||
|
|
@ -10,12 +10,9 @@
|
|||
<meta property="og:description" content="Code, nouvelles technologies et entrepreneurariat par B. Lemoine">
|
||||
<meta property="og:url" content="https://www.cipherbliss.com">
|
||||
<meta property="og:site_name" content="Cipher Bliss">
|
||||
<link rel="alternate" type="application/rss+xml" title="Cipher Bliss » Flux"
|
||||
href="https://www.cipherbliss.com/feed/">
|
||||
<link rel="alternate" type="application/rss+xml" title="Cipher Bliss » Flux" href="https://www.cipherbliss.com/feed/">
|
||||
<link href="/style.css" rel="stylesheet">
|
||||
|
||||
<meta charset="utf-8">
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title></title>
|
||||
<meta name="author" content="">
|
||||
|
@ -79,10 +76,13 @@
|
|||
</header>
|
||||
<main class="body-wrap boxed-container">
|
||||
<article class="content">
|
||||
<html><head><title>cipherbliss_blog</title><link rel="stylesheet" href="/style.css"></link></head><body>
|
||||
|
||||
|
||||
|
||||
<h1>Navigation</h1><br><a href=/index.html>Index</a><br><a href=/contact.html>Contact</a><h1>Articles en Français</h1><br><a href=/2024/20241108151758-ça-déménage>2024 20241108151758 ça déménage</a></article></body></html>
|
||||
<h1>Navigation</h1><br><a href=/index.html>Index</a><br><a href=/contact.html>Contact</a><br><a href=/2024/20241109231603-connaître-la-couleur-des-jours-edf-tempo-en-ligne-de-commande>2024 20241109231603 connaître la couleur des jours edf tempo en ligne de commande</a><br><a href=/2024/20241109231110-tags>2024 20241109231110 tags</a><br><a href=/2024/2024-11-03-création-d'un-blog-gemini>2024 Création d'un blog gemini</a></article>
|
||||
<p class="after-article">
|
||||
|
||||
</p>
|
||||
</article>
|
||||
</main>
|
||||
<footer class="site-footer has-top-divider">
|
||||
|
@ -91,6 +91,7 @@
|
|||
|
||||
|
||||
|
||||
|
||||
<nav>
|
||||
<a href="/">Accueil</a>
|
||||
<a href="https://portfolio.cipherbliss.com">Portfolio</a>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue