commit ad82598214a8a338d0f4c65a15bfdecc3e8c2d95 Author: quenousimporte Date: Thu May 23 13:59:38 2024 +0200 initial commit diff --git a/1F4F0_color.png b/1F4F0_color.png new file mode 100644 index 0000000..94f15d2 Binary files /dev/null and b/1F4F0_color.png differ diff --git a/daily.js b/daily.js new file mode 100644 index 0000000..eca46f9 --- /dev/null +++ b/daily.js @@ -0,0 +1,37 @@ +javascript: (function() +{ + var map = { + "www.mediapart.fr": "https://www.mediapart.fr/articles/feed", + "www.lemonde.fr": "https://www.lemonde.fr/rss/une.xml" + }; + + var host = window.location.host; + var rssurl = map[window.location.host]; + + if (!rssurl) + { + alert("unknown newspaper"); + } + else + { + fetch(rssurl) + .then(response => response.text()) + .then(xmlstring => { + const parser = new DOMParser(); + const xmldoc = parser.parseFromString(xmlstring, 'text/xml'); + var today = new Date; + + items = xmldoc.evaluate("/rss/channel/item", xmldoc); + while ((item = items.iterateNext())) + { + var itemdate = new Date(item.getElementsByTagName("pubDate")[0].textContent); + var itemlink = item.getElementsByTagName("link")[0].textContent; + if (itemdate.toDateString() == today.toDateString()) + { + console.log("will open " + itemlink); + window.open(itemlink, "_blank"); + } + } + }); + } +})(); \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..451cb90 --- /dev/null +++ b/index.html @@ -0,0 +1,61 @@ + + + + + + Revue de presse + + + + + +

Revue de presse

+

Quotidiens

+

+ Mediapart + - Edition du jour en version texte
+ Les jours
+ Reporterre
+ Basta!
+ Rebellyon
+ Le Monde + - Journal + - Europress +

+

Investigation

+

+ Disclose +

+

Analyse

+

+ Ballast
+ Le Monde diplomatique
+ Politis + - Lire en ligne
+ Alternatives économiques
+ CQFD
+ Lundi matin
+ Terrestres
+ The conversation +

+

International

+

+ The Guardian
+ The New York Times
+ The intercept
+ +

+

Ressources

+

+ Revue de presse Basta
+ Europresse + - Publications PDF
+ Cairn + - Écologie & politique +

+ + diff --git a/mediapart.php b/mediapart.php new file mode 100644 index 0000000..19b9fe3 --- /dev/null +++ b/mediapart.php @@ -0,0 +1,133 @@ +textContent; + $content = str_replace('Partager sur Facebook', '', $content); + $content = str_replace('Partager sur X (ex Twitter)', '', $content); + + $content = str_replace('Lire + tard', '', $content); + $content = str_replace('Offrir l’article', '', $content); + $content = str_replace(' PDF', '', $content); + $content = str_replace('Cette fonctionnalité est actuellement en maintenance.La génération de PDF reste disponible via la fonctionnalité «Imprimer».', '', $content); + + $content = str_replace("Fermer\n", '', $content); + $content = str_replace("Recommander\n", '', $content); + $content = str_replace("Commenter\n", '', $content); + + + $content = str_replace(' ', '', $content); + $content = str_replace("\n", "\n\n", $content); + for ($i = 0; $i < 15; $i++) + { + $content = str_replace("\n\n\n", "\n\n", $content); + } + + return $content; +} + +$sessionid = 'value of cookie MPSESSID'; +$feedurl = 'https://www.mediapart.fr/articles/feed'; +$opts = [ + 'http' => [ + 'method' => "GET", + 'header' => "Accept-language: en\nCookie: MPSESSID=" . $sessionid, + ] +]; +$context = stream_context_create($opts); + +// load feeds +$feed = file_get_contents($feedurl); +$xml = new SimpleXMLElement($feed); +$items = $xml->xpath("/rss/channel/item"); + +setlocale(LC_ALL, 'fr_FR.UTF8', 'fr_FR','fr','fr','fra','fr_FR@euro'); +$localedate = strftime("%A %d %B %Y"); + +$header = "Mediapart - " . $localedate . "\n\nSommaire:\n"; +$result = ''; + +foreach ($items as $item) +{ + if (str_starts_with($item->pubDate, date("D, j M Y"))) + { + $title = $item->title; + + // Add to content + $header .= '- ' . $title . "\n"; + + $article = file_get_contents($item->link, false, $context); + $doc = new DOMDocument(); + $doc->loadHTML($article); + $finder = new DomXPath($doc); + + $category = trim($finder->query('//p[@class="news__heading__top__kicker _default"]')->item(0)->textContent); + $summary = trim($finder->query('//p[@class="news__heading__top__intro margin-top:500"]')->item(0)->textContent); + $author = trim($finder->query('//a[@class="focus color:text-brand heading-product:100"]')->item(0)->textContent); + + // clean images + $figures = $finder->query('//figure'); + foreach ($figures as $figure) + { + $figure->parentNode->removeChild($figure); + } + + // clean "à lire aussi" and inline quotes + $asides = $finder->query('//aside'); + foreach ($asides as $aside) + { + $aside->parentNode->removeChild($aside); + } + + // improve section titles + $asides = $finder->query('//h2'); + foreach ($asides as $aside) + { + $aside->textContent = '*' . $aside->textContent . '*'; + } + + // Output + + // old: add header as one block + //$part1 = $finder->query('//div[@class="news__heading grid"]'); + //$result .= cleantext($part1->item(0)); + + $result .= "\n------\n\n"; + $result .= "Article : " . $item->title . "\n"; + $result .= 'Catégorie: ' . str_replace("\n", '', $category) . "\n"; + $result .= 'Auteur.ice : ' . $author . "\n"; + $result .= "\n"; + $result .= "Introduction :\n" . $summary . "\n"; + + // article main text + $maintext = $finder->query('//div[@class="news__body__center"]'); + $result .= cleantext($maintext->item(0)); + } + //break; +} + +// web version: + +/* +file_put_contents('mediapart.txt', $header . "\n" . $result); + +echo 'Mediapart - ' . $date . ''; +echo '
mediapart.txt
'; + +echo '
'; +echo str_replace("\n", '
', $header) . '
' . str_replace("\n", '
', $result); +echo '
'; +echo ''; +*/ + +$filename = 'mediapart' . str_replace(' ', '', $localedate) . '.txt'; +header('Content-Type: application/text; charset=utf-8'); +header('Content-Disposition: attachment; filename=' . $filename); + +echo $header . "\n" . $result; + +?> \ No newline at end of file