Categorieën
Algemeen

RSS-Bridge

Met RSS-Bridge kun je zelf allerhande online bronnen in een RSS-feed gieten. En gisteren deed ik dat voor Apache, het online magazine dat sinds het op Drupal draait (kortstondig?) geen RSS-feed meer beschikbaar stelt.

Mijn custom bridge ziet er in elk geval zo uit:

<?php

class ApacheBridge extends BridgeAbstract
{
  const MAINTAINER = 'ochtendgrijs';
  const NAME = 'Apache';
  const URI = 'https://www.apache.be/';
  const CACHE_TIMEOUT = 3600;
  const DESCRIPTION = 'Inhoud heerst';

  public function collectData()
  {
    $pageUrl = self::URI . 'artikels/nieuws';
    $html = getSimpleHTMLDOM($pageUrl) or returnServerError('Could not request Apache: ' . $pageUrl);

    foreach ($html->find('article.node--type-article') as $element) {
      if (count($this->items) >= 20) {
        break;
      }

      $item = [
        'uri' => 'https://www.apache.be' . $element->find('div.article-list-text > a', 0)->href,
        'title' => trim($element->find('div.article-list-titel span', 0)->plaintext),
        'content' => '<p>' . trim($element->find('div.article-list-teaser', 0)->plaintext) . '</p>',
        'timestamp' => strtotime(trim($element->find('span.article-list-datum', 0)->plaintext)),
      ];

      $this->items[] = $item;
    }
  }
}

Veel meer dan RSS-Bridge aan de hand van wat CSS-selectors vertellen waar het net bepaalde (meta)data kan terugvinden, is dat niet. (Het valt op, overigens, dat Apache niet bepaald semantische HTML gebruikt, maar dat terzijde.)

En de volledige berichten?

Hierboven maakten we een feed voor de artikelen op https://www.apache.be/artikels/nieuws. Op dat feed kunnen we ons nu gaan abonneren. (Samenvattingen) van nieuwe items verschijnen dan automatisch in onze reader.

Als bonus leg ik nog even uit hoe ik mijn eigen feedreader geïnstrueerd heb om meteen de volledige berichten op te halen.

In mijn reader haal ik met file_get_contents() de betreffende webpagina’s op. Waarom die (eenvoudige) functie en geen geavanceerder bibliotheek? KISS!

Moet ik (t.t.z. voor artikelen achter een paywall) alleen nog een session cookie meesturen, nadat ik mijn reader zich met mijn e-mailadres en wachtwoord heb laten aanmelden.

Dat aanmelden moet met een POST request, en dat doe ik met cURL. De cookie sla ik lokaal op. Vervolgens haal ik uit dat tekstbestand de informatie (d.i. het ID en de value) die nodig is om Apache te bewijzen dat ik ben aangemeld.

Ondertussen werkt dit alles netjes, al zoek ik nog even uit hoe ik ook voor die POST request file_get_contents() kan gebruiken (dat het kan, weet ik, en om de cookie op te slaan zou ik de headers kunnen parsen).

Categorieën
Algemeen

Moestuinieren

Ik had het moestuinieren zo’n beetje opgegeven. Zelfs een wereldwijde pandemie1 kon daaraan niks verhelpen.

Het is als relatieve leek best moeilijk, weet je. Dieven2 en aanbinden en net genoeg maar niet te veel water en mest. (Over het miljoen miljard slakken, kevers en ander kruipend gespuis zullen we maar niet beginnen.)

Afijn, long story short: ik heb dan toch enkele tomatenplanten gekocht (voor zaaien was het te laat), (zomer)worteltjes en (dito) sla gezaaid, en komkommer en courgette en pompoen. Die laatste twee laat ik buiten zo’n beetje hun ding doen, dat loopt net als de vorige keer wel los.

Die komkommer en tomaten, though.

Afijn, ben benieuwd.

  1. Is dat een pleonasme? Dat is een pleonasme. Sort of.
  2. Het verwijderen van zijscheuten.
Categorieën
Algemeen

Volkswoede

Veel pogingen – afijn, op sociale media – tot verklaring van ‘de volkswoede’, dezer dagen.

Het oppoken van allerhande zogenaamde maatschappelijke tegenstellingen is een theorie. De gebrekkige aanpak van de coronacrisis een andere.

Sommigen1 voegen daar maar wat graag ‘de hoogste belastingdruk ter wereld’ aan toe.

En zo cherrypickt iedereen maar wat. De grote problemen van vandaag? Die van onszelf. Fijn, hoor.2

Houdoe.

  1. Willen én lagere belastingen én lagere ‘facturen’ (voor stroom, water, je kent dat). Kijk, ook ik ben voor individuele verantwoordelijkheid en zo, en doorgaans betekent dat hogere facturen. Zélf meer betalen (voor je pensioen, een vliegtuigreis, een luxewagen of het vullen van je zwembad), als je daarvoor kiest. Ik geef het maar even mee.
  2. Misschien is ‘gewoon boos zijn’ gewoon een dingetje – well played, socialemediabedrijven. Sinds er zonder publiek wordt gevoetbald, laat ik me vertellen, gaan hooligans op een afgelegen plek in het bos met elkaar op de vuist.
Categorieën
Algemeen

De mol

Even snel, want ik moet natuurlijk geen week meer wachten. Voor ’t eerst in twintig jaar of zo ben ik De mol nog ’ns aan ’t volgen.

Zodus: Lennart staat al sinds aflevering twee of drie van dit seizoen helemaal bovenaan m’n lijstje potentiële mollen. Blijft tot aan z’n beruchte actie in de zesde aflevering best wel op de achtergrond, en bracht ook daarvoor gewoon weinig geld in ’t laatje.

Afijn, weet ik veel. (Mijn nummers twee en drie zitten er ook nog gewoon in, helaas.)

Categorieën
Algemeen

IndieWeb, deel zoveel

Niet iedereen is altíjd even enthousiast over all things IndieWeb, en dat is prima. Context: via Franks nieuwsbrief – die ik lekker in mijn feedreader lees – ben ik op een kritisch stuk van Daniel Gold gestoten, en een van Stephen Downes.

Beiden hebben die misschien niet volledig, maar in belangrijke mate gelijk.

Hoewel fan van de meeste ideeën achter de beweging beschouw ik mezelf nog steeds vooral als toeschouwer. Dat wil zeggen, ik wil niet liever dan dat mijn sites (deels) IndieWeb-compatibel zijn, maar ik blijf van al te filosofische discussies nog even weg.

Kijk, het IndieWeb is er vooralsnog voor en door techneuten. Al weet ik, de situatie beerput op populaire sociale media in gedachten, niet zeker of ik dat nu echt zo verschrikkelijk vind. Maar ook op softwaregebied is er niet heel veel diversiteit.

Meer nog, om het allemaal een beetje behapbaar te houden, wordt er wel érg vaak teruggevallen op externe services. Ik denk aan IndieAuth.com, Brid.gy, of Webmention.io. Of Netlify. Of (de gehoste versie van) Aperture.

Terzijde: ooit lag IndieAuth.com, dat ik destijds in combinatie met – verontschuldiging voor zoveel techniciteiten – RelMeAuth gebruikte, eruit en kon ik mezelf (lees: mijn Micropub-app) een uur of twee lang niet bij mijn eigen site aanmelden. Die dag heb ik dan ook IndieAuth voor WordPress geactiveerd.

Afijn, lang verhaal kort: je eigen domein ownen is een ding, je eigen platform iets anders. (Let wel: het beheren van je eigen fysieke server en zo hoeft evenmin, hé. Laat dat maar aan specialisten.)

Ook het zogenaamde strikte scheiden van contenttypes wordt niet altijd even goed begrepen. CMS’en en plugins onderhouden vaak zulke scheidslijntjes, met aparte archieven voor bookmarks, replies en dies meer, terwijl de spec zélf daarover net erg open is:

Post Type Discovery specifies algorithms for determining the type of a post by what properties it has, [which] helps avoid the need for explicit post types that are being abandoned by modern post creation UIs.

Op mijn eigen sites houd ik het bewust wat vager (en kies ik dus niet voor WordPress’ Post Kinds-plugin, maar voor een eigen implementatie op basis van custom berichttypes): er zijn langere berichten met titel, en kortere zonder. Beide kunnen bookmarks zijn, of replies, noem maar op.

Waarmee ik nog steeds niet zoveel heb gezegd, natuurlijk. Laat ik maar ’ns afsluiten met een link naar de belangrijkste IndieWeb-principes. En er ineens enkele uitlichten, want niet iedereen lijkt even op de hoogte:

  • Maak wat jíj nodig hebt. (Da’s juist. Je hoeft helemaal niet all-in te gaan.)
  • Pluraliteit: meerdere wegen leiden naar Rome, en da’s een goeie zaak.
  • Have fun!