Jak wysyłać powiadomienia o nowych wpisach na blogu do blabler.pl

Z serwisu blabler.pl, będącego następcą Blip.pl, aktywnie nie korzystam od dłuższego czasu, a nawet bardzo rzadko czytam. Jedyne co tam trafiało, to powiadomienia o nowych wpisach na blogu. Wykonywane skryptem w Perlu – zawsze to dotarcie do paru czytelników.

Skrypt był dostosowany do RSS z Blox, w dodatku z paroma naleciałościami, więc po migracji na WordPressa przestał działać. Stwierdziłem, że to świetna okazja by zapoznać się – bardzo pobieżnie – z mechanize (odpowiednik genialnego WWW::Mechanize z Perla) w Pythonie.

Tak powstał skrypt umożliwiający śledzenie wordpressowego RSS i wysyłający informację o nowym wpisie na blogu do serwisu blabler.pl. Do użycia z crona. Raczej nie planuję rozwoju skryptu. No może pomijając naprawę ew. błędów, a takie mogą się zdarzyć, zwł. dotyczące kodowania pl-znaków, bo zupełnie tego nie testowałem, ale może się komuś przyda.

Migracja z Blox na WordPressa – HOWTO

Jak pisałem poprzednio, na pierwszy rzut do migracji poszedł blog o kapeli Bez Krótkich Spodni. Z migracją zeszło mi nieco dłużej, niż planowałem, głównie za sprawą hostingu, który się kończy, a którego nie przedłużam. Zamiast dedyka w Kimsufi zdecydowałem się na dwa VPSy w arubacloud.pl. Zaleta: taniej i SSD. Wada: potrzebuję dwie maszyny, co wiązało się z podziałem usług. I niestety, mimo konteneryzacji część usług jest od siebie zależna, głównie za sprawą domeny. W każdym razie zeszło więcej czasu, niż planowałem, ale jest to sensowniej podzielone.

Sama migracja na WordPress jest prosta. Najpierw instalujemy WordPressa. Long story short:

wget https://wordpress.org/latest.tar.gz
tar -zxf latest.tar.gz
chown www-data:www-data katalog

Pozostaje utworzenie bazy i użytkownika:

CREATE DATABASE wordpress_db;
GRANT ALL PRIVILEGES ON wordpress_db.* TO "wordpress_db_user"@"localhost" IDENTIFIED BY "VeryStrongPassword";

W przypadku instalacji opartej o serwer nginx i WordPressa trzeba jeszcze dodać jedno ustawienie w konfiguracji tego pierwszego:

location /bks/ {
    try_files $uri $uri/ /bks/index.php?$args;
}

Następnie uruchamiamy instalator WordPressa przez WWW i logujemy się. Warto usunąć przykładowy wpis i strony, z których nie korzystamy, można wybrać szablon (cóż, domyślny robi robotę jak dla mnie) i zrobić porządek w pluginach.

Niestety Blox wyciął użytkownikom możliwość eksportu wpisów, więc w tym miejscu musiałem posiłkować się autorskim skryptem, by zdobyć treść bloga z Blox w formacie wordpressowym. Potem szybkie dopieszczenie szablonu, zwłaszcza zdjęcia z nagłówka i… w zasadzie jest. Niestety, obrazki w takim rozwiązaniu są serwowane nadal z serwerów Blox, więc nie mamy pełnej niezależności i będziemy dostawać komunikat ostrzegawczy przy HTTPS, bo nie wszystkie treści są serwowane w sposób bezpieczny.

Jest jednak na to sposób. Okazuje się, że istnieje plugin Download External Images In Posts, który robi dokładnie to, na co wskazuje nazwa – pobiera obrazki ze zdalnego serwera, zapisuje je lokalnie i podmienia linki we wszystkich wpisach, także już istniejących. Działa zadziwiająco dobrze, choć jedna rzecz mi się w nim nie podoba: musi pozostać aktywny po zrobieniu roboty, bo linki nie są podmienione w treści. Ale z tym jestem w stanie żyć.

Ostatni szlif to dodanie statystyk Matomo (dawniej Piwik). Skorzystałem z pluginu Insert Headers and Footers, następnie wkleiłem tam stosowny JS.

Efekt finalny migracji na WordPress widać w pierwszym linku. Jak widać zachowana została treść wpisów, ich daty, komentarze, ich autorzy oraz daty. Działają także tagi i kategorie (tych ostatnich akurat nie używam na blogu BKS). Wszystko jest serwowane po HTTPS (i dodatkowo HTTP/2, ale to już zaleta nginx z odpowiednią konfiguracją), czyli szybko, bezpiecznie i SEO friendly. Tak, jak powinno być. 🙂

Zostało posprzątanie na starym blogu i przekierowanie w nowe miejsce, ale to już bez pośpiechu…

Dodam jeszcze, że WordPress spodobał mi się na tyle, że rozważam migrację tego bloga także na WP, zamiast statycznego Pelicana. Ale nad tym jeszcze chwilę pomyślę.

UPDATE Aby działały poprawnie wszystkie ustawienia dla bezpośrednich odnośników, trzeba podać katalog w konfiguracji, zgodnie z tym opisem.

UPDATE2 Warto zaktualizować URLe w treści postów, żeby kierowały na aktualny blog. Na szczęście można to zrobić automatycznie w prosty sposób. Na Blox schemat URLa posta to http://adresbloga.blox.pl/YYYY/MM/Tytul-wpisu.html
Zakładając, że nasz WordPress używa podobnego schematu, korzystamy z HTTPS i przenieśliśmy się na example.com, czyli mamy https://example.com/YYYY/MM/Tytul-wpisu należy… Zrobić backup bazy (lub całego bloga, polecam wpis o dodatkach do WordPressa). Opisany sposób działa dla MariaDB, goły MySQL podobno może mieć problemy, więc lepiej mieć do czego wrócić. Jak już mamy backup i wiemy co z nim robić, wydajemy polecenie:

update wp_posts set post_content = regexp_replace(post_content, 'http://adresbloga.blox.pl/20(.*?).html', 'https://example.com/20\\1');

W przypadku mojego bloga było to dokładnie:

update wp_posts set post_content = regexp_replace(post_content, 'http://rozie.blox.pl/20(.*?).html', 'https://zakr.es/blog/20\\1');

Jak usprawnić sieć w domu? cz. 5

Wpis, który chronologicznie powinien pojawić się jako drugi, ponieważ dotyczy stanu wyjściowego, czyli WiFi. Oczywiście sprzęt to opisywany niedawno TP-Link WR841 z OpenWrt. Banana Pi wpięte do portu LAN, czyli na 100 Mbps, ale głównym ogranicznikiem jest sieć bezprzewodowa. Jasności dodam, że są to wyniki sprzed optymalizacji, ale o poprawianiu WiFi napiszę innym razem. Warto też zaznaczyć, że wyniki jako jedyne są przeprowadzane na środowisku nieizolowanym, „produkcyjnym”, tj. z podłączonymi innymi urządzeniami. O ile nie powinny specjalnie rzutować na wynik, bo nie korzystały intensywnie, to na pewno wpływały w jakiś sposób ujemnie.

1.
[ ID] Interval           Transfer     Bandwidth       Jitter    Lost/Total Datagrams
[  4]   0.00-60.04  sec   125 MBytes  17.5 Mbits/sec  10.997 ms  1908/16040 (12%)  
[  4] Sent 16040 datagrams

2.
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-60.00  sec  67.7 MBytes  9.46 Mbits/sec  186             sender
[  4]   0.00-60.00  sec  67.6 MBytes  9.45 Mbits/sec                  receiver

3.
— 192.168.0.139 ping statistics —
600 packets transmitted, 598 received, 0% packet loss, time 61057ms
rtt min/avg/max/mdev = 0.766/2.303/42.995/4.036 ms

4.
— 192.168.0.139 ping statistics —
600 packets transmitted, 596 received, 0% packet loss, time 60280ms
rtt min/avg/max/mdev = 1.918/3.953/42.202/3.747 ms

5.
[ ID] Interval           Transfer     Bandwidth       Jitter    Lost/Total Datagrams
[  4]   0.00-3600.04 sec  6.27 GBytes  15.0 Mbits/sec  4.305 ms  71880/822270 (8.7%)
[  4] Sent 822270 datagrams
[…]
9.
Inea Orange

Jak widać stan wyjściowy nie był imponujący. Rzekłbym nawet, że zaskakująco słabe wyniki. Widać też, że brakuje części testów – przyznaję, że nie miałem ani cierpliwości, ani warunków. Ponieważ ustawienia lekko się zmieniły w międzyczasie, zostawię z brakiem, żeby nie fałszować. Zaskakuje słaby wynik transmisji w teście syntetycznym, w szczególności w porównaniu z testem do internetu.