馃嚞馃嚙 Go to english version of this post / Przejd藕 do angielskiej wersji tego wpisu
Ju偶 od kilku tygodni publikuj臋 seri臋 niedzielnych wpis贸w #TDBNews, w kt贸rej wypisuj臋 ciekawe rzeczy, na kt贸re natrafi艂em w danym tygodniu. R臋czne zbieranie tych, w mojej ocenie, interesuj膮cych artyku艂贸w by艂oby bardzo 偶mudn膮 i niezwykle nieefektywn膮 prac膮, kt贸r膮 musia艂bym powtarza膰 cyklicznie co tydzie艅, po艣wi臋caj膮c na to cz臋艣膰 niedzielnego czasu, kt贸ry m贸g艂bym przeznaczy膰 na inne zaj臋cia. Z uwagi na to postanowi艂em to zautomatyzowa膰 i to w baaardzo prosty spos贸b. Zasada dzia艂ania jest trywialna i dla u艂atwienia przedstawi臋 j膮 w punktach.
- Codziennie przegl膮dam moje 藕r贸d艂a RSS (u偶ywam aplikacji Reeder), o艣 czasu na Mastodon oraz Reddita, czyli moje trzy g艂贸wne okna na informacje ze 艣wiata.
- Gdy natrafi臋 na jaki艣 pozornie ciekawy artyku艂 to zapisuj臋 go do listy Przeczytaj p贸藕niej, do kt贸rej wracam przewa偶nie dopiero wieczorem.
- Nast臋pnie te faktycznie ciekawe rzeczy udost臋pniam na moim profilu na Mastodonie dopisuj膮c do niego specjalny hashtag #TDBNews.
- Skrypt PHP 艣ledz膮cy kana艂 RSS mojego mastodonowego profilu wy艂apuje te tooty i zapisuje je do pliku tekstowego.
- Pod koniec tygodnia (w niedziel臋) uruchamiam drugi skrypt, kt贸ry z zebranych toot贸w tworzy mi gotowy kod wpisu zgodnego z notacj膮 u偶ywan膮 przez WordPress. W praktyce sk艂ada si臋 on ze statycznego wst臋pu i zako艅czenia, kt贸re w ka偶dym wpisie TDBNews s膮 takie same, i cz臋艣ci zmiennej znajduj膮cej si臋 w 艣rodku, w kt贸rej embeduj臋 (osadzam) zebrane tooty w postaci ramek iframe.
- Pozostaje mi tylko nada膰 tytu艂 wpisu, co ogranicza si臋 do podania aktualnej daty, i opublikowa膰 go.
Przyk艂ady tego typu wpis贸w mo偶na zobaczy膰 przechodz膮c tutaj. A w tym wpisie poka偶臋 od kuchni jak wygl膮daj膮 te skrypty, dzi臋ki kt贸rym realizuj臋 t臋 prost膮 automatyzacj臋.
Skrypt zbieraj膮cy moje tooty oznaczone hashtagiem #TDBNews
Standardowo wyt艂umacz臋 jego dzia艂anie poprzez komentarze umieszczone w 艣rodku kodu. Tutaj mo偶e si臋 te偶 przyda膰 znajomo艣膰 tre艣ci wpisu, w kt贸rym pokazywa艂em jak zrobi艂em bota do publikacji wiadomo艣ci ze znanych portali na Mastodonie.
<?php
header('Content-Type: text/html; charset=utf-8');
// URL DO MOJEGO PROFILU NA MASTODONIE
$url = "https://mastodon.tomaszdunia.pl/@to3k.rss";
// PLIK Z JU呕 ZNALEZIONYMI TOOTAMI
$file_all = file_get_contents("tdbnews_all.txt");
// ZA艁ADUJ PLIK XML (FEED RSS)
$feeds = simplexml_load_file($url);
// USTAW STREF臉 CZASOW膭
date_default_timezone_set("Europe/Warsaw");
// DATA PONIEDZIA艁KU W TYM TYGODNIU DO ODFILTROWANIA WSZYSTKIEGO PRZED T膭 DAT膭
$monday = strtotime("Monday this week");
$monday = date("Y-m-d", $monday);
// JE呕ELI FEED RSS NIE JEST PUSTY
if(!empty($feeds))
{
// ROZBIJ FEED NA ODDZIELNE PRZEDMIOTY (TOOTY)
foreach ($feeds->channel->item as $item)
{
// PRZEKONWERTUJ LINK NA CI膭G (BEZ TEGO FUNKCJA STR_CONTAINS WYWALI B艁膭D)
$link = strval($item->link);
// POBIERZ DAT臉 PUBLIKACJI I ZMIE艃 JEJ FORMAT NA RRRR-MM-DD
$pubDate = $item->pubDate;
$pubDate = strtotime($pubDate);
$pubDate = date("Y-m-d", $pubDate);
// POBIERZ TRE艢膯
$description = strval($item->description);
if(str_contains($file_all, $link) OR $pubDate < $monday OR !str_contains($description, "https://mastodon.tomaszdunia.pl/tags/TDBNews"))
{
// JE呕ELI LINK JEST JU呕 W PLIKU (BY艁 JU呕 PRZETWORZONY)
// LUB JE呕ELI DATA PUBLIKACJI JEST PRZED PONIEDZIA艁KIEM W TYM TYGODNIU (JEST ZA STARY)
// LUB JE呕ELI TOOT NIE ZAWIERA HASHTAGA TDBNEWS (JEST O CZYM艢 INNYM)
// POMI艃 GO I ID殴 DO NAST臉PNEGO
continue;
}
else
{
// JE呕ELI WSZYSTKIE WARUNKI SPE艁NIONE
// DOPISZ LINK DO ZMIENNEJ Z KWALIFIKUJ膭CYMI SI臉 TOOTAMI
$file_all .= $pubDate.";".$link."\n";
}
}
}
// ZAKTUALIZUJ PLIK Z LIST膭 KWALIFIKUJ膭CYCH SI臉 TOOT脫W
file_put_contents("tdbnews_all.txt", $file_all);
?>
Skrypt generuj膮cy gotowy wpis WordPress
Tak samo jak w przypadku poprzedniego kodu tak i tutaj wszystko wyja艣nione w komentarzach.
<?php
// PLIK ZE ZNALEZIONYMI TOOTAMI
$file_all = file_get_contents("tdbnews_all.txt");
// PODZIEL ZAWARTO艢膯 PLIKU NA ODDZIELNE LINIE
$explode_file = explode("\n", $file_all);
// USTAW STREF臉 CZASOW膭
date_default_timezone_set("Europe/Warsaw");
// DATA PONIEDZIA艁KU W TYM TYGODNIU DO ODFILTROWANIA WSZYSTKIEGO PRZED T膭 DAT膭
$monday = strtotime("Monday this week");
$monday = date("Y-m-d", $monday);
// DEKLARACJA TABLICY Z NEWSAMI Z TEGO TYGODNIA
$news_array = array();
// PRZEJD殴 PRZEZ WSZYSTKIE LINIE JEDNA PO DRUGIEJ
foreach($explode_file as $line)
{
// JE呕ELI LINIA NIE JEST PUSTA
if(!empty($line))
{
// ODSEPARUJ DAT臉 PUBLIKACJI I LINK
$explode_line = explode(";", $line);
// JE呕ELI DATA PUBLIKACJI NIE JEST PRZED ZESZ艁YM PONIEDZIA艁KIEM
if($explode_line[0] >= $monday)
{
// DODAJ TEGO TOOTA DO TABLICY Z NEWSAMI Z TEGO TYGODNIA
array_push($news_array, ['pubDate' => $explode_line[0], 'link' => $explode_line[1]]);
}
}
}
// ODWR脫C ZAWARTO艢膯 TABELI (SORTOWANIE TOOT脫W OD NAJSTARSZEGO DO NAJNOWSZEGO)
$news_array = array_reverse($news_array);
?>
<!-- SEKCJA Z WYNIKIEM, STATYCZNY WST臉P, KOD PHP Z FUNKCJ膭 FOREACH, KT脫REJ REZULTATEM JEST WY艢WIETLENIE WSZYSTKICH TOOT脫W W RAMCE IFRAME, STATYCZNE ZAKO艃CZENIE -->
<!-- ELEMENT PLAINTEXT JEST U呕YWANY DO WY艢WIETLENIA KODU HTML W NIEPRZETWORZONEJ FORMIE (WSZYSTKO PO TYM TAGU) -->
<plaintext>
<!-- wp:columns -->
<div class="wp-block-columns"><!-- wp:column -->
<div class="wp-block-column"><!-- wp:paragraph -->
<p>馃嚨馃嚤 <em>#TDBNews</em> to nazwa pochodz膮ca od <em>Tomasz Dunia Blog News</em>. Pod tak膮 nazw膮 co niedziel臋 publikuj臋 zbi贸r ciekawych wiadomo艣ci na jakie uda艂o mi si臋 natrafi膰 w ubieg艂ym tygodniu. Zdecydowana wi臋kszo艣膰 linkowanych artyku艂贸w b臋dzie angloj臋zyczna, bo wszystkie 藕r贸d艂a polskoj臋zyczne, kt贸re 艣ledz臋, s膮 za <em>paywall'ami</em>.</p>
<!-- /wp:paragraph --></div>
<!-- /wp:column -->
<!-- wp:column -->
<div class="wp-block-column"><!-- wp:paragraph -->
<p>馃嚞馃嚙 <em>#TDBNews</em> is a name coming from <em>Tomasz Dunia Blog News</em>. Under this name, every Sunday I publish a collection of interesting news that I came across in the previous week. The vast majority of linked articles will be in English, because all the Polish-language sources, I follow, are behind <em>paywalls</em>.</p>
<!-- /wp:paragraph --></div>
<!-- /wp:column --></div>
<!-- /wp:columns -->
<!-- wp:heading -->
<h2 class="wp-block-heading">W tym tygodniu znalaz艂em / This week I found 馃憞</h2>
<!-- /wp:heading -->
<?php
foreach($news_array as $news)
{
echo "
<!-- wp:html -->
<iframe src=\"".$news['link']."/embed\" class=\"mastodon-embed\" style=\"max-width: 100%; border: 0\" width=\"100%\" allowfullscreen=\"allowfullscreen\"></iframe><script src=\"https://mastodon.tomaszdunia.pl/embed.js\" async=\"async\"></script>
<!-- /wp:html -->
";
}
?>
<!-- wp:columns -->
<div class="wp-block-columns"><!-- wp:column -->
<div class="wp-block-column"><!-- wp:paragraph -->
<p>馃嚨馃嚤 Jak widzisz to zestawienie powstaje poprzez osadzenie toot贸w (inaczej post贸w), kt贸re opublikowa艂em w poprzednim tygodniu na <em>Mastodonie</em>. S膮 one oznaczone specjalnym hashtagiem. To oznacza, 偶e informacj臋 o tych tre艣ciach mo偶esz uzyska膰 jeszcze przed publikacj膮 tego zestawienia. Wystarczy 艣ledzi膰 <a href="https://mastodon.tomaszdunia.pl/@to3k">m贸j profil na <em>Mastodonie</em></a> lub sam <a href="https://mastodon.tomaszdunia.pl/tags/TDBNews">hashtag <em>#TDBNews</em></a>.</p>
<!-- /wp:paragraph --></div>
<!-- /wp:column -->
<!-- wp:column -->
<div class="wp-block-column"><!-- wp:paragraph -->
<p>馃嚞馃嚙 As you can see, this compilation is created by embedding toots (also known as posts) that I published last week on <em>Mastodon</em>. They are marked with a special hashtag. This means that you can access information about these contents even before this compilation is published. Just follow <a href="https://mastodon.tomaszdunia.pl/@to3k">my profile on <em>Mastodon</em></a> or the <a href="https://mastodon.tomaszdunia.pl/tags/TDBNews">hashtag <em>#TDBNews</em></a> itself.</p>
<!-- /wp:paragraph --></div>
<!-- /wp:column --></div>
<!-- /wp:columns -->
Podsumowanie
Czy偶 nie by艂o to proste? W mojej ocenie nie do艣膰, 偶e proste to jeszcze warte zachodu! Jak to? Mam zasad臋, 偶e ka偶da automatyzacja czynno艣ci, kt贸ra z jednej strony jest niezbyt wymagaj膮ca intelektualnie, a z drugiej powtarza si臋 cyklicznie, ma sens i na d艂u偶sz膮 met臋 oszcz臋dzi wiele czasu. We藕my przyk艂ad TDBNews. Tworzenie takiego zestawienia r臋cznie zaj臋艂oby mi co tydzie艅 przynajmniej 20 minut, natomiast z wy偶ej opisan膮 automatyzacj膮 zajmuje mi to nie wi臋cej ni偶 3 minuty. We藕my zatem te 15 minut co tydzie艅. W roku mamy 52 tygodnie, a wi臋c rocznie zyskuj臋 780 minut, czyli 13 godzin! To ponad p贸艂 dnia, kt贸re mog臋 po艣wi臋ci膰 rodzinie, czy nawet na tworzenie kolejnego wpisu na ten blog.
Pingback: Simple automation of TDBNews [ENG 馃嚞馃嚙] – Tomasz Dunia Blog