Merge branch 'master' of ssh://forge.april.org:222/siteweb/libreavous

This commit is contained in:
chankalan 2021-11-08 10:59:35 +01:00
commit 0ad96cb780
6 changed files with 87 additions and 283 deletions

View File

@ -15,8 +15,12 @@ function action_importer_emission_dist($arg = null) {
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
}
$id_article = $arg;
$texteReponse = libreavous_import_run($id_article);
ajax_retour($texteReponse, false);
}
function libreavous_import_run($id_article) {
$existant = sql_select("podcast_code","spip_articles","id_article=".$id_article);
if ($existant and sql_count($existant)>0) {
$r = sql_fetch($existant);
@ -34,10 +38,15 @@ function action_importer_emission_dist($arg = null) {
$ogg_size = "";
$mp3_size = "";
try {
$jsonContents = file_get_contents("https://forge.april.org/libreavous/lav-outils/raw/branch/master/podcasts/config/lav-".$code_emission.".json");
$json = json_decode($jsonContents, true);
if (!$json) {
$erreurs[] = "JSON incorrect : https://forge.april.org/libreavous/lav-outils/raw/branch/master/podcasts/config/lav-".$code_emission.".json";
$jsonUrl = "https://forge.april.org/libreavous/lav-outils/raw/branch/master/podcasts/config/lav-".$code_emission.".json";
$jsonContents = file_get_contents($jsonUrl);
if ($jsonContents === false) {
$erreurs[] = "Erreur d'accès au fichier JSON :".$jsonUrl;
} else {
$json = json_decode($jsonContents, true);
if (!$json) {
$erreurs[] = "JSON incorrect :".$jsonUrl;
}
}
} catch (Exception $e) {
$erreurs[] = $e->getMessage();
@ -171,8 +180,7 @@ function action_importer_emission_dist($arg = null) {
}
$texteReponse .= "</ul>";
}
// return $texteReponse;
ajax_retour($texteReponse, false);
return $texteReponse;
}
function libreavous_import_getDuration($code_emission, $code_sujet) {

View File

@ -50,6 +50,27 @@ function libreavous_duree($start,$end) {
return $duree;
}
// calculer la durée d'un chapitre
// $start et $end sous form hh:mm:ss
// renvoi dans un format hh:mm:ss (pour le champ itunes:duration
function libreavous_duree_podcast($start,$end) {
$timestart = new DateTime($start);
$timeend = new DateTime($end);
$timeduree = $timestart->diff($timeend);
$duree = $timeduree->format('%H:%I:%S');
return $duree;
}
// retirer les microseconds d'une durée
function libreavous_remove_microseconds ($duration) {
$durationobject = new DateTime($duration);
$newduration = $durationobject->format('H:i:s');
return $newduration;
}
// retirer l'heure si 0 h dans la duree
function libreavous_sanszeroh($chaine) {
$chaine = str_replace('0 h ','',$chaine);
@ -63,233 +84,3 @@ function libreavous_aveczerod($chaine) {
}
return $chaineaveczero;
}
/***************************************
* Importation du JSON des chapitres
* et des autres informations (durée, taille, etc)
***************************************/
function balise_LIBREAVOUS_IMPORT($p) {
$id_article = "''";
if (($v = interprete_argument_balise(1,$p))!==NULL){
$id_article = $v;
}
$p->code = "libreavous_import_run($id_article)";
return $p;
}
function libreavous_import_run($id_article) {
$id_article = intval($id_article);
$existant = sql_select("podcast_code,titre","spip_articles","id_article=".$id_article);
if ($existant and sql_count($existant)>0) {
$r = sql_fetch($existant);
$code_emission = $r["podcast_code"];
$titre_emission = $r["titre"];
if(strlen($code_emission) == 0) {
return "Le code de l'émission n'est pas renseigné";
}
} else {
return "Émission inconnue = ".$id_article;
}
$erreurs = array();
$logs = array();
$json = false;
$podcast_duree = "";
$ogg_size = "";
$mp3_size = "";
try {
$jsonContents = file_get_contents("https://forge.april.org/libreavous/lav-outils/raw/branch/master/podcasts/config/lav-".$code_emission.".json");
$json = json_decode($jsonContents, true);
if (!$json) {
$erreurs[] = "JSON incorrect : https://forge.april.org/libreavous/lav-outils/raw/branch/master/podcasts/config/lav-".$code_emission.".json";
}
} catch (Exception $e) {
$erreurs[] = $e->getMessage();
}
try {
$podcast_duree = libreavous_import_getDuration($code_emission, null);
} catch (Exception $e) {
$erreurs[] = $e->getMessage();
}
try {
$ogg_size = libreavous_import_getSize($code_emission, null, "ogg");
} catch (Exception $e) {
$erreurs[] = $e->getMessage();
}
try {
$mp3_size = libreavous_import_getSize($code_emission, null, "mp3");
} catch (Exception $e) {
$erreurs[] = $e->getMessage();
}
$chapitres = array();
if (array_key_exists("chapters", $json)) {
$chapters = $json["chapters"];
$count = count($chapters);
if ($count > 0) {
$duree_sujetlong = 30 * 60;
$sujetlongIndex = -1;
for($i = 0; $i < $count; $i++) {
$chapter = $chapters[$i];
$chapter["type"] = "";
$debutSecondes = libreavous_import_toSeconde($chapter["start_timestamp"]);
$finSecondes = libreavous_import_toSeconde($chapter["end_timestamp"]);
if ($debutSecondes === false) {
$erreurs[] = "start_timestamp incorrect : ".$chapter["start_timestamp"];
} else if ($finSecondes === false) {
$erreurs[] = "end_timestamp incorrect : ".$chapter["end_timestamp"];
} else if ($debutSecondes == $finSecondes) {
$erreurs[] = "start_timestamp et end_timestamp identiques : ".$chapter["end_timestamp"];
} else {
$duree = $finSecondes - $debutSecondes;
if ($duree > $duree_sujetlong) {
$sujetlongIndex = $i;
$duree_sujetlong = $duree;
}
$chapter["duree"] = $duree;
}
if (!array_key_exists("chapter_title", $chapter)) {
$chapter["chapter_title"] = "";
$erreurs[] = "Titre de chapitre manquant";
}
$chapter["ogg_size"] = "";
$chapter["mp3_size"] = "";
if (!array_key_exists("short_chapter_name", $chapter)) {
$chapter["short_chapter_name"] = "";
$erreurs[] = "Nom de fichier manquant";
} else {
try {
$chapter["ogg_size"] = libreavous_import_getSize($code_emission, $chapter["short_chapter_name"], "ogg");
} catch (Exception $e) {
$erreurs[] = $e->getMessage();
}
try {
$chapter["mp3_size"] = libreavous_import_getSize($code_emission, $chapter["short_chapter_name"], "mp3");
} catch (Exception $e) {
$erreurs[] = $e->getMessage();
}
}
$chapter["chronique"]="";
$chapitres[] = $chapter;
}
for($i = 0; $i < count($chapitres); $i++) {
if ($i == $sujetlongIndex) {
$chapitres[$i]["type"] = "SL";
} else {
$array = libreavous_import_checkType($chapitres[$i]);
$chapitres[$i]["type"] = $array[0];
if (count($array) > 1) {
$chapitres[$i]["chronique"] = $array[1];
}
}
}
}
}
$emissionArray = array(
'podcast_duree' =>$podcast_duree,
'podcast_mp3' => $mp3_size,
'podcast_ogg' => $ogg_size
);
$logs[] = sql_updateq("spip_articles", $emissionArray, "id_article=".$id_article,'','',false);
sql_updateq("spip_articles", $emissionArray, "id_article=".$id_article);
foreach ($chapitres as $chapitre) {
$code_chapitre = $chapitre["short_chapter_name"];
$chapitreArray = array(
'titre' => $chapitre["chapter_title"],
'code' => $code_chapitre,
'id_article' => $id_article,
'code_fichier' => $chapitre["short_chapter_name"],
'code_podcast' => $code_emission,
'debut' => $chapitre["start_timestamp"],
'fin' => $chapitre["end_timestamp"],
'type_sujet' => $chapitre["type"],
'chronique' => $chapitre["chronique"],
'mp3' => $chapitre["mp3_size"],
'ogg' => $chapitre["ogg_size"]
);
$chapitreExistant = sql_select("id_chapitre","spip_chapitres",array("id_article=".$id_article, "code=".sql_quote($code_chapitre)));
if ($chapitreExistant and sql_count($chapitreExistant)>0) {
$r = sql_fetch($chapitreExistant);
$id_chapitre = $r["id_chapitre"];
$logs[] = sql_updateq("spip_chapitres", $chapitreArray, "id_chapitre=".$id_chapitre,'','',false);
sql_updateq("spip_chapitres", $chapitreArray, "id_chapitre=".$id_chapitre);
} else {
$logs[] = sql_insertq("spip_chapitres", $chapitreArray, '', '', false);
$id_nouveau_chapitre = sql_insertq("spip_chapitres", $chapitreArray);
}
}
$texteReponse = "<p>Émission traitée : ". $code_emission." / ".$titre_emission."</p>";
if (count($erreurs) > 0) {
$texteReponse .= "<h2>Erreurs</h2>";
$texteReponse .= "<ul>";
foreach ($erreurs as $erreur) {
$texteReponse .= "<li><p>".$erreur."</p></li>";
}
$texteReponse .= "</ul>";
}
if (count($logs) > 0) {
$texteReponse .= "<h2>Requêtes effectuées</h2>";
$texteReponse .= "<ul>";
foreach ($logs as $log) {
$texteReponse .= "<li><p>".$log."</p></li>";
}
$texteReponse .= "</ul>";
}
return $texteReponse;
}
function libreavous_import_getDuration($code_emission, $code_sujet) {
$fileName = "libre-a-vous-".$code_emission;
if ($code_sujet) {
$fileName .= "-".$code_sujet;
}
$fileName .= ".ogg.duration";
return libreavous_import_getMediaFileContent($code_emission, $fileName);
}
function libreavous_import_getSize($code_emission, $code_sujet, $extension) {
$fileName = "libre-a-vous-".$code_emission;
if ($code_sujet) {
$fileName .= "-".$code_sujet;
}
$fileName .= ".".$extension.".size";
return libreavous_import_getMediaFileContent($code_emission, $fileName);
}
function libreavous_import_getMediaFileContent($code, $fileName) {
$url = "https://media.april.org/audio/radio-cause-commune/libre-a-vous/emissions/".$code."/".$fileName;
$contents = file_get_contents($url);
$resultat = trim($contents);
if (strlen($resultat) == 0) {
throw new Exception("Fichier manquant ou vide : ".$url);
}
return $resultat;
}
function libreavous_import_toSeconde($time) {
$test = preg_match('/^(\d+):(\d+):(\d+)/', $time, $matches);
if ($test !== false) {
return ($matches[1] * 60 * 60) + ($matches[2] * 60) + ($matches[3]);
} else {
return false;
}
}
function libreavous_import_checkType($chapitre) {
$code = $chapitre["short_chapter_name"];
$result = array();
if ($code == "annonces") {
$result[] = "AN";
} else {
$idx = strpos($code, "chronique-");
if ($idx === 0) {
$result[] = "CH";
$nom_chronique = substr($code, strlen("chronique-"));
$result[] = $nom_chronique;
} else {
$result[] = "SC";
}
}
return $result;
}

View File

@ -0,0 +1,27 @@
[(#HTTP_HEADER{Content-type: text/xml[; charset=(#CHARSET)]})]<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:admin="http://webns.net/mvcb/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0" xml:base="https://www.libreavous.org/rss">
<channel>
<title>Libre à vous ! April et Cause Commune</title>
<link>#URL_SITE_SPIP/</link>
<description><p>Chaque mardi de 15 h 30 à 17 h 00, l'April, l'association de promotion et de défense du logiciel libre, propose une émission de radio d'explications et d'échanges concernant les dossiers politiques et juridiques que l'association traite et les actions qu'elle mène : <a href="https://april.org/libre-a-vous">Libre à vous !</a>. Une partie de l'émission est également consacrée aux actualités et actions de type sensibilisation. L'émission est diffusée sur radio Cause Commune sur la bande FM en Île-de-France (93.1) et <a href="https://cause-commune.fm">sur le site web de la radio</a>.</p><p>Donner à chacun et chacune, de manière simple et accessible les clefs pour comprendre les enjeux mais aussi proposer des moyens d'action, tel est l'objectif de l'émission.</p></description>
<generator>SPIP - www.spip.net</generator>
<language>fr</language>
<image>
<title>Libre à vous !</title>
<url>https://april.org/files/libre-a-vous/banniere-libre-a-vous-flux-rss-1400x1400.png</url>
<link>https://april.org/libre-a-vous</link>
</image>
<BOUCLE_10recents(ARTICLES) {lang ?}{branche ?}{id_mot ?}{id_auteur ?}{id_rubrique IN 8} {statut=publie} {par date}{inverse}{unique}>
<INCLURE{fond=inc-rss-item, id_article} />
</BOUCLE_10recents>
<BOUCLE_tres_recents(ARTICLES){lang ?}{branche ?}{id_mot ?}{id_auteur ?}{id_rubrique IN 8} {statut=publie} {par date}{inverse}{age<3}{unique}>
<INCLURE{fond=inc-rss-item, id_article} />
</BOUCLE_tres_recents>
</channel>
</rss>

View File

@ -1,8 +0,0 @@
<html lang="fr">
<head>
<title>Import</title>
</head>
<body>
#LIBREAVOUS_IMPORT{#ENV{id_article}}
</body>
</html>

View File

@ -2,36 +2,15 @@
<item>
<title>[(#TITRE|attribut_html|texte_backend)]</title>
<link>[(#URL_ARTICLE|url_absolue)]</link>
[(#REM)
[<pubDate>(#DRUPAL_PUBDATE)</pubDate>]
]
[(#DRUPAL_PUBDATE|choixsivide{<pubDate>[(#DATE|date_822)]</pubDate>,<pubDate>#DRUPAL_PUBDATE</pubDate>})]
[(#DRUPAL_GUID|choixsivide{<guid isPermaLink="false">[(#URL_ARTICLE|url_absolue)]</guid>,<guid isPermaLink="false">#DRUPAL_GUID</guid>})]
[(#PODCAST_DUREE|choixsivide{"",<enclosure length="0" type="audio/ogg" url="https://media.april.org/audio/radio-cause-commune/libre-a-vous/emissions/[(#PODCAST_CODE)]/libre-a-vous-[(#PODCAST_CODE)].ogg"/>
<enclosure length="0" type="audio/mpeg" url="https://media.april.org/audio/radio-cause-commune/libre-a-vous/emissions/[(#PODCAST_CODE)]/libre-a-vous-[(#PODCAST_CODE)].mp3"/>})]
[(#REM)
Le bloc qui suit diffuse les mots-cles a la mode RSS
]<BOUCLE_mots_rss(MOTS){id_article}>
[<dc:subject>(#TITRE|texte_backend)</dc:subject>]</BOUCLE_mots_rss>
<description>[(#PODCAST_SOMMAIRE|propre|texte_backend)] <p>Pour retrouver toutes les informations concernant cette émission ainsi que les références citées,<a href="[(#URL_ARTICLE|url_absolue)]">rendez-vous sur la page dédiée</a></p>
[(#REM)
Le bloc qui suit diffuse la rubrique et les mots-cles
sous forme de "microformats"
]<BOUCLE_rubrique_mf(RUBRIQUES){id_rubrique}>-
[&lt;a href="[(#URL_RUBRIQUE|url_absolue)]" rel="directory"&gt;(#TITRE|supprimer_tags|texte_backend)&lt;/a&gt;]
</BOUCLE_rubrique_mf><B_mots_mf>
/ <BOUCLE_mots_mf(MOTS){id_article}{", "}>
[&lt;a href="[(#URL_MOT|url_absolue)]" rel="tag"&gt;(#TITRE|texte_backend)&lt;/a&gt;]</BOUCLE_mots_mf>
</description>
[(#DRUPAL_GUID|non)[(#PODCAST_DUREE|oui)<guid isPermaLink="false">[(#URL_ARTICLE|url_absolue)]</guid>]]
[(#DRUPAL_GUID|oui)<guid isPermaLink="false">#DRUPAL_GUID</guid>]
[(#PODCAST_DUREE|choixsivide{"",<enclosure url="https://media.april.org/audio/radio-cause-commune/libre-a-vous/emissions/[(#PODCAST_CODE)]/libre-a-vous-[(#PODCAST_CODE)].ogg" length="0" type="audio/ogg"/>
<enclosure url="https://media.april.org/audio/radio-cause-commune/libre-a-vous/emissions/[(#PODCAST_CODE)]/libre-a-vous-[(#PODCAST_CODE)].mp3" length="0" type="audio/mpeg"/>
<itunes:duration>[(#PODCAST_DUREE|libreavous_remove_microseconds)]</itunes:duration>})]
[(#SET{debut_emission,[(#DATE|annee)-][(#DATE|mois)-][(#DATE|jour|libreavous_aveczerod) ]15:30:00})]
[(#ENV{date}|<={#GET{debut_emission}}|oui)<description>[(#DESCRIPTION_RSS|propre|texte_backend)] [(#PODCAST_SOMMAIRE|propre|texte_backend)]]
[(#ENV{date}|>{#GET{debut_emission}}|oui)<description>[(#PODCAST_DUREE|oui)<p>Les podcasts de l'émission sont disponibles.</p>][(#DESCRIPTION_RSS|propre|texte_backend)][(#PODCAST_SOMMAIRE|propre|texte_backend)] <p>Pour retrouver toutes les informations concernant cette émission ainsi que les références citées,<a href="[(#URL_ARTICLE|url_absolue)]">rendez-vous sur la page dédiée</a>.</p>]</description>
[(#REM)
Le bloc qui suit diffuse aussi le texte integral de l'article,
@ -39,8 +18,14 @@
Fonction desactivable depuis les reglages du site.
][
(#CONFIG{syndication_integrale}|=={oui}|?{' ',''})<content:encoded>[(#LOGO_ARTICLE{right}|image_reduire{150,150}|texte_backend)
][&lt;div class='rss_chapo'&gt;(#PODCAST_SOMMAIRE|propre|texte_backend)&lt;p&gt;Pour retrouver toutes les informations concernant l'émission, &lt;a href="[(#URL_ARTICLE|url_absolue)]"&gt;rendez-vous sur la page dédiée&lt;/a&gt;&lt;/p&gt;.&lt;/div&gt;
][&lt;div class='rss_texte'&gt;(#TEXTE|
]
[(#SET{debut_emission,[(#DATE|annee)-][(#DATE|mois)-][(#DATE|jour|libreavous_aveczerod) ]15:30:00})]
[(#ENV{date}|>{#GET{debut_emission}}|oui)
[&lt;div class='rss_chapo'&gt;[(#PODCAST_DUREE|oui)&lt;p&gt;Les podcasts de l'émission sont disponibles.&lt;/p&gt;][(#DESCRIPTION_RSS|propre|texte_backend)](#PODCAST_SOMMAIRE|propre|texte_backend)&lt;p&gt;Pour retrouver toutes les informations concernant l'émission, &lt;a href="[(#URL_ARTICLE|url_absolue)]"&gt;rendez-vous sur la page dédiée&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
]
]
[&lt;div class='rss_texte'&gt;(#TEXTE|
image_reduire{500,0}|texte_backend)&lt;/div&gt;
][&lt;div class="hyperlien"&gt;<:voir_en_ligne|html2unicode:> : &lt;a href="(#URL_SITE)" class="spip_out"&gt;[(#NOM_SITE|sinon{[(#URL_SITE|couper{80})]}|texte_backend)]&lt;/a&gt;&lt;/div&gt;
][&lt;hr /&gt;
@ -66,8 +51,9 @@
<link>[(#URL_ARTICLE|url_absolue)]</link>
[(#DRUPAL_PUBDATE|choixsivide{<pubDate>[(#DATE|date_822)]</pubDate>,<pubDate>#DRUPAL_PUBDATE</pubDate>})]
[(#DRUPAL_GUID|choixsivide{<guid isPermaLink="false">[(#URL_CHAPITRE|url_absolue)]</guid>,<guid isPermaLink="false">#DRUPAL_GUID</guid>})]
<enclosure length="0" type="audio/ogg" url="https://media.april.org/audio/radio-cause-commune/libre-a-vous/emissions/[(#CODE_PODCAST)]/libre-a-vous-[(#CODE_PODCAST)]-[(#CODE_FICHIER)].ogg"/>
<enclosure length="0" type="audio/mpeg" url="https://media.april.org/audio/radio-cause-commune/libre-a-vous/emissions/[(#CODE_PODCAST)]/libre-a-vous-[(#CODE_PODCAST)]-[(#CODE_FICHIER)].mp3"/>
<enclosure url="https://media.april.org/audio/radio-cause-commune/libre-a-vous/emissions/[(#CODE_PODCAST)]/libre-a-vous-[(#CODE_PODCAST)]-[(#CODE_FICHIER)].ogg" length="0" type="audio/ogg"/>
<enclosure url="https://media.april.org/audio/radio-cause-commune/libre-a-vous/emissions/[(#CODE_PODCAST)]/libre-a-vous-[(#CODE_PODCAST)]-[(#CODE_FICHIER)].mp3" length="0" type="audio/mpeg"/>
[(#DEBUT|oui)[(#FIN|oui)<itunes:duration>[(#DEBUT|libreavous_duree_podcast{#FIN})]</itunes:duration>]]
<description>[(#DESCRIPTION_RSS|propre|texte_backend)] [(#REFERENCES_SUJET|choixsivide{"",Les références : [(#REFERENCES_SUJET|propre|texte_backend)]})]
[(#REM)
Le bloc qui suit diffuse la rubrique et les mots-cles

View File

@ -12,22 +12,22 @@
<itunes:summary>Libre à vous ! L'émission de l'April, l'association de promotion et de défense du logiciel libre, sur radio Cause Commune. Prenez le contrôle de vos libertés informatiques, découvrez les enjeux et lactualité du Libre.</itunes:summary>
<itunes:owner>
<itunes:name>April</itunes:name>
<itunes:email>contact-libreavous@april.org</itunes:email>
<itunes:email>bonjour@libreavous.org</itunes:email>
</itunes:owner>
<itunes:explicit>no</itunes:explicit>
<itunes:image href="https://media.april.org/audio/radio-cause-commune/libre-a-vous/visuels/banniere-libre-a-vous-flux-rss-3000x3000.png"/>
<language>fr</language>
<image>
<title>Libre à vous !</title>
<title>Libre à vous ! April et Cause Commune</title>
<url>https://april.org/files/libre-a-vous/banniere-libre-a-vous-flux-rss-1400x1400.png</url>
<link>https://april.org/libre-a-vous</link>
<link>#URL_SITE_SPIP/</link>
</image>
<BOUCLE_10recents(ARTICLES) {lang ?}{branche ?}{id_mot ?}{id_auteur ?} {par date}{inverse}{unique}>
<BOUCLE_10recents(ARTICLES) {lang ?}{branche ?}{id_mot ?}{id_auteur ?} {statut=publie} {par date}{inverse}{unique}>
<INCLURE{fond=inc-rss-item, id_article} />
</BOUCLE_10recents>
<BOUCLE_tres_recents(ARTICLES){lang ?}{branche ?}{id_mot ?}{id_auteur ?} {par date}{inverse}{age<3}{unique}>
<BOUCLE_tres_recents(ARTICLES){lang ?}{branche ?}{id_mot ?}{id_auteur ?} {statut=publie} {par date}{inverse}{age<3}{unique}>
<INCLURE{fond=inc-rss-item, id_article} />
</BOUCLE_tres_recents>