Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
PHP x Nostr
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Hakkadaikon
November 21, 2024
Programming
190
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
PHP x Nostr
第170回 PHP勉強会@東京で発表した内容
https://phpstudy.connpass.com/event/335943/
Hakkadaikon
November 21, 2024
More Decks by Hakkadaikon
See All by Hakkadaikon
MoQTフルスクラッチ実装
hakkadaikon
1
78
Just do it ! で 走り抜けてきたけど ちょっと立ち止まってみた
hakkadaikon
0
920
自作WebSocket (RFC6455)
hakkadaikon
0
160
routstrについて
hakkadaikon
0
180
Nostr x BTC
hakkadaikon
0
78
Blueskyのプラグインを作ってみた
hakkadaikon
1
870
Emacs x Nostr
hakkadaikon
2
430
My Introduction To Nostr
hakkadaikon
0
270
Nostr × C#
hakkadaikon
0
270
Other Decks in Programming
See All in Programming
週末にAI-DLCを本気で回したら$1,600溶けた
hbashimizu
0
130
まだ間に合う!今年の夏こそSchemeのマクロ展開器を完全理解!
omasanori
0
650
AWS DevOps Agentで インシデント対応をAIに任せたい
honmarkhunt
7
2.7k
Family mrubyの進捗
kishima
1
110
GraphRAGのKnowledge Graphを 直接!見る/View-GraphRAG's-KnowledgeGraph-directly!
tyumugi1113
1
280
XHTMLが残したもの
yosuke_furukawa
PRO
2
690
AIとGame Jamで、ゲームを完成させた話
takahirosaeki
0
120
ソフトウェアラスタライザ
fadis
1
800
モバイル交通系ICへのチャージ実例から考える、クロスプラットフォーム開発におけるiOS実機テスト設計とCI運用
yusuga
1
300
高専キャリア LT 発表内容
crysta1221
6
5.6k
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
4
650
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
170
Featured
See All Featured
The browser strikes back
jonoalderson
0
1.7k
How to make the Groovebox
asonas
2
2.4k
Product Roadmaps are Hard
iamctodd
55
13k
Test your architecture with Archunit
thirion
2
2.4k
Designing for Timeless Needs
cassininazir
1
470
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.2k
エンジニアに許された特別な時間の終わり
watany
108
250k
Practical Orchestrator
shlominoach
191
12k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
250
Paper Plane (Part 1)
katiecoart
PRO
1
11k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
270
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
190
Transcript
イラスト: @Bitpopart https://nostr-php.dev
自己紹介
名前 : 発火大根 PHP歴 : 3-4年くらい PHP勉強会 : offで1回参加したことあり 自己紹介1
自己紹介2 ~直近の活動~ 2024/9/23, Nostrの国際カンファレンスの 発起人をやりました。 (参加者99人、海外から参加/登壇多数) 登壇したり Nostrを提唱したfiatjaf氏に メッセージ貰ったり マグロの
解体ショーも!
Q.Nostrとは?
A.プロトコルです
Twitter(X)ぽいSNSとか Damus Nostter
クックパッド みたいなサービスとか zap.cooking
NoteやQiitaみたいな エントリ投稿できるやつとか YakiHonne
色々作れます
①WebSocket通信で速い ②電話番号メールアドレスいらない ③潰れない Nostrの特徴
①WebSocket通信で速い Nostr Websocket TCP / IP Ethernet Physical パケット クライアント
リレー (サーバー)
②電話番号メールアドレスいらない { "content": "test", “created_at”: 1726456407, "id": "7b31d7a9d9e8f65b1e3102a4cdc...", "kind": 1,
"pubkey": "101b30ee88c27a13de68bf7...", "sig": "3d7d019db85deece5c1d704c987393957bb8c5c61458...", "tags": [] } ・アカウント=鍵(公開鍵/秘密鍵) ・全てのイベント発行時に電子署名する
③潰れない ・自分で選んだ複数のリレーにデータをバラまく
今年から、他の界隈 x Nostrの組み合わせで 何回かLTをやっています 2024/2/10 Nostr x Vim 2024/4/27 Nostr
x C# 2024/10/27 Nostr x Emacs 2024/11/21 Nostr x PHP <- 今日
PHPでも Nostr開発 してみよう
使うOSS (PHP製のNostrプロトコルスタック) 8.1以上で動くよ
STEP1. laravelのプロジェクトを作る $composer create-project --prefer-dist laravel/laravel nostr-console
STEP2. nostr-phpをインストール $ composer require swentel/nostr-php
STEP3. artisanコマンドを作る $ php artisan make:command FetchTimelineCommand
STEP4. ちょろっと ソース書く(38L) <?php namespace App¥Console¥Commands; use Illuminate¥Console¥Command; use swentel¥nostr¥Filter¥Filter;
use swentel¥nostr¥Message¥RequestMessage; use swentel¥nostr¥Relay¥Relay; use swentel¥nostr¥Request¥Request; use swentel¥nostr¥Subscription¥Subscription; class FetchTimelineCommand extends Command { protected $signature = 'app:fetch-timeline-command {--kinds=1} {--limit=1}'; protected $description = 'Fetch the nostr timeline'; public function handle() { $kinds = array_map('intval', explode(',', $this->option('kinds'))); $limit = intval($this->option('limit')); $subid = (new Subscription())->setId(); $filter = (new Filter())->setKinds($kinds)->setLimit($limit); $response = ( new Request( new Relay('wss://yabu.me'), new RequestMessage($subid, [$filter]) ) )->send(); echo sprintf("%s¥n", json_encode($response, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)); return 0; } }
NostrのTLを取得する コンソールアプリが 出来ました
早速動かしてみよう! $ php artisan app:fetch-timeline-command --kinds=1 --limit=1 --kinds : イベント種別
(0:プロフィール 1:投稿 7:リアクション etc…) --limit : イベント取得件数
{ "wss://yabu.me": [ { "type": "EVENT", "isSuccess": true, "message": "",
"subscriptionId": "Wd2SDCfvkh9T0eO6I1Mgw85iJbqGURLtjEr7BKmAyPasZNXHo4cFYuQ3lzxpnV", "event": { "content": "てすと", "created_at": 1732172057, "id": "de20ad56d21cf4c2e1fae1c67a58dbe475120fecded61c4563ed1faeff7b9839", "kind": 1, "pubkey": "101b30ee88c27a13de68bf7c8c06368ea3e3e837641595c18675677d18a46a45", "sig": "4d7002e71853282e61cb97ff0e093457d3dfd5c99fd512b1e074aaaca1a50a84250b3d16f6b895b7ebf0c8df1f247aee1cd0569f7075f937ed5e8ddf5bd0f36d", "tags": [] } }, { "type": "EOSE", "isSuccess": true, "message": "", "subscriptionId": "Wd2SDCfvkh9T0eO6I1Mgw85iJbqGURLtjEr7BKmAyPasZNXHo4cFYuQ3lzxpnV" } ] } こういうjsonが取れます
結構カンタンに つくれる
awesome- nostr-japan
気軽にやってみよう!仕組みはシンプル
Thank you for your attention !