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を使えば良かった

[更新]2023-08-04 10:40:12

EPUBは微妙だなあ

2010/7/18 [09:06:14] (日) 天気

CSSってわけじゃないし、縦書き表示とか禁則処理とか決まってないし。

EPUBを基本として、リーダーが各自勝手な独自拡張で縦書き表示を実現する、という感じになっていくんだろうか。でも、それじゃ無駄な労力が増えるだけじゃないのか。


てことで、一発芸の縦書き表示はうまくいかなかった。

下町飲酒会駄文支部 日野裕太郎の立ち読みとかtwitterの縦書き表示で使ってる縦書き表示のHTMLとCSSは、FireFoxのEPUBリーダーだと意図通りの縦書き表示だけど、iPod touch のstanzaではぐちゃぐちゃ。

マークアップの規則、というか、タグというか、統一したものを決めてほしい。うーん、残念。


EPUBに日本語対応、というか縦書きを求めるのは無理なのか。それならもうPDFでいいんじゃないか。


[更新]2026-02-03 09:17:42

ディープな八百屋

2009/7/18 [22:30:09] (土) 天気

亀有の激安八百屋。地元のスーパーオオヤマとイイ勝負、らしい。

image
Zorki-4 Industar-22 CENTURIA200


仕事がらみが慌しくあれこれ面倒なことに。


もう、とにかく、腐れエクセルには1mmも触りたくない。


機械にできることは機械にやらせりゃええんだ。てことで、perlでスクリプトを何本か書いて、ついでにグラフ機能もブラウザ経由(cgiにして)OpenChartsFreeで表示するようにあれこれ画策。エクセルの無味乾燥なグラフと違って、OpenChartsFreeのグラフはFlashで演出つきだし、CGIでオペレーションもできる。時系列で並ぶ数字を眺めるだけじゃピンとこないけど、グラフで見えるようにすると分かる、ような気がする。


まだまだ、糞エクセルを触らなきゃいけない状況があるので、perlのスクリプトで置き換えないと。…コピペだの、カラムに決まったものを入れるのにいちいち手作業だの、やってられん。


世の中に氾濫する腐りきったエクセルと、それにまつわる作業コスト。本当にそれが必要なのか、ちゃんと考えたほうが良くないか。うううむ。エクセルには、イラつくムカつく。


ソビエトカメラ党宣言

『ソビエトカメラ党宣言』

中村 陸雄

[更新]2012-06-21 19:28:10

巻き込まれる

2006/7/18 [19:34:35] (火) 天気

いやあ。すげー話だ。

景気のいい花火をブチあげて4月に分社化して、先週の金曜に引越して事務所開きの乾杯をしたと思ったら、翌週の今日、早々事務所解約。具体的なことを書くとなにかとまずいので伏せておくけど、思いつきで始めて、思い通りにならないからと止めてしまうって、企業人としてどうなんだろう。社会貢献とか継続成長性とか。上場したくてしょうがないみたいだから、計画倒産にはしないだろうけど、どうすんだろ。休眠会社にしちゃうのかな。

妙なものに巻き込まれてしまった、という感想でいいのかな。


とはいえ、この一年で、いい勉強させてもらった。

perlとかCGIでは遊んでたけど、仕事で使ったのは今回だし、サーバーのインストール・運用なんてのも仕事にしたのは初めてだった。


来月以降はまた職探しやな。WEBの便利屋とかってできればいいんだけど、営業力がなぁ…。


社長! こんな会社が倒産します

『社長! こんな会社が倒産します』

落合 孝裕

[更新]2012-06-21 13:42:34

地方小都市

2005/7/18 [22:48:43] (月) 天気

予定もなかったんだけど、なんとなく急遽松戸とか柏とか、都内近郊地方都市に行ってみた。…うううむ、利用してるひとには申し訳ないがどちらもビミョーな街だなぁ。北方とか大沢の小説の舞台になりそうではあるけど、頻繁に行こうという感じの街じゃなかった。駅ビルにしても統一感がなく、いかにも増改築を繰り返してたまたまできあがっております、といった風情でエレベーター、エスカレーターひとつ取ってみても乗り継ぎがまともじゃないし、売り場もバラバラ。

とりあえず、松戸駅前には吉祥寺にあった半兵衛があったんで、そこにだけは通ってもいいかなとも。ふたりで三時間超いて飲み食いして満腹になり7000円ちょいというのは吉祥寺も同じで懐にとてもやさしいじゃありませんか。


なもんで、とくに収穫もないいちんち(松戸ブックオフで「真夜中の死線」を105円再購入したぐらい)ただひたすら暑くて、これから夏に向けてさらに暑くなるんだなぁといううっとーしー認識を新たにしただけのいちんちだった。

明日からはまた職安に通ってはやいとこなんとかしなければなりません。

[更新]2026-02-04 14:44:57

<<2026/07>>
   1234
567891011
12131415161718
19202122232425
262728293031

【最近の10件】

日常読書映画アニメゲーム健康料理グルメカメラ写真ネタ仕事パソコンインターネットperlEPUB3電子書籍ActivityPub
検索: