ひまつぶし雑記帖

doncha.net制作・発行:KindleやiBooks、楽天kobo、BOOK☆WALKERで読む電子書籍

ActivityPubでoutboxの実装

2023/7/18 [10:11:56] (火) 天気

ActivityPubを通じて、Fediverse連合空間にユーザーアカウントとして認識してもらえるようになった。

次はウチのつぶやきというか投稿を拾ってもらえる、たとえばMastodonでtokorotenのコンテンツを表示してもらえるのが目標。

そのためには適切なoutboxを用意する必要がある。
よくわかってないけど、outboxてのは、これまでの行動、投稿のログ、という理解で大丈夫かな。outboxのtypeはOrderedCollectionがMUSTとされていて、たぶん順番も見られるんだろう。

あ。今さらだけど、わたしはど素人なので、見様見真似。間違った情報を垂れ流すことが多くてすみません。先に謝っておきます。

/actor/outbox
へのアクセスに対してこれまで投稿履歴を返す。
create(投稿)したnote(発言)とそれらを取得するためのurlなどの情報が羅列されたjson。
image 
こんな感じだろうと思われる(大雑把)
「投稿」を「投稿しました」で包んで、そいつを順番に並べたものがoutboxという箱になる。

実際に配置したのが以下のoutbox。
といっても、お約束、決まり事通りに並べて作ってるだけなので、手数はともかく、それほど難しいものではない。

{"@context": "https://www.w3.org/ns/activitystreams",
"id": "https://tokoroten.doncha.net/t2aki/outbox",
"summary": "outbox of t2aki@tokoroten.doncha.net",
"type": "OrderedCollection",
"totalItems": 2,
"orderedItems": [{
"type": "Create",
"id": "https://tokoroten.doncha.net/t2aki/activity/00054-20230717",
"url": "https://tokoroten.doncha.net/t2aki/activity/00054-20230717",
"published": "2023-07-17T12:45:08Z",
"actor": "https://tokoroten.doncha.net/t2aki",
"to": ["https://www.w3.org/ns/activitystreams#Public", "https://tokoroten.doncha.net/t2aki/followers"],
"object": {
"type": "Note",
"id": "https://tokoroten.doncha.net/t2aki/items/00054-20230717",
"url": "https://tokoroten.doncha.net/t2aki/items/00054-20230717",
"published": "2023-07-17T12:45:08Z",
"to": ["https://www.w3.org/ns/activitystreams#Public", "htps://tokoroten.doncha.net/t2aki/followers"],
"attributedTo": "https://tokoroten.doncha.net/t2aki",
"content": "[2023/07/17 12:45]\u003cbr /\u003elog取得のサブルーチンはpostとgetでちょっといじらないとダメやな。帰ったら仕込む"
}
}, {
"type": "Create",
"id": "https://tokoroten.doncha.net/t2aki/activity/00053-20230717",
"url": "https://tokoroten.doncha.net/t2aki/activity/00053-20230717",
"published": "2023-07-17T11:37:47Z",
"actor": "https://tokoroten.doncha.net/t2aki",
"to": ["https://www.w3.org/ns/activitystreams#Public", "https://tokoroten.doncha.net/t2aki/followers"],
"object": {
"type": "Note",
"id": "https://tokoroten.doncha.net/t2aki/items/00053-20230717",
"url": "https://tokoroten.doncha.net/t2aki/items/00053-20230717",
"published": "2023-07-17T11:37:47Z",
"to": ["https://www.w3.org/ns/activitystreams#Public", "https://tokoroten.doncha.net/t2aki/followers"],
"attributedTo": "https://tokoroten.doncha.net/t2aki",
"content": "[2023/07/17 11:37]\u003cbr /\u003e他のアカウントのoutboxをみて、そこにあるnoteのURLを叩くとHTMLページが開くんだけど、なんでや。jsonが返ってくるんじゃなかったっけ。HTTPのヘッダを覗いてもjsonじゃなくてフツーのHTMLを返してるぞ。こちらのリクエストに応じてjsonをHTMLに変換してたりするのかな。謎だらけ。"
}
}]}


typeがNoteとなっているブロックが投稿内容で、このNoteが基本となっている。
idとurlは投稿内容へのリンク。このNoteのjsonを返す。
publishedは日付。JSTだから+9とか必要かもしれないけど、とりあえず。
attributedToは投稿者。
toはお約束事。

typeがCreateのブロックがNoteのブロックをobjectに包んでいる。
idとurlのリンクはこのCreateのjsonを返す。今日時点、返すのがこのブロックでいいのか謎。とりあえず。
各要素はNoteと同じなので以下略。

そのCreateブロックを順番に並べてoutboxの完成。

前回設定したwebfingerとactor.jsonで、マストドンで「t2aki@tokoroten.doncha.net」を検索するとユーザーアカウントとして認識される。
image
「他のサーバーの以前の投稿は表示されません」と記載されている状態。

今回outboxを設定したので、個々のNoteのリンクをマストドンで検索するとtokorotenの投稿がマストドンで表示される。
image

検索して一度表示されると、ユーザーアカウント表示の下にも表示されるようになった。
image
たぶん、検索して結果が返ってきたことで、このマストドンサーバーにキャッシュされたのかな。

ただ、やはり謎は深くて。

謎その1)
ユーザーアカウント画面の下の「リモートで表示」というリンクを開くと、わたしのactor.jsonが表示される。ほかのひとの「リモートで表示」を開くとマストドンで開いたり、やっぱりactor.jsonが返ってきたりいろいろ。
リモートで表示とは、マストドンの別サーバーだったら意図通りに開くけど、マストドンじゃないサーバーだったらjsonをそのまま開くということになってるんだろか。

謎その2)
mastodonやmisskeyのoutboxはNoteを包んだCreateブロックを持たずにfirstやlastといったリンクを返すだけだったりするんだけど、これはありなのか。

ActivityPub w3c.org
↑ここがActivityPubの本家本元(?)
頑張って読むしかないんだろうけど、爺さんにはつらいぞ、英語。

そして、やはりRSAで署名したPOSTをどこかに投げないことには始まらない。
これについてはレンタルサーバーにモジュールがないのでほぼ諦め。ローカルで作ってスクリプトで投げる、ぐらいしか思いつかないしなあ。

とはいえ、ごそごそスクリプトを考えるのは爺さんのボケ防止にちょうどいいパズルゲームでもあるなあ。

ちなみに。元ネタの「 ところてんx10 」はほぼ毎日たわごと並べてるので、RSSリーダーにでも登録していただけると更新をお届けできます。


すげー今さらのRSSとか!

[07/19 11:17:32]
謎その1は解決。
HTTP_ACCEPTを見て判別。jsonを要求されてたらjson、そうじゃなければHTMLを返してた。さっそくウチも導入。やっぱ生のjsonが返ってくるとびっくりするからなあ。

https://gihyo.jp/dev/serial/01/perl-hackers-hub/005902

AS2以外の形式の情報を返すこと(コンテントネゴシエーション)も認められています。これを利用して、同じURLでも、ActivityPubの情報を要求された場合はAS2形式の情報を、それ以外の場合はHTML形式での情報を返すようにしています。



[08/04 10:40:12]
publishedの日付問題。
飛んでくるPOSTというかjsonを見ると、JSTだけど+900やJSTという表記がなくて標準時になってる。
localtimeじゃなくてgmtimeを使えば良かった

»電子書籍制作代行についてはこちら

profile

profile

 
doncha.net
contact:
»運営者
@t2aki@tokoroten.doncha.net

ところてんx5

2024/4/27 12:51

図書館で作業。案の定、目視確認は一回じゃ抜け漏れが出る。
一応、最初に確認、反映させた箇所で大丈夫だったけど、これは先が思いやられる。

2024/4/27 08:52

もろもろ、問題山積でやる気が出なくてマズい。久しぶりに図書館の個人席にノパソ持ち込んで作業してみる、か。

2024/4/27 08:50

こっちはこっちで、問題ありあり

検索
<<2024/4>>
 123456
78910111213
14151617181920
21222324252627
282930

リンク

WINDOWS版サウンドノベル
おかえりください PC WINDOWS版サウンドノベル
『おかえりください』体験版