艁adowanie

Prosta automatyzacja TDBNews

馃嚞馃嚙 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.

  1. 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.
  2. Gdy natrafi臋 na jaki艣 pozornie ciekawy artyku艂 to zapisuj臋 go do listy Przeczytaj p贸藕niej, do kt贸rej wracam przewa偶nie dopiero wieczorem.
  3. Nast臋pnie te faktycznie ciekawe rzeczy udost臋pniam na moim profilu na Mastodonie dopisuj膮c do niego specjalny hashtag #TDBNews.
  4. Skrypt PHP 艣ledz膮cy kana艂 RSS mojego mastodonowego profilu wy艂apuje te tooty i zapisuje je do pliku tekstowego.
  5. 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.
  6. 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.


Je偶eli podoba艂 Ci si臋 ten wpis to mo偶esz mnie wesprze膰! 馃檪

Tomasz Dunia

馃嚨馃嚤 Z wykszta艂cenia Mechatronik. Z zawodu G艂贸wny Konstruktor w PAK-PCE Polski Autobus Wodorowy (Neso Bus). Po pracy Ojciec Roku. W nocy Wannabe Programista. Wszystko to daje przepis na zwyk艂ego nerda :) 馃嚞馃嚙 Mechatronics by education. By profession Chief Constructor in PAK-PCE Polish Hydrogen Bus (Neso Bus). After work Father of the Year. At night Wannabe Programmer. All this gives a recipe for an ordinary nerd :)

svg

Co my艣lisz?

Poka偶 komentarze / Napisz komentarz

Odpowiedz

svg
Szybka nawigacja
  • 01

    Prosta automatyzacja TDBNews