@jan Jan, vraag, als ik een op mij toegesneden micropubclient wil maken (om lokaal op laptop te draaien) die naar mijn Wordpress micropub endpoint post: waar kan ik voorbeelden vinden hoe zo'n call er uit moet zien precies. Omdat ik mijn blog ken wil ik in eerste instantie post calls direct genereren en met een bearer token versturen. Waar begin ik? Tips?

Follow

@ton Voor mijn eerste Microsub-reader – tevens Micropub-client – heb ik me erg door Monocle laten inspireren, maar ik zie net dat de broncode daarvan minder leesbaar is dan ik me meende te herinneren. In feite stuurt dat formulierdata – je zou dan naar de namen van de veldjes moeten kijken – via een omweggetje langs de backend (waar je er o.a. je geheime bearer aan toevoegt) naar een Micropub-endpoint.

@ton Een ander heel simpel voorbeeld vind je hier: jan.boddez.net/articles/sendin

Dus POST request met authorization-header en als body params `h=entry&content=<blablabla>`, zo simpel kan het zijn. Resultaat moet een bericht zijn met die inhoud. (Uiteraard kun je ook een titel meegeven en zo – zelf genereer ik die desnoods aan de ontvangstzijde, maar daarover gaat het nu even niet.)

@ton Je kunt je body geloof ik ook als JSON encoden, maar daarmee heb ik niet zoveel ervaring. In PHP zou dat heel makkelijk moeten zijn, maar ik heb het nog niet nodig gehad.

En dan heb je nog de spec. w3.org/TR/micropub/#h-create Lang verhaal kort: je kunt ook tags meesturen, of afbeeldingen. Of posts updaten, etc. Dan dien je bijv. een URL mee te sturen, maar ik denk niet dat bijvoorbeeld Monocle dat kan – zelf ook nog niet gebruikt.

@ton Zal later nog ’ns kijken hoe ik likes en bookmarks heb geïmplementeerd; volgens mij stuur ik daar geen content mee maar gewoon een `like-of`-param met de URL als waarde. De Micropub-plugin voor WP (of Post Kinds, etc.) genereert dan zelf ’n tekstje met de juiste microformats in. Of je gebruikt daarvoor een hook. Of je stuurt de HTML gewoon lekker in de `content` mee, maar dat hoeft dus niet per se.

Posttypes die ik zelf gebruik zijn article, note, like, bookmark, reply & read.

@jan thanks, ik denk inderdaad aan simpelweg 'alles' in de content mee sturen, en een POST request bouwen. Ga je links napluizen of ik daarin voldoende terugvind hoe dat er dan uit moet zien. Het proces is me op zich wel duidelijk, maar da's iets anders dan de simpelste implementatie maken voor mijn eigen use case. Dank!

@ton Eén iets: je moet je request netjes encoden. In PHP kun je bijv. `http_build_query(['h' => 'entry'])` doen – alleen met arrays zoals voor `category` is het dan even oppassen (ligt aan PHP/die specifieke functie). En versturen kun je met de cURL-functies. Of met een of andere HTTP-bibliotheek – Aaronpk heeft er eentje. De rest is eigenlijk heel simpel. Anyhow, hoe je post requests er uiteindelijk uit moeten komen te zien, dat vind je dus op die laatste IndieWeb.org-pagina.

@jan dank Jan! Ik ben begonnen zylstra.org/blog/2022/01/writi . Kom wel eerst een https issue tegen, die ik ook al had bij het script om opml lijstjes op mijn site te gooien (daar opgelost door het in http te doen, maar dat kan in dit geval niet).

@ton Die HTTPS, wat gaat daar mis? Dat je systeem (lokaal) over een certificaat gaat zeuren? Had net iets soortgelijks aan de hand, op Windows wel, opgelost (beetje ’n dirty hack, maar goed) door ergens in php.ini naar de juiste .pem-file te verwijzen. Je kunt denk ik in WordPress in je IndieAuth settings ook handmatig tokens aanmaken (die je nooit of bijv. slechts jaarlijks laat vervallen) die je dan in je script kunt gebruiken.

@jan ik krijg "SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed" bij het aanroepen van file_get_contents() Ik lees dat als dat mijn script de encryptie behorend bij het cert van mijn site niet toepast om eoa reden. Mijn localhost heeft geen eigen cert dus dat kan het ook zijn.

@ton Wat googelen leert dat PHP ook een `openssl.cafile`-setting kent. Je zou, denk ik dan, de ‘Mozilla’ CA-bundle die je op de cURL-site terugvindt, kunnen downloaden en PHP die laten gebruiken, of toch voorlopig.

@jan ik heb die curl .pem file en die van mijn eigen site's cert gedownload, maar begrijp niet goed in welke folder ze op mijn mac zouden moeten staan. Gerelateerd aan mijn systeem (maar die heeft al allerlei root CA's in de keychain) of aan mijn MAMP PRO lokale webserver ,die er geen map voor lijkt te hebben. De speurtocht gaat verder.

@ton Zou dat belangrijk zijn? Zolang je er in je PHP-config maar correct naar verwijst, nee?

@ton (Die van je MAMP, neem ik aan; zou weleens kunnen dat er meerdere PHP-versies en configuraties bestaan.)

@jan verwijzen in de gebruikte php.ini hielp niet. Heb met openssl_get_cert_locations() opgezocht waar MAMP kijkt, en in die folder stond een oude cacert.pem v Mozilla, die geupdate en voor de zekerheid ook de .pem van het domein waarmee ik wil praten er aan toegevoegd. Resultaat: de communicatie werkt, en er wordt een post aangemaakt! Nu sleutelen aan de inhoud van de communicatie, want de posting is nog leeg dus die formatting klopt niet. Daar gaat debug log weer helpen.

@jan ik denk dat wat in die MAMP folder staat prevaleert boven wat elders staat, dus als er niets had gestaan dat dan het in de ini opgenomen pad was gebruikt. Maar er stond dus wel wat, maar verouderd.

@ton Update: hier heb je nog wat voorbeelden van extra parameters die de Micropub-plugin bij mijn weten alle respecteert. indieweb.org/Micropub#h-entry Bijv. de al vernoemde `like-of`, enz. Als je een article wilt aanmaken (en geen loutere note), stuur je naast `content| ook `name` mee. Enzovoort. Best simpel, dus.
Kunt volgens mij ook `status=draft` meesturen, maar zie het zo meteen niet terug.

Wat je ook kunt doen is in WP debug logging aanzetten en via een bestaande client iets posten …

@ton In `wp-content/debug.log` zie je dan exact welke parameters er doorgestuurd/ontvangen zijn. Kun je hetzelfde ook eens proberen.

Sign in to participate in the conversation
Mastodon

The social network of the future: No ads, no corporate surveillance, ethical design, and decentralization! Own your data with Mastodon!