Webmention

PHP Usergroup Leipzig

August 2017

Christian Weiske

Webmention

W3C-Empfehlung seit Januar 2017

Ziel:
Einer anderen Seite Bescheid sagen, daß man auf sie verlinkt hat.
Methode:
HTTP-POST mit Quell- und Zielseite als Parameter

https://www.w3.org/TR/webmention/

Vorherige Technologien

Schlüsselwort: Linkback

Trackback
2002: Trackback 1.1 http://archive.cweiske.de/trackback/trackback-1.2.html
Pingback
2002: Pingback 1.0 http://www.hixie.ch/specs/pingback/pingback

Trackback

HTTP-POST and Ping-URL mit mehreren Parametern:

Problem: Der Sender kann festlegen, wie der Trackback angezeigt werden soll.

Ergebnis ist XML. HTTP-Statuscode wird ignoriert.

Trackback: Ping-URL-Erkennung

Methode: RDF als Kommentar im HTML-Kopf

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Mein Blogeintrag</title>
    <!--
    <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
             xmlns:dc="http://purl.org/dc/elements/1.1/"
             xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
     <rdf:Description rdf:about="http://www.foo.com/archive.html#foo"
                      dc:identifier="http://www.foo.com/archive.html#foo"
                      dc:title="Foo Bar"
                      trackback:ping="http://www.foo.com/tb.cgi/5" />
    </rdf:RDF>
    -->
  </head>

Pingback

XML-RPC war gerade hip.

HTTP-POST von XML-RPC-Daten:

<?xml version="1.0"?>
<methodCall>
  <methodName>pingback.ping</methodName>
  <params>
    <struct>
      <member>
        <name>sourceURI</name>
        <value><string>http://bob.example.org/reply.html</string></value>
      </member>
      <member>
        <name>targetURI</name>
        <value><string>http://alice.example.org/blogpost.html</string></value>
      </member>
    </struct>
  </params>
</methodCall>

Ergebnis is XML. HTTP-Statuscode wird ignoriert.

Pingback: RPC-URL-Erkennung

  1. X-Pingback-Header

  2. Regex im Body:

    <link rel="pingback" href="([^"]+)" ?/?>
    

Pingback: Verarbeitung

Es wird empfohlen, den Pingback direkt zu verabeiten:

Problem: Spam, DDOS

Anzeige des Pingbacks nicht spezifiziert (nur informelles Beispiel).

Webmention

HTTP-POST mit Quell- und Zielseite:

$ curl --data source=http://bob.example.org/reply.html\
       --data target=http://alice.example.org/blogpost.html\
       http://alice.example.org/webmention.php

Auch bei aktualisieren und löschen von Seiten.

Webmention: Endpunkt-Erkennung

  1. Link-Header mit rel="webmention":

    Link: <http://alice.example.org/webmention.php>; rel="webmention"
    
  2. <link rel="webmention">-Tag im <head>

  3. <a rel="webmention">-Tag im <body>

Erfodert einen vollständigen HTML(5)-Parser.

Webmention: Verarbeitung

Synchron:
HTTP-Statuscode 200 OK
Asynchron mit Status-URL:

HTTP-Statuscode 201 Created

Location-Header mit Status-URL

Asynchron ohne Status-URL:
HTTP-Statuscode 202 Accepted

Asynchrone Verarbeitung wird empfohlen. Anzeige der Webmention nicht spezifiziert (nur informelles Beispiel).

Webmention: Vouch

Spampoblem ist nicht gelöst.

Vouch als Anti-Spam-Methode.

Man schickt bei Webmention noch vouch-Parameter mit:
Seite, die auf eigene URL linkt, und die von Empfänger verlinkt wird

Webmention: Vouch #2

  1. Bob will Webmention an Alice schicken
  2. Alice lehnt Webmention ab, könnte Spam sein
  3. Bob sucht Blogpost von Charlie, der auf ihn linkt
  4. Charlie muss von Alice verlinkt werden (Vertrauen)
  5. URL von Charlie-Blogpost als vouch-Parameter

Wird von (fast) niemandem implementiert.

Sehr schwer umzusetzen.

Mikroformate

Microformats, http://microformats.org/

Ziel
Automatisches Extrahieren von Daten aus HTML-Seiten, ohne daß maschinenlesbares Zweitformat angeboten werden muss.
Wirkliches Ziel Webmention+Microformats:
Kommentare automatisch unter Blogposts darstellen.

Mikoroformate: Beispiel

<div class="h-entry">
  <h1 class="p-name">Vortragsfolien zu Webmention</h1>
  <div class="e-content">
    <p>
      Die Vortragsfolien zum Webmention-Vortrag bei der PHPUGL sind
      <a href="http://example.org/slides/wm">hier</a> zu finden.
    </p>
    <p>
      Veröffentlicht am
      <time class="dt-published" datetime="2017-08-31T23:42:00Z">31.08.2017</time>.
    </p>
  </div>
</div>

Mikroformate: Formate

Übersicht: http://microformats.org/wiki/microformats2

h-entry
Blogpost
h-card
Kontaktdaten
h-event
Termindaten
h-feed
Liste an Blogposts
h-recipe
Rezept
h-review
Bewertung

Mikroformate: Verarbeitung

Man braucht eine Bibliothek mit HTML(5)-Parser.

Existieren für verschiedene Programmiersprachen:

Sehr komplex, besonders bei Verschachtelung und 100 Datumsformaten.

http://microformats.org/wiki/microformats2#Parsers

Mikroformate: Online-Parser

Tools, um das online zu probieren:

Mikroformate: Unterstützung

Google unterstützt Mikroformate.

code/google-hreview.png

brid.gy

Stellt Posts von Facebook, Twitter u.a. mit Mikroformaten dar.

Verschickt Webmentions: Automatische Kommentare.

https://brid.gy/

Beispiele

Likes, Replies, Mentions
https://aaronparecki.com/2017/08/15/11/eclipse-day-trip
Replies

https://seblog.nl/2017/07/24/1/queue-for-kirby

https://www.jeremycherfas.net/blog/getting-there

Ende

Fragen?