소스 정보
- 저장소
- bam-bam-2/solo-skills
- 최근 소스 활동
- 2026년 8월 22일 13:42
- 감지된 SKILL.md 언어
- 한국어
- 스타
- 335
- 포크
- 82
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/bam-bam-2/solo-skills --skill daangn-search명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SKILL.md 표시 중
SOC 직업 분류 기준
| name | daangn-search |
| description | 당근마켓을 구·시·전국 단위로 훑는다. 당근 웹 검색은 동 하나로만 되기 때문에, 지역코드를 순회해야 넓게 찾을 수 있다. |
당근 웹(www.daangn.com)의 중고거래 검색은 선택된 행정동 하나의 매물만 보여준다.
"전국 검색" 기능이 없다. 넓게 찾으려면 지역코드를 바꿔가며 순회해야 한다.
https://www.daangn.com/kr/buy-sell/?in=x-<지역ID>&search=<검색어>&only_on_sale=true
in 파라미터의 이름 부분은 무시되고 숫자 ID만 유효하다. x-448처럼 아무 이름이나 써도 된다only_on_sale=true 를 붙이면 거래완료 매물이 빠진다. 안 붙이면 결과 대부분이 이미 팔린 것시도 순서로 연속 배치돼 있다. 서울은 구 단위로 아래와 같다.
| 구 | ID | 구 | ID |
|---|---|---|---|
| 종로 | 3~19 | 양천 | 239~260 |
| 중구 | 20~35 | 강서 | 261~280 |
| 용산 | 36~52 | 구로 | 281~296 |
| 성동 | 53~70 | 금천 | 297~306 |
| 광진 | 71~86 | 영등포 | 307~325 |
| 동대문 | 87~110 | 동작 | 326~340 |
| 중랑 | 111~127 | 관악 | 341~361 |
| 성북 | 128~144 | 서초 | 362~380 |
| 강북 | 145~157 | 강남 | 381~403 |
| 도봉 | 158~172 | 송파 | 404~431 |
| 노원 | 173~185 | 강동 | 432~450 |
| 은평 | 186~206 | ||
| 서대문 | 207~220 | 마포 | 221~238 |
서울 밖: 부산 451~, 대구 680830, 인천 831960, 광주 961, 대전 1051,
울산 1151, 세종·경기 12511800, 강원 ~1900, 충북 ~2100, 충남 ~2400, 전북 ~2700, 전남 ~3000.
경계는 정확하지 않다. 확인이 필요하면 아래로 지역명을 읽어 검증한다.
const m = html.match(/data-gtm="search_filter">([^<]+)</); // "서울시 강동구 둔촌동"
function parseL(html){
const re=/<a data-gtm="search_article"[^>]*href="(\/kr\/buy-sell\/[^"]+)"[\s\S]*?<\/a>/g;
const res=[]; let m;
while((m=re.exec(html))){
const seg=m[0];
const txt=seg.replace(/<img[^>]*>/g,'').replace(/<svg[\s\S]*?<\/svg>/g,'')
.replace(/<[^>]+>/g,'\u0001').split('\u0001').map(s=>s.trim()).filter(Boolean);
res.push({href:'https://www.daangn.com'+m[1], t:txt.join(' | ')}); // "제목 | 가격 | 동네 | 시간"
}
return res;
}
상세 페이지는 fetch 후 매너온도 다음 20줄 정도를 읽으면 본문·채팅수·관심수가 나온다.
CloudFront가 앞단에 있어 너무 빠르면 403이 뜬다. 한 번 막히면 1~2분 쉬어야 풀린다.
page.goto()(브라우저)는 동당 2.4초로 fetch보다 3~4배 느리다. fetch를 쓴다page가 null이 되는 일이 있다. fetch 방식이면 영향 없다당근 검색은 토큰 기반이라 한 단어로는 다 못 잡는다. 2~3개를 돌린다.
콤보(워시콤보·AI콤보 잡힘) + 세탁건조기 + 워시타워콤보 같은 일반어는 영화 팝콘 쿠폰 같은 노이즈가 압도적이다. 수집 후 /세탁|건조/ 등으로 거른다Map(href → 제목)에 모아 자동 중복 제거한다. 같은 판매자가 여러 동네에 중복 게시하는 일이 잦다제목 문자열에서 가격·세대를 뽑아 정렬하면 시세 분포가 바로 보인다.
const price = t => { const m=t.match(/([\d,]+)원/); return m?+m[1].replace(/,/g,''):null; };