Slide 1

Slide 1 text

଎श931$ #MVFTLZ"51SPUPDPMษڧձ ח૔ !PNJCTLZTPDJBM

Slide 2

Slide 2 text

ࣗݾ঺հ w 8FCΤϯδχΞ w ੨Ӣͱ͍͏#MVFTLZ༻"OESPJEΫϥΠΞϯτΛ࡞ͬͯ·͢ w IUUQTHJUIVCDPNBLJPNJLTFJVO

Slide 3

Slide 3 text

લఏ஌ࣝͱΰʔϧ w લఏ஌ࣝ w Ұൠతͳ8FC"1*͕৮ΕΔ w ˞࣮૷ऀࢹ఺ͷ࿩͕த৺Ͱ͢ w ΰʔϧ w -FYJDPOͷجຊతͳา͖ํ͕Θ͔Δ w ཁ఺Λ͔͍ͭ·ΜͰۦ͚଍ؾຯʹਐΈ·͢

Slide 4

Slide 4 text

ΞδΣϯμ w ओཁͳͭͷ༻ޠ 931$ɺ-FYJDPOɺ/4*%  w -FYJDPOೖ໳ ୳͠ํͱओཁͳܕ  w ϦΫΤετͱೝূ w SFDPSEͱϦϙδτϦͷૢ࡞ w ͦͷଞ

Slide 5

Slide 5 text

ओཁͳͭͷ༻ޠ

Slide 6

Slide 6 text

931$ w $SPTTTZTUFN3FNPUF1SPDFEVSF$BMMT w 31$ ԕִखଓ͖ݺͼग़͠ ͷن֨ͷҰछ w H31$ 40"1  w "51SPUPDPMͷಠࣗ࢓༷ w )551 4 ͷ্Ͱಈ࡞ w 1%4ͱͷσʔλͷ΍ΓऔΓʹར༻

Slide 7

Slide 7 text

-FYJDPO w ϨΩγίϯ w ӳ<໊>༻ޠूɺޠኮɺࣙॻ w 931$ͷϝιου΍σʔλܕͷఆ ٛ w ·ͨ͸ͦΕΒͷϑΥʔϚοτ +40/4DIFNB෩

Slide 8

Slide 8 text

/4*% w /BNF4QBDFE*% w -FYJDPOͷϦιʔεΛҰҙʹࣝผ͢ ΔͨΊͷ*% w 3FWFSTF%/4ܗࣜͰදه w +BWBͰΑ͘ݟΔΞϨ w ΤϯυϙΠϯτ·ͨ͸ܕͱͯ͠࢖༻

Slide 9

Slide 9 text

"51SPUPDPM 931$ Ͱͷ"1*ݺͼग़͠ -FYJDPOʹΑͬͯݺͼग़͕͠ఆΊΒΕͨ /4*%ܗࣜͷΤϯυϙΠϯτΛίʔϧ

Slide 10

Slide 10 text

-FYJDPOࣄ࢝Ί

Slide 11

Slide 11 text

-FYJDPOͷ୳͠ํ w ެࣜυΩϡϝϯτʹҰཡ͋Γ·͢ w IUUQTBUQSPUPDPNEPDT w ͨͩ͠৘ใ͕ݹ͔ͬͨΓ΍ෆ଍͍ͯ͠ Δ৔߹΋ w ࠷৽ͷ࢓༷ʹ͍ͭͯ͸HJUIVCͷϦϙδτ ϦͷMFYJDPOTΛࢀর͢Δͷ͕࣮֬ w IUUQTHJUIVCDPNCMVFTLZTPDJBM BUQSPUPUSFFNBJOMFYJDPOT

Slide 12

Slide 12 text

-FYJDPOͷܕ w PCKFDU w QSPDFEVSF w RVFSZ w ϓϦϛςΟϒܕ JOUFHFS΍TUSJOHͳͲ  w ಛघͳܕ SFDPSE SFG VOJPO CMPC UPLFO TVCTDSJQUJPOͳͲ  w ࠓճ͸SFDPSEͷΈѻ͍·͢

Slide 13

Slide 13 text

PCKFDU { "id": "app.bsky.actor.defs", "defs": { "profileViewBasic": { "type": "object", "required": ["did", "handle"], "properties": { "did": { "type": "string" }, "handle": { "type": "string" }, "avatar": { "type": "string" }, "viewer": { "type": "ref" }, "labels": { "type": "array" } } } } } w Ұൠతͳσʔλܕ w SFRVJSFE͸OPUOVMM w ˠͷ/4*%͸ BQQCTLZBDUPSEFGTQSP fi MF7JFX#BTJD ˞ൈਮ

Slide 14

Slide 14 text

QSPDFEVSF { "id": "com.atproto.server.createSession", "defs": { "main": { "type": "procedure", "input": { "schema": { "properties": { "identifier": { "type": "string" }, "password": { "type": "string" } } } }, "output": { "schema": { "properties": { "accessJwt": { "type": "string" }, "did": { "type": "string" }, } } } } } } w ߋ৽ܥϝιου w JOQVUPVUQVUΛ࣋ͭ w ӈͷ/4*%͸ DPNBUQSPUPTFSWFSDSFB UF4FTTJPO NBJO͸লུ ˞ൈਮ

Slide 15

Slide 15 text

RVFSZ { "id": "app.bsky.feed.getTimeline", "defs": { "main": { "type": "query", "parameters": { "type": "params", "properties": { "cursor": { "type": "string" } } }, "output": { "schema": { "properties": { "cursor": { "type": "string" }, "feed": { "type": "array" } } } } } } } w ࢀরܥϝιου w QBSBNFUFSTPVUQVUΛ࣋ͭ w ˠͷ/4*%͸ BQQCTLZGFFEHFU5JNFMJO F ˞ൈਮ

Slide 16

Slide 16 text

ϦΫΤετͱೝূ

Slide 17

Slide 17 text

ϦΫΤετ w #MVFTLZͷ৔߹͸IUUQTCTLZTPDJBMYSQDOJTEʹରͯ͠ߦ͏ w αʔυύʔςΟ1%4ͷ৔߹͸ACTLZTPDJBMAͷ෦෼͕มΘΔ w ྫ w QSPDFEVSF1045IUUQTCTLZTPDJBMYSQD DPNBUQSPUPTFSWFSDSFBUF4FTTJPO w RVFSZ(&5IUUQTCTLZTPDJBMYSQDBQQCTLZGFFEHFU5JNFMJOF

Slide 18

Slide 18 text

ϩάΠϯͷ-FYJDPO { "id": "com.atproto.server.createSession", "defs": { "main": { "type": "procedure", "input": { "encoding": "application/json", "schema": { "required": [ "identifier", "password" ], "properties": { "identifier": { "type": "string" }, "password": { "type": "string" } } } } } } } ˞ൈਮ ϦΫΤετ͸1045 ϦΫΤετ#PEZ͸+40/ JEFOUJ fi FSͱQBTTXPSE͸ඞਢ IBOEMFPSFNBJM ΤϯυϙΠϯτ͸ YSQDDPNBUQSPUPTFSWFSDSFBUF4FTTJPO

Slide 19

Slide 19 text

ϩάΠϯͷϦΫΤετ curl -X POST \ -H 'Content-Type: application/json' \ -d '{"identifier": "tester.bsky.social", "password": "foo"}' \ 'https://bsky.social/xrpc/com.atproto.server.createSession' # response { "did":"did:plc:ji4f2ypncqko5cm62pmyxh67", ... "accessJwt":"...", "refreshJwt":"..." } ೝূ͕ඞཁͳΤϯυϙΠϯτ͸ ฦ͖ͬͯͨ+85ΛϦΫΤετʹؚΊΔ

Slide 20

Slide 20 text

RVFSZͷ-FYJDPO ϢʔβϑΟʔυͷऔಘ { "id": "app.bsky.feed.getAuthorFeed", "defs": { "main": { "type": "query", "parameters": { "type": "params", "required": ["actor"], "properties": { "cursor": { "type": "string" } } } } } } ˞ൈਮ ϦΫΤετ͸(&5 ΫΤϦύϥϝʔλ ΤϯυϙΠϯτ͸ YSQDBQQCTLZGFFEHFU"VUIPS'FFE BDUPS ͲͷϢʔβ͔ ͸ඞਢ

Slide 21

Slide 21 text

RVFSZͷϦΫΤετ ϢʔβϑΟʔυͷऔಘ curl -X GET -H 'Authorization: Bearer ${createSessionで取得したaccessJwt}' 'https://bsky.social/xrpc/app.bsky.feed.getAuthorFeed?actor=foo'

Slide 22

Slide 22 text

ϦϙδτϦͱSFDPSE

Slide 23

Slide 23 text

ϦϙδτϦ %BUB3FQPTJUPSZ w 5-%3 w ϦϙδτϦ͸ॺ໊σʔλͷίϨΫγϣϯ w HJUͷϦϙδτϦΈ͍ͨͳ΋ͷ ͨͩ͠%#ͷϨίʔυ༻  w Ϣʔβ͸֤ʑͷެ։ΞΫςΟϏςΟΛࣗ෼ͷϦϙδτϦʹ௥ه w #MVFTLZ BQQCTLZ ͷ৔߹ɺ౤ߘɾϑΥϩʔɾ͍͍ͶͳͲ͕֨ೲ͞ ΕΔ

Slide 24

Slide 24 text

SFDPSE { "id": "app.bsky.feed.post", "defs": { "main": { "type": "record", "key": "tid", "record": { "type": "object", "required": ["text", "createdAt"], "properties": { "text": { "type": "string" }, "createdAt": { "type": "string", "format": "datetime" } } } } } } w ϦϙδτϦ༻ͷσʔλܕ w ˠ͸#MVFTLZͷ౤ߘ QPTU ͷܕ ˞ൈਮ

Slide 25

Slide 25 text

ϦϙδτϦૢ࡞ { "id": "com.atproto.repo.createRecord", "defs": { "main": { "type": "procedure", "input": { "encoding": "application/json", "schema": { "type": "object", "properties": { "repo": { "type": "string" }, "collection": { "type": "string" }, "record": { "type": "unknown" } } } } } } } w ϦϙδτϦ΁ͷϨίʔυ ௥ՃͷQSPDFEVSF w ౤ߘ΍ϑΥϩʔͳͲ͸ର ৅ͱͳΔSFDPSEΛ౉ͯ͠ ߦ͏ ˞ൈਮ

Slide 26

Slide 26 text

౤ߘ࡞੒ͷϦΫΤετ curl -X POST \ -H 'Authorization: Bearer ${accessJwt}' \ -H 'Content-Type: application/json' \ -d '{ "repo": "tester.bsky.social", "collection": "app.bsky.feed.post", "record": { "text": "Hello, world!", "createdAt": "2023-04-28T22:00:00+09:00" } }' \ 'https://bsky.social/xrpc/com.atproto.repo.createRecord'

Slide 27

Slide 27 text

ͦͷଞࡉ͔͍৭ʑ w SLFZ͸BUBMJDFIPTUDPNJPFYBNQMFTPOHZ*D[DDQBͷ Z*D[DDQB w CMPCͷܕ͸͜ͷลΛࢀর w େഁյҎલͷσʔλ͸SFGͱTJ[F͕ͳ͍ͷͰ஫ҙ w !BUQSPUPBQJͩͱࣗಈͰSFGͱTJ[FΛิ׬͢ΔΑ͏ʹͳ͍ͬͯΔ w ΤϥʔϋϯυϦϯά͸͜͜Λࢀর

Slide 28

Slide 28 text

ิ଍ͱ͔ w ۦ͚଍Ͱ͢Έ·ͤΜʂ w ʮࠓ೔ͷൃදͳΜ΋Θ͔ΒΜ͔ͬͨʯͱ͍͏ํ͸NBUUO͞Μͷʰ։ൃ ࢹ఺͔ΒݟΔɺ৽͍͠෼ࢄܕ4/4ʮ#MVFTLZʯͱ"51SPUPDPMͷՄೳ ੑʱͱ͍͏هࣄ΋νΣοΫͯ͠Έ͍ͯͩ͘͞ w IUUQTHJIZPKQBSUJDMFCMVFTLZBUQSPUPDPM

Slide 29

Slide 29 text

Ҏ্🫡