東京都のシビックテック「
Tokyo OSS Party 福井会場」でのプランのひとつ、ウェブ標準、W3Cの分散型SNSの規格、
ActivityPubを使った情報提供プラン。W3Cで長年話題になっていた情報のサイロ化に対するひとつの解!
Mastodonもプロトコルを途中で変更した模様、国産の実装MisskeyもActivityPub対応とのこと。
MastodonでURLを入力すると表示できた!
Misskeyからも!
「code4fukui/ActivityPub-test」
Denoをインストールした環境で、endpoint.txt に「https://example.com/」など、自分のサーバーのエントリーポイントを設定して、動かせばOK!
5つ星オープンデータで有名、語彙付きJSON、JSON-LDを使った比較的シンプルな仕様。DenoでひとまずアカウントがMastodonとMissikeyから認識できるまでを実装してみました。(参考、LOD3基準、JSON-LDとN-Quadsを相互変換するJavaScript ESモジュール&Denoモジュール on GitHub Pages)
対応しているリストはこんな感じ。いろいろ受け取ったデータであれこれしていく予定です。
Deno.serve({
port,
hostname: "[::]",
handler: async (request, info) => {
const path = new URL(request.url).pathname;
console.log(request, request.headers.accept, path);
if (path == "/nodeinfo/2.1") {
return await reply("./nodeinfo.json");
} else if (path == "/") {
return await reply("./person.activity.json");
} else if (path == "/.well-known/host-meta") {
return await reply("./host-meta.xml");
} else if (path == "/.well-known/webfinger") {
return await reply("./webfinger.jrd.json");
} else if (path == "/following") {
return await reply("./following.activity.json");
} else if (path == "/followers") {
return await reply("./followers.activity.json");
} else if (path == "/outbox") {
return await reply("./outbox.activity.json");
} else if (path == "/inbox") {
const param = await getParam(request);
await writeLog("inbox", param);
return await reply("./inbox.activity.json");
} else if (path == "/outbox") {
return await reply("./outbox.activity.json");
} else if (path == "/items/note.1.activity.json") {
return await reply("./note.1.activity.json");
} else {
return handleWeb("static", request, path, info);
}
},
});
「server.js#L47-L79 on ActivityPub-test」
links
- 東京都のお題をシビックテックで解決しよう!Tokyo OSS Party 福井会場と公園オープンデータ&マップアプリ