블루스카이는 올해 초 4천만 명의 사용자를 기록했으며, 트위터와 달리 오픈 프로토콜인 AT 프로토콜 위에서 동작합니다. 공개 데이터는 진정으로 공개되며, 설계상 기계가 읽을 수 있습니다. $5,000/월 엔터프라이즈 API 계층은 없습니다. 법률 전문가가 이해해야 할 비율 제한도 없습니다. 단순히 누구나 쿼리할 수 있는 깨끗한 REST API만 있습니다.
나는 이를 스크래핑하고 싶었습니다. 제가 생산 준비된 액터를 어떻게 만들고 그 과정에서 배운 점은 다음과 같습니다.
왜 Bluesky는 스크래핑하기 쉽다 (합법적으로)
대부분의 소셜 미디어 스크래퍼는 Cloudflare, 로테이팅 프록시, 그리고 서비스 약관의 회색 영역과의 싸움이지만 Bluesky는 다르다. AT 프로토콜은 제3자 클라이언트와 데이터 접근을 명시적으로 설계되었다. public.api.bsky.app에 있는 공개 API는 인증되지 않은 읽기 요청을 처리한다. 지문 인식이 없고, CAPTCHA가 없고, DOM 파싱도 없다.
유일한 접목점: 검색 엔드포인트 (app.bsky.feed.searchPosts)는 이제 무료 앱 비밀번호를 통해 인증이 필요합니다. 나머지 모든 것 - 작성자 피드, 스레드, 프로필 - 토큰 없이 작동합니다.
세 가지 모드를 만들었습니다
주요 B2B 사용 사례를 하나의 역할자가 다루고 싶었습니다.
게시물 검색 — 키워드와 해시태그 검색, 날짜 범위, 언어 필터링, 정렬 순서 사용bsky.social/xrpc/app.bsky.feed.searchPosts에 Bearer 토큰을 사용합니다.
작성자 피드 — 하나 이상의 핸들에서 모든 게시물을 가져옵니다. 인증이 필요 없습니다. 경쟁사 모니터링 또는 창작자의 콘텐츠 역사를 검토하는 데 유용합니다.
스레드 — 게시물 URL에서 전체 대화 트리를 가져옵니다. API는 중첩된 트리를 반환하며, 저는 깊이 우선으로 평평하게 만들어서 게시물의 깔끔한 순서 있는 목록을 얻게 됩니다.
주의할 점: API 라우팅
이게 나를 상처 입혔다. I was sending authenticated requests (with a JWT) to public.api.bsky.app. That endpoint is Cloudflare-fronted and returns 403 if you send auth tokens to it — it's for unauthenticated traffic only.
해결책: authenticated calls go to bsky.social. Unauthenticated reads go to public.api.bsky.app. You auth against bsky.social, get a JWT, then use that JWT only on subsequentbsky.social calls.
단일 저장소 배포 고민
TypeScript 단일 저장소에서 npm 워크스페이스를 사용하여 Apify 액터 포트폴리오를 구축하고 있습니다. 공유 라이브러리 (@apify-actors/shared)에는 PPE 충전 도우미 및 오류 클래스가 포함되어 있습니다. 로컬에서는 워크스페이스 해결이 깔끔하게 처리됩니다. Apify의 빌드 서버에서는 단일 저장소가 없습니다. 오직 업로드된 액터 폴더만 있습니다.
해결책: 공유 소스를src/shared/를 각 액터 내부에 넣고 상대적 임포트를 사용하세요. tsup은 모든 것을 하나의 dist/main.js로 묶어줍니다. 공유 코드는 저장소의 하나의 표준적인 위치에 남아있으며, 각 액터는 빌드 시 자신만의 사본이 포함됩니다.
출력 스키마
모든 게시물은 평평한 JSON 기록으로 반환됩니다.
{
"url": "https://bsky.app/profile/user.bsky.social/post/3lhxxxxxxxxx",
"text": "Post content here",
"authorHandle": "user.bsky.social",
"authorDisplayName": "User Name",
"likeCount": 142,
"repostCount": 28,
"replyCount": 19,
"images": [{ "thumb": "...", "fullsize": "...", "alt": "..." }],
"externalEmbed": { "uri": "...", "title": "...", "description": "..." },
"createdAt": "2025-11-15T10:30:00.000Z"
}
Apify에서 직접 JSON, CSV, 또는 Excel로 내보내기. Zapier 또는 Make에 플러그인하여 코드 없는 워크플로우 사용.
액터는 활성화됨
아무것도 만들지 않고 사용하고 싶다면: Apify 스토어의 Bluesky Posts Scraper
PPE 가격: 실행당 $0.25 + 게시물당 $0.003 ($3/1,000). 구독 없음.
AT 프로토콜은 Bluesky를 현재 작업할 수 있는 가장 깨끗한 데이터 소스 중 하나로 만듭니다. 만약 당신의 사용 사례가 사회적 리스닝, 브랜드 모니터링, 빠르게 성장하는 기술 선도적인 대중의 리드 생성 신호를 포함한다면, 스택에 추가하는 것이 가치가 있습니다.












