公式: ATPのデータリポジトリ―のダウンロード・パース・エクスポート方法はデータ分析に有用

protocol/ATP/atproto
概要

公式:BlueskyのPDS分割実施はオープンネットワークへの接近 | GNU social JP Web」に続くAT Protocolの公式情報の紹介です。時系列としては、「公式: AT Protocolの2023年のロードマップでの連合開始は2024年初めの予定 | GNU social JP Web」の後で前回の記事の前です。

2023-11-06 Monに「Download and Parse Repository Exports | AT Protocol」の投稿があったので紹介します。

内容は、リポジトリ―のダウンロード・パース・エクスポート方法です。

Download and Parse Repository Exports

ATPの中核原則は、公開データへのシンプルなデータアクセスです。ユーザーデータはリポジトリ―に保存され、CARファイル (.car) としてエクスポートできます。今回はこのデータリポジトリ―のエクスポートと解析方法を説明します。

ユーザーのデータリポジトリ―はレコードで構成されており、各レコードはHTTP APIエンドポイントでJSON形式でアクセス可能です。

サンプルコードはGoプログラミング言語で記述されており、indigoのatproto SDKパッケージを使用してます。完全なソースコードは「cookbook/go-repo-export at main · bluesky-social/cookbook」にあります。

開発者向けに書いています。将来的には、ユーザーはアプリ内から自分のデータを簡単にエクスポートする機能を追加予定です。

Privacy Notice

ATPのデータは公開されているものの、他人の権利を尊重するように注意が必要です。

著作権だけでなく、コンテンツの削除やブロック関係もです。アカウント所有者による明示的な記載がない限り、画像その他のコンテンツに再利用の権利はないです。

Download a Repository

BlueskyのメインPDSのリポジトリ―のダウンロードURLを構築します。この場合、PDSホスト=tps://bsky.socialで、Lexiconエンドポイント=om.atproto.sync.getRepoで、アカウントDIDをクエリーパラメーターに指定します。

@atproto.comアカウントのダウンロードURLは以下となります。

https://bsky.social/xrpc/com.atproto.sync.getRepo?did=did:plc:ewvi7nxzyoun6zhxrhs64oiz

このエンドポイントは認証が不要な点に注意してください。ユーザーのリポジトリ―内データは公開されており、誰でもWebからダウンロード可能です。ただし、ミュートやリスト登録などのコンテンツは含まれません。

このURLを開くと、@atproto.comのリポジトリ―をダウンロードします。データの解析方法は後述します。

一般的な別のサーバーの場合、任意の [AT Identifier] (ハンドルかDID) から始めます。そして、アカウントのPDSサーバーを見つける必要があります。具体的には、ハンドルかDIDの解決と、#atproto_pdsuエントリーのパースも必要です。

github.com/bluesky-social/indigo/atproto/identityパッケージでこれらを以下のように処理します。

import (
    "fmt"
    "context"

    "github.com/bluesky-social/indigo/atproto/identity"
    "github.com/bluesky-social/indigo/atproto/syntax"
    "github.com/bluesky-social/indigo/xrpc"
)

func main() {
    run()
}

func run() error {
    ctx := context.Background()
    atid, err := syntax.ParseAtIdentifier("atproto.com")
    if err != nil {
        return err
    }

    dir := identity.DefaultDirectory()
    ident, err := dir.Lookup(ctx, *atid)
    if err != nil {
        return err
    }

    if ident.PDSEndpoint() == "" {
        return fmt.Errorf("no PDS endpoint for identity")
    }

    fmt.Println(ident.PDSEndpoint())
}

PDSエンドポイントがわかれば、ATP APIクライアントを作成し、tRepoエンドポイントを呼び出し、結果を保存できます。

carPath := ident.DID.String() + ".car"

xrpcc := xrpc.Client{
    Host: ident.PDSEndpoint(),
}

repoBytes, err := comatproto.SyncGetRepo(ctx, &xrpcc, ident.DID.String(), "")
if err != nil {
    return err
}

err = os.WriteFile(carPath, repoBytes, 0666)
if err != nil {
    return err
}

go-export-repoクックブックリポジトリ―の例では、download-repoの以下のコマンドで実現しています。

./go-export-repo download-repo atproto.com
resolving identity: atproto.com
downloading from https://bsky.social to: did:plc:ewvi7nxzyoun6zhxrhs64oiz.car

これで@atproto.comのハンドルがbsky.socialのPDSにあることがわかり、CARファイルを保存できました。

Parse Records from CAR File as JSON

CARファイルはIPLDの標準ファイル形式です (IPLD♦ CARv1 Specification)。Content Addressable aRchivesの略です。一連のバイナリー (CBOR) ブロックが連結された単純なバイナリー形式で、tarファイルやGitパックファイルと似ています。効率的なデータ処理・アーカイブストレージには適しますが、開発者はアクセスしにくいです。

残り11403文字。続きはSilver/Gold会員限定。

Free=0/Bronze=220/Silver=1100/Gold=1980円。

会員登録 (About Member)

Comments

Ads Blocker Image Powered by Code Help Pro

広告ブロッカー検知/Ads Blocker Detected

このサイトは会費と広告で運営されています。[Bronze=月220円以上に登録] するか、広告ブロッカーを無効にしてください。

This site is operated by membership and advertise. Please [register at least Bronze=220 JPY/month], or disable ads blocker.

Copied title and URL