# NPM
npm install @gurumnyang/dcinside.js
# Yarn
yarn add @gurumnyang/dcinside.js- ๊ฐค๋ฌ๋ฆฌ ๊ฒ์ํ ์กฐํ, ๊ฒ์๊ธ ๋ด์ฉ ์กฐํ
- ๊ฒ์๊ธ ๋๊ธ ์กฐํ
- ๊ฒ์๊ธ ๋ด์ ์ด๋ฏธ์ง URL ์ถ์ถ
- ํตํฉ๊ฒ์ ๊ฒฐ๊ณผ ์์ง
- ๋ก๊ทธ์ธ ๋ฐ ์ธ์ฆ ์ฟ ํค ์์ง
- ๊ฒ์๊ธ ๊ฒ์, ์ญ์
- ๋๊ธ ๊ฒ์, ์ญ์
- ์ค์๊ฐ ๋ฒ ์คํธ ์ถ์ฒ(์ค๋ฒ ์ถ)
const dc = require('@gurumnyang/dcinside.js');
(async () => {
// 1) ํ์ด์ง๋ณ ๊ฒ์๊ธ ๋ชฉ๋ก (๋ชจ๋ฐ์ผ ํ์ ๊ธฐ๋ณธ)
const list = await dc.getPostList({ page: 1, galleryId: 'chatgpt', boardType: 'all' });
// 2) ๋จ์ผ ๊ฒ์๊ธ ๋ณธ๋ฌธ/๋๊ธ
const post = await dc.getPost({ galleryId: 'chatgpt', postNo: list[0].id, extractImages: true });
// 3) ํตํฉ๊ฒ์
const search = await dc.search('์ฑ์งํผํฐ');
console.log(list.length, post?.title, search.posts.length);
})();๋ ๊ฑฐ์(PC) ๋ชฉ๋ก ํ์๋ ๋ค์๊ณผ ๊ฐ์ด ํธ์ถํ ์ ์์ต๋๋ค.
const listPc = await dcCrawler.getPostListLegacy({ page: 1, galleryId: 'programming', boardType: 'all' });// SearchGalleryItem ์์
{
name: '์ฑ์งํผํฐ(ChatGPT)โ',
id: 'chatgpt',
type: 'mgallery', // ๋ด๋ถ ํธํ์ฉ: 'board'|'mgallery'|'mini'|'person'
galleryType: 'mgallery',// ๊ตฌ๋ถ์ฉ: 'main'|'mgallery'|'mini'|'person'
link: 'https://gall.dcinside.com/mgallery/board/lists/?id=chatgpt',
rank: 153,
new_post: 12,
total_post: 345
}
// SearchPost ์์
{
title: '์ฒซ ๋ฒ์งธ ๊ฒ์๊ธ',
content: '์์ฝ ๋ด์ฉ',
galleryName: '์ฑ์งํผํฐ(ChatGPT)โ',
galleryId: 'chatgpt',
galleryType: 'mgallery', // 'main'|'mgallery'|'mini'|'person'
date: '2025.08.11 10:00:00',
link: 'https://gall.dcinside.com/mgallery/board/view/?id=chatgpt&no=1111'
}๋ชจ๋ฐ์ผ ๋ก๊ทธ์ธ ์ธ์ ์ ํ๋ณดํ๋ฉด ์ฟ ํค๋ฅผ ๊ทธ๋๋ก ์ฌ์ฌ์ฉํด ๊ธ์ฐ๊ธฐ/์ญ์ ์ ํ์ฉํ ์ ์์ต๋๋ค(PC ๋ฏธ์ง์)
์บก์ฐจ์ ๊ฑธ๋ฆด ๊ฒฝ์ฐ success:false๋ฅผ ๋ฐํํฉ๋๋ค
const dc = require('@gurumnyang/dcinside.js');
(async () => {
const login = await dc.mobileLogin({ code: process.env.DC_ID, password: process.env.DC_PW });
if (!login.success) {
throw new Error(`๋ก๊ทธ์ธ ์คํจ: ${login.reason}`);
}
const write = await dc.createMobilePost({
galleryId: 'dragonlake',
subject: 'ํ
์คํธ ์ ๋ชฉ',
content: 'ํ
์คํธ ๋ณธ๋ฌธ์
๋๋ค.',
jar: login.jar, // ๋ก๊ทธ์ธ ์ ์ป์ ์ฟ ํค๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉ
});
if (!write.success) {
console.log(write.message || '๊ธ์ฐ๊ธฐ ์คํจ');
return;
}
console.log('๋ฑ๋ก๋ ๊ฒ์๊ธ ๋ฒํธ:', write.postId, '์ด๋ URL:', write.redirectUrl);
const remove = await dc.deleteMobilePost({
galleryId: 'dragonlake',
postId: write.postId,
jar: login.jar,
});
console.log('์ญ์ ์ฑ๊ณต ์ฌ๋ถ:', remove.success, '๋ฉ์์ง:', remove.message);
})();๋๊ธ์ ์ ๊ฑฐํ๋ ค๋ฉด
await dc.deleteComment({ galleryId: 'dragonlake', postId: ๊ธ๋ฒํธ, commentId: ๋๊ธ๋ฒํธ, jar: login.jar });ํํ๋ก ํธ์ถํ๋ฉด ๋ฉ๋๋ค. ๋๊ธ์ ์์ฑํ๋ ค๋ฉดawait dc.createComment({ galleryId: 'dragonlake', postId: ๊ธ๋ฒํธ, content: '๋๊ธ ๋ด์ฉ', jar: login.jar });ํํ๋ก ํธ์ถํ๋ฉด ๋ฉ๋๋ค. ๊ฒ์คํธ๋nickname,password,captchaCode๋ฅผ ํจ๊ป ์ ๋ฌํ์ธ์.
์ค์๊ฐ ๋ฒ ์คํธ ์ถ์ฒ์ ์ํํฉ๋๋ค.
const dc = require('@gurumnyang/dcinside.js');
(async () => {
// (์ ํ) ๋ก๊ทธ์ธ ์ธ์
์ด ์๋ค๋ฉด jar์ ์ ๋ฌํ ์ ์์ต๋๋ค.
// const login = await dc.mobileLogin({ code: process.env.DC_ID, password: process.env.DC_PW });
// const jar = login.success ? login.jar : undefined;
// (์ ํ) ํ๋ก์ ์ฌ์ฉ ์์ (Axios ProxyConfig ํ์)
const proxy = process.env.HTTP_PROXY
? (() => {
const u = new URL(process.env.HTTP_PROXY);
return {
protocol: u.protocol.replace(':', ''),
host: u.hostname,
port: u.port ? Number(u.port) : undefined,
auth: u.username ? { username: u.username, password: u.password } : undefined,
};
})()
: undefined;
const result = await dc.recommendBest({
galleryId: 'chatgpt',
postId: 68960,
// jar,
userAgent: process.env.DC_UA,
proxy,
});
console.log('์ฑ๊ณต ์ฌ๋ถ:', result.success);
console.log('๋ฉ์์ง:', result.message);
console.log('HTTP Status:', result.responseStatus);
})();๊ฐ๋จํ ํฐ๋ฏธ๋ UI๋ก ๊ฒ์ํ ์ด๋, ๊ธ ์กฐํ, ๊ฒ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
npm run tui๋ฉ๋ด์์ ๊ฒ์ํ ๋ชฉ๋ก ์ด๋(ํ์ด์ง ์ด๋), ํตํฉ๊ฒ์(์ ํ๋/์ต์ ), ๊ธ ๋ฐ๋ก ์กฐํ(๊ฐคID/๋ฒํธ)๋ฅผ ์ง์ํฉ๋๋ค.
const { getRandomUserAgent } = require('@gurumnyang/dcinside.js');
console.log(getRandomUserAgent()); // ๋ฌด์์ User-Agent ๋ฌธ์์ด ๋ฐํ{
postNo: "1234567",
title: "๊ฒ์๊ธ ์ ๋ชฉ",
author: "์์ฑ์ ๋๋ค์",
date: "2025.01.01 12:34:56",
content: "๊ฒ์๊ธ ๋ด์ฉ...",
viewCount: "123",
recommendCount: "10",
dislikeCount: "2",
comments: {
totalCount: 5,
comments: [
{
parent: "0",
id: "comment_id",
author: {
userId: "user_id",
nickname: "๋๊ธ ์์ฑ์",
ip: "1.2.3.*" // IP ํ์๊ฐ ๋ ๊ฒฝ์ฐ์๋ง
},
regDate: "01.01 12:34:56",
memo: "๋๊ธ ๋ด์ฉ"
}
// ...
]
},
// ์ด๋ฏธ์ง URL ์ถ์ถ ์ต์
์ ํ์ฑํํ ๊ฒฝ์ฐ์๋ง ํฌํจ๋จ
images: [
"https://example.com/image1.jpg",
"https://example.com/image2.jpg"
]
}{
id: "1234567", // ๊ฒ์๊ธ ๋ฒํธ
type: "picture", // ๊ฒ์๊ธ ์ ํ ('notice', 'picture', 'text', 'recommended', 'unknown')
subject: "์ผ๋ฐ", // ๋ง๋จธ๋ฆฌ
title: "๊ฒ์๊ธ ์ ๋ชฉ์
๋๋ค", // ๊ฒ์๊ธ ์ ๋ชฉ
link: "https://gall.dcinside.com/mgallery/board/view/?id=programming&no=1234567", // ๊ฒ์๊ธ ๋งํฌ
author: {
nickname: "์์ฑ์๋๋ค์", // ์์ฑ์ ๋๋ค์
userId: "writer_id", // ์์ฑ์ ID (์๋ ๊ฒฝ์ฐ๋ง)
ip: "1.2.3.*" // ์์ฑ์ IP (ํ์๋ ๊ฒฝ์ฐ๋ง)
},
date: "2025.04.21 12:34:56", // ์์ฑ ๋ ์ง
count: 123, // ์กฐํ์
recommend: 10, // ์ถ์ฒ์
replyCount: 5 // ๋๊ธ ์
}{
query: '์งํผํฐ',
galleries: [
{
name: '์ฑ์งํผํฐ(ChatGPT)โ',
id: 'chatgpt',
type: 'mgallery',
link: 'https://gall.dcinside.com/mgallery/board/lists/?id=chatgpt',
rank: 153,
new_post: 615,
total_post: 52041
}
],
posts: [
{
title: '์งํผํฐ ์์ค์ด ์ด๋ง์ด๋งํ๊ธด ํจ 3(feat.๊ฐค๋ผ)',
content: '๋น์ทํ ๊ฒฐ๊ณผ๋ฌผ ๋์ค๊ธธ ๊ธฐ๋ํ๋ฉด์ ๊ฐค๋ผ ๊ทธ๋ฆผ ๋น๋ ค์ ๊ฐ์ ์์ฒญ ํด๋ดค์ ????? ์ ๋๋ง??? - dc official App',
galleryName: '์ฑ์งํผํฐ(ChatGPT) ๊ฐค๋ฌ๋ฆฌ',
galleryId: 'chatgpt',
date: '2025.08.12 21:57',
link: 'https://gall.dcinside.com/mgallery/board/view/?id=chatgpt&no=52384'
}
]
}๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์์ฒญ ์คํจ ์ ์๋์ผ๋ก ์ฌ์๋ํฉ๋๋ค. ๊ธฐ๋ณธ ์ค์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์ต๋ ์ฌ์๋ ํ์: 3ํ
- ์ฌ์๋ ๊ฐ ์ง์ฐ ์๊ฐ: 1000ms (์ง์ ๋ฐฑ์คํ ์ ์ฉ)
// ์ค์ ์ต์
const options = {
retryAttempts: 5, // ์ต๋ ์ฌ์๋ ํ์ ๋ณ๊ฒฝ
retryDelay: 2000 // ์ฌ์๋ ๊ฐ ์ง์ฐ ์๊ฐ ๋ณ๊ฒฝ
// ๋ค๋ฅธ ์ต์
...
};๊ฐ๋ณ ํธ์ถ ๋จ์๋ก ์ฌ์๋ ํ์๋ฅผ ๋ฐ๊พธ๊ณ ์ถ๋ค๋ฉด ๋ค์์ฒ๋ผ retryCount๋ฅผ ์ง์ ํ์ธ์.
await dc.getPost({ galleryId: 'chatgpt', postNo: 12345, retryCount: 5 });
await dc.getPosts({ galleryId: 'chatgpt', postNumbers: [111, 222], retryCount: 5 });๊ฐค๋ฌ๋ฆฌ ํ์ด์ง์์ ๊ฒ์๊ธ ๋ชฉ๋ก์ ์์งํฉ๋๋ค. ๊ธฐ๋ณธ์ ๋ชจ๋ฐ์ผ ํ์์ ๋๋ค.
๋งค๊ฐ๋ณ์:
options(GetPostListOptions)page(number): ํ์ด์ง ๋ฒํธgalleryId(string): ๊ฐค๋ฌ๋ฆฌ IDboardType(boardType, ์ ํ): ๊ฒ์ํ ์ ํ ('all', 'recommend', 'notice' ์ค ํ๋, ๊ธฐ๋ณธ๊ฐ: 'all')delayMs(number, ์ ํ): ์์ฒญ ๊ฐ ์ง์ฐ ์๊ฐ(ms)
๋ฐํ๊ฐ:
Promise<PostInfo[]>: ๊ฒ์๊ธ ์ ๋ณด ๊ฐ์ฒด์ ๋ฐฐ์ด
PC(๋ ๊ฑฐ์) ํ์๋ก ๊ฐค๋ฌ๋ฆฌ ํ์ด์ง์์ ๊ฒ์๊ธ ๋ชฉ๋ก์ ์์งํฉ๋๋ค. ์ธํฐํ์ด์ค๋ getPostList์ ๋์ผํฉ๋๋ค.
๊ฒ์๊ธ ๋ฒํธ๋ก ๊ฒ์๊ธ ๋ด์ฉ์ ๊ฐ์ ธ์ต๋๋ค. ๊ธฐ๋ณธ์ ๋ชจ๋ฐ์ผ ํ์์ ๋๋ค
๋งค๊ฐ๋ณ์:
options(GetPostOptions)galleryId(string): ๊ฐค๋ฌ๋ฆฌ IDpostNo(string | number): ๊ฒ์๊ธ ๋ฒํธextractImages(boolean, ์ ํ): ์ด๋ฏธ์ง URL ์ถ์ถ ์ฌ๋ถ (๊ธฐ๋ณธ๊ฐ: false)includeImageSource(boolean, ์ ํ): ๋ณธ๋ฌธ์ ์ด๋ฏธ์ง URL ํฌํจ ์ฌ๋ถ (๊ธฐ๋ณธ๊ฐ: false)retryCount(number, ์ ํ): ์ด ํธ์ถ์์ ์ฌ์ฉํ ์ฌ์๋ ํ์ (์ ์ญ ๊ธฐ๋ณธ๊ฐ์ ๋ฎ์ด์)
๋ฐํ๊ฐ:
Promise<Post | null>: ๊ฒ์๊ธ ๊ฐ์ฒด ๋๋ ์คํจ ์ null
PC(๋ ๊ฑฐ์) ํ์๋ก ๊ฒ์๊ธ ๋ด์ฉ์ ๊ฐ์ ธ์ต๋๋ค. ์ธํฐํ์ด์ค๋ getPost์ ๋์ผํฉ๋๋ค.
์ฌ๋ฌ ๊ฒ์๊ธ ๋ฒํธ๋ก ๊ฒ์๊ธ ๋ด์ฉ์ ๊ฐ์ ธ์ต๋๋ค.
๋งค๊ฐ๋ณ์:
options(๊ฐ์ฒด)galleryId(๋ฌธ์์ด): ๊ฐค๋ฌ๋ฆฌ IDpostNumbers(๋ฌธ์์ด ๋๋ ์ซ์์ ๋ฐฐ์ด): ๊ฒ์๊ธ ๋ฒํธ ๋ฐฐ์ดdelayMs(์ซ์, ์ ํ): ์์ฒญ ๊ฐ ์ง์ฐ ์๊ฐ(ms) (๊ธฐ๋ณธ๊ฐ: 100)extractImages(๋ถ๋ฆฌ์ธ, ์ ํ): ์ด๋ฏธ์ง URL ์ถ์ถ ์ฌ๋ถ (๊ธฐ๋ณธ๊ฐ: false)includeImageSource(๋ถ๋ฆฌ์ธ, ์ ํ): ๋ณธ๋ฌธ์ ์ด๋ฏธ์ง URL ํฌํจ ์ฌ๋ถ (๊ธฐ๋ณธ๊ฐ: false)onProgress(ํจ์, ์ ํ): ์งํ ์ํฉ ์ฝ๋ฐฑ ํจ์ (current, total)retryCount(์ซ์, ์ ํ): ๊ฐ ๊ฒ์๊ธ ์์ฒญ์์ ์ฌ์ฉํ ์ฌ์๋ ํ์ (์ ์ญ ๊ธฐ๋ณธ๊ฐ์ ๋ฎ์ด์)
๋ฐํ๊ฐ:
Promise<Post[]>: ์์ง๋ ๊ฒ์๊ธ ๊ฐ์ฒด ๋ฐฐ์ด
๊ฒ์์ด๋ฅผ ์ ๋ ฅํ๋ฉด DCInside ์๋์์ฑ ๊ฒฐ๊ณผ(JSON)๋ฅผ ๋ฐํํ๋ค.
๋งค๊ฐ๋ณ์:
query(๋ฌธ์์ด): ๊ฒ์์ด
๋ฐํ๊ฐ:
Promise<object>: ์๋์์ฑ ๊ฒฐ๊ณผ ๊ฐ์ฒด
ํตํฉ๊ฒ์์ ์ํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
๋งค๊ฐ๋ณ์:
query(๋ฌธ์์ด): ๊ฒ์์ดoptions(๊ฐ์ฒด, ์ ํ)sort('latest' | 'accuracy', ์ ํ): ์ ๋ ฌ ๊ธฐ์ค
๋ฐํ๊ฐ:
Promise<object>: ๊ฒ์ ๊ฒฐ๊ณผ ๊ฐ์ฒด{ query?, gallery?, posts[] }
๋ชจ๋ฐ์ผ ๋ก๊ทธ์ธ ํ์ด์ง๋ฅผ ํตํด ์ธ์ฆ ์ฟ ํค๋ฅผ ํ๋ํฉ๋๋ค.
๋งค๊ฐ๋ณ์:
options(MobileLoginOptions)code(๋ฌธ์์ด): ๋์์ธ์ฌ์ด๋ ์๋ณ ์ฝ๋(ID)password(๋ฌธ์์ด): ๋น๋ฐ๋ฒํธkeepLoggedIn(๋ถ๋ฆฌ์ธ, ์ ํ): ์๋ ๋ก๊ทธ์ธ ์ฌ๋ถ (๊ธฐ๋ณธ๊ฐ:true)userAgent(๋ฌธ์์ด, ์ ํ): ์ปค์คํ User-Agentjar(CookieJar, ์ ํ): ์ธ๋ถ์์ ์์ฑํ ์ฟ ํค ์ ์ฅ์๋ฅผ ์ฌ์ฌ์ฉํ ๋ ์ ๋ฌ
๋ฐํ๊ฐ:
Promise<MobileLoginResult>: ์ฑ๊ณต ์ฌ๋ถ, ์ฟ ํค ๋ชฉ๋ก,CookieJar, ๋ฆฌ๋ค์ด๋ ํธ ์ ๋ณด ๋ฑ์ ํฌํจํ ๊ฐ์ฒด
๋ชจ๋ฐ์ผ ๊ธ์ฐ๊ธฐ ํผ์ ์ฌ์ฉํด ๊ฒ์๊ธ์ ๋ฑ๋กํฉ๋๋ค.
๋งค๊ฐ๋ณ์:
options(MobileCreatePostOptions)galleryId(๋ฌธ์์ด): ๊ฐค๋ฌ๋ฆฌ ID (ํ์)subject(๋ฌธ์์ด): ๋ง๋จธ๋ฆฌ/์ ๋ชฉ (ํ์)content(๋ฌธ์์ด): ๋ณธ๋ฌธ (ํ์)headText(๋ฌธ์์ด | ์ซ์, ์ ํ): ๋ง๋จธ๋ฆฌ ์ฝ๋nickname(๋ฌธ์์ด, ์ ํ): ๋น๋ก๊ทธ์ธ ๊ธ์ฐ๊ธฐ์ฉ ๋๋ค์password(๋ฌธ์์ด, ์ ํ): ๋น๋ก๊ทธ์ธ ๊ธ์ฐ๊ธฐ์ฉ ๋น๋ฐ๋ฒํธuseGallNickname(๋ถ๋ฆฌ์ธ, ์ ํ): ๊ฐค๋ฌ๋ฆฌ ๋๋ค์ ์ฌ์ฉ ์ฌ๋ถjar(CookieJar, ์ ํ): ๋ก๊ทธ์ธ์ผ๋ก ํ๋ณดํ ์ฟ ํค๋ฅผ ์ ๋ฌํ ๋ ์ฌ์ฉuserAgent(๋ฌธ์์ด, ์ ํ): ์ปค์คํ User-AgentextraFields(๊ฐ์ฒด, ์ ํ): ์ถ๊ฐ ํผ ํ๋ ๊ฐ์ ์ ๋ ฅ
๋ฐํ๊ฐ:
Promise<MobileCreatePostResult>: ์ฑ๊ณต ์ฌ๋ถ, ๊ฒ์๊ธ ๋ฒํธ, ๋ฆฌ๋ค์ด๋ ํธ URL, ์๋ฒ ๋ฉ์์ง ๋ฑ์ ๋ด์ ๊ฐ์ฒด
๋ชจ๋ฐ์ผ ๊ฒ์๊ธ ์ญ์ ์๋ํฌ์ธํธ๋ฅผ ํธ์ถํฉ๋๋ค.
๋งค๊ฐ๋ณ์:
options(MobileDeletePostOptions)galleryId(๋ฌธ์์ด): ๊ฐค๋ฌ๋ฆฌ ID (ํ์)postId(๋ฌธ์์ด | ์ซ์): ์ญ์ ํ ๊ฒ์๊ธ ๋ฒํธ (ํ์)jar(CookieJar, ์ ํ): ๋ก๊ทธ์ธ ์ฟ ํค๊ฐ ๋ด๊ธด ์ ์ฅ์password(๋ฌธ์์ด, ์ ํ): ๋น๋ก๊ทธ์ธ ์ญ์ ์ ์ฌ์ฉํ๋ ๋น๋ฐ๋ฒํธuserAgent(๋ฌธ์์ด, ์ ํ): ์ปค์คํ User-Agent
๋ฐํ๊ฐ:
Promise<MobileDeletePostResult>: ์ฑ๊ณต ์ฌ๋ถ์ ์๋ฒ ๋ฉ์์ง๋ฅผ ๋ด์ ๊ฐ์ฒด
๋ชจ๋ฐ์ผ ๋๊ธ ์ญ์ ์๋ํฌ์ธํธ๋ฅผ ํธ์ถํฉ๋๋ค.
๋งค๊ฐ๋ณ์:
options(MobileDeleteCommentOptions)galleryId(๋ฌธ์์ด): ๊ฐค๋ฌ๋ฆฌ ID (ํ์)postId(๋ฌธ์์ด | ์ซ์): ๋๊ธ์ด ๋ฌ๋ฆฐ ๊ฒ์๊ธ ๋ฒํธ (ํ์)commentId(๋ฌธ์์ด | ์ซ์): ์ญ์ ํ ๋๊ธ ๋ฒํธ (ํ์)jar(CookieJar, ์ ํ): ๋ก๊ทธ์ธ ์ฟ ํค๊ฐ ๋ด๊ธด ์ ์ฅ์password(๋ฌธ์์ด, ์ ํ): ๋น๋ก๊ทธ์ธ ๋๊ธ ์ญ์ ์ ์ฌ์ฉํ๋ ๋น๋ฐ๋ฒํธuserAgent(๋ฌธ์์ด, ์ ํ): ์ปค์คํ User-Agent
๋ฐํ๊ฐ:
Promise<MobileDeleteCommentResult>: ์ฑ๊ณต ์ฌ๋ถ์ ์๋ฒ ๋ฉ์์ง๋ฅผ ๋ด์ ๊ฐ์ฒด
๋ชจ๋ฐ์ผ ํ์ด์ง์์ ํด๋น ๊ฒ์๊ธ์ ์กฐํํด CSRF ํ ํฐ์ ์ป์ ๋ค ์ค์๊ฐ ๋ฒ ์คํธ ์ถ์ฒ(์ค๋ฒ ์ถ) ์๋ํฌ์ธํธ๋ก ์์ฒญ์ ์ ์กํฉ๋๋ค.
๋งค๊ฐ๋ณ์:
options(BestRecommendOptions)galleryId(๋ฌธ์์ด): ๊ฐค๋ฌ๋ฆฌ ID (ํ์)postId(๋ฌธ์์ด | ์ซ์): ์ถ์ฒํ ๊ฒ์๊ธ ๋ฒํธ (ํ์)jar(CookieJar, ์ ํ): ๋ก๊ทธ์ธ(์ธ์ ) ์ฟ ํค ์ ์ฅ์userAgent(๋ฌธ์์ด, ์ ํ): ์ปค์คํ User-Agentproxy(ProxyConfig, ์ ํ): Axios ํ๋ก์ ์ค์ ๊ฐ์ฒด ๋๋false
๋ฐํ๊ฐ:
Promise<BestRecommendResult>success(๋ถ๋ฆฌ์ธ): ์ฑ๊ณต ์ฌ๋ถmessage(๋ฌธ์์ด, ์ ํ): ์๋ฒ๊ฐ ์ ๋ฌํ ๋ฉ์์ง(์: ์ด๋ฏธ ์ถ์ฒํจ ๋ฑ)responseStatus(์ซ์): HTTP ์ํ ์ฝ๋raw(์์, ์ ํ): ์๋ฒ ์๋ณธ ์๋ต ๊ฐ์ฒด
์ง์ ๋ ์๊ฐ(๋ฐ๋ฆฌ์ด) ๋์ ์คํ์ ์ง์ฐ์ํต๋๋ค.
๋งค๊ฐ๋ณ์:
ms(์ซ์): ์ง์ฐํ ์๊ฐ(๋ฐ๋ฆฌ์ด)
๋ฐํ๊ฐ:
Promise<void>
๋ฌด์์ User-Agent ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค.
๋งค๊ฐ๋ณ์:
- ์์
๋ฐํ๊ฐ:
string: ๋ฌด์์ User-Agent ๋ฌธ์์ด
AutocompleteResponse,AutocompleteGalleryItem,AutocompleteWikiItemgetAutocomplete(query: string): Promise<AutocompleteResponse>raw.getAutocomplete(query: string): Promise<AutocompleteResponse>
- ๊ฒ์ํ ํ์ด์ง ํฌ๋กค๋ง
- ๊ฒ์๊ธ ๋ณธ๋ฌธ ๊ฐ์ ธ์ค๊ธฐ
- ๋๊ธ ๊ฐ์ ธ์ค๊ธฐ
- ๋ชจ๋ ๋๊ธ ํ์ด์ง ์์ง
- ์ฌ์๋ ๋ฉ์ปค๋์ฆ ์ถ๊ฐ
- ๊ฒ์๊ธ ์ด๋ฏธ์ง URL ์ถ์ถ
- ๊ฒ์ ๊ธฐ๋ฅ ์ง์
- ์ด๋ฏธ์ง ๋ค์ด๋ก๋ ๊ธฐ๋ฅ
- ๋ชจ๋ฐ์ผ ๋ก๊ทธ์ธ/์ฟ ํค ์์ง
- ๋ชจ๋ฐ์ผ ๊ฒ์๊ธ ์์ฑ/์ญ์
- ๋ชจ๋ฐ์ผ ๋๊ธ ์ญ์
- ๊ฒ์๊ธ ์์
- ๋๊ธ ์์ฑ
- ์ถ์ฒ/๋น์ถ์ฒ
- ์ค์๊ฐ ๋ฒ ์คํธ ์ถ์ฒ(์ค๋ฒ ์ถ)
- ๋์์ธ์ฌ์ด๋์ ์ด์ฉ์ฝ๊ด์ ์ค์ํด์ฃผ์ธ์.
- ๊ณผ๋ํ ์์ฒญ์ IP ์ฐจ๋จ์ ์ ๋ฐํ ์ ์์ผ๋ ์ ์ ํ ๋๋ ์ด(delayMs)๋ฅผ ์ค์ ํ์ธ์.
- ์์งํ ๋ฐ์ดํฐ๋ ๊ฐ์ธ ์ฐ๊ตฌ, ๋ถ์ ๋ฑ์ ๋น์์ ์ ์ฉ๋๋ก๋ง ์ฌ์ฉํด์ฃผ์ธ์.
MIT