| name | keris-academic-search |
| description | Use when the user asks to search Korean theses, academic articles, research reports, journals, or university-library catalog metadata through KERIS RISS. |
| license | MIT |
| metadata | {"category":"research","locale":"ko-KR","phase":"v1"} |
KERIS Academic Search
What this skill does
KERIS๊ฐ ์ด์ํ๋ RISS ๊ฒ์ Open API์์ ํ์๋
ผ๋ฌธ, ๊ตญ๋ด์ธ ํ์ ๋
ผ๋ฌธ, ๋จํ๋ณธ, ์ฐ๊ตฌ๋ณด๊ณ ์, ํ์ ์ง ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ค. ์ ๋ชฉ, ์ ์, ๋ฐํ์ฒ, ์ฐ๋, RISS ์์ธ ๋งํฌ, API๊ฐ ๋ฐํํ ์๋ฌธ ์ ๋ฌด/๋ฌด๋ฃ ํ์๋ฅผ ์์ฝํ๋ค.
์กฐํ ์ ์ฉ์ด๋ค. ๊ธฐ๊ด ๋ก๊ทธ์ธ, ๊ตฌ๋
๊ถํ ์ฐํ, ๋ณต์ฌยท๋์ถ ์ ์ฒญ, ์ ๋ฃ ๊ฒฐ์ , ์๋ฌธ ๋ค์ด๋ก๋๋ ์๋ํํ์ง ์๋๋ค.
Official access path
- ๊ธฐ๋ณธ ๊ฒฝ๋ก: ์ฌ์ฉ์ ๋ณธ์ธ์ RISS ๊ฒ์ API ํค๋ก ์๋ฅ(
https://www.riss.kr/openApi)๋ฅผ ์ง์ ํธ์ถํ๋ค. ์ด ์คํฌ์ k-skill-proxy๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค.
- ์๋ฅ ๊ณ์ฝ:
key, version=1.0, type๋ณ XML, rsnum, rowcount(์ต๋ 100)
- ๊ณต์ ๋ฌธ์: RISS API ์ผํฐ(https://www.riss.kr/apicenter/apiMain.do)์ ํ์๋
ผ๋ฌธ/๊ตญ๋ดํ์ ๋
ผ๋ฌธ/ํด์ธํ์ ๋
ผ๋ฌธ/๋จํ๋ณธ/์ฐ๊ตฌ๋ณด๊ณ ์/ํ์ ์ง ๊ฒ์ API ์ ๋ณด
RISS API ํค ๋ฐ๊ธ
RISS ๊ฒ์ Open API ํค๋ ๊ณต์ต ๋ชฉ์ ์ ๋น์๋ฆฌ ๊ธฐ๊ด/๋ํ์๋ง ๋ฌด๋ฃ๋ก ๋ฐ๊ธ๋๋ค(ํฅํ ๋ฏผ๊ฐ ํ๋ ์์ ). data.go.kr ํค์ ์์ ํ ๋ณ๊ฐ๋ค.
- RISS(https://www.riss.kr)์ ๊ธฐ๊ด ์์์ผ๋ก ํ์๊ฐ์
/๋ก๊ทธ์ธ
- RISS API ์ผํฐ โ RISS ๊ฒ์ API ์ ํ โ ์ด์ฉ์ ์ฒญ(https://riss.kr/openAPI/OpenApiRegisterFinal.do)
- KERIS ๋ด๋น์ ์ฌ์ฌยท์น์ธ ํ ์ธ์ฆํค(
key ํ๋ผ๋ฏธํฐ) ๋ฐ๊ธ
- ๋ฐ๊ธ๋ฐ์ ํค๋ฅผ
KSKILL_RISS_API_KEY(ํธํ RISS_API_KEY) ํ๊ฒฝ๋ณ์ ๋๋ ~/.config/k-skill/secrets.env์ ์ค์
๊ณต๊ณต๋ฐ์ดํฐํฌํธ ๋ฐ์ดํฐ์
15071949๋ RISS ์ข
ํฉ๋ชฉ๋ก์ ์ ์ ํ์ผ/์นดํ๋ก๊ทธ ํํฉ ๊ด๋ จ ํ๋ฉด์ด๋ค. ๊ธฐ์ฌยท๋
ผ๋ฌธ ๊ฒ์ API๊ฐ ์๋๋ฏ๋ก ๊ฒ์ fallback์ผ๋ก ์ฌ์ฉํ์ง ์๋๋ค. ๋ฐ์ดํฐ์
3046254๋ ๊ด๋ จ ์นดํ๋ก๊ทธ ํญ๋ชฉ์ด์ง๋ง ์ค์ ๊ฒ์ ๊ณ์ฝ์ RISS API ์ผํฐ์ /openApi๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋ค.
Commands
python3 scripts/keris_academic.py search --keyword '์ธ๊ณต์ง๋ฅ ๊ต์ก'
python3 scripts/keris_academic.py search --title '๋ํ๋์๊ด' --author '๊น์ฐ๊ตฌ' --resource-type T
python3 scripts/keris_academic.py search --keyword 'ํ๊ตญ์ด ๊ต์ก' --resource-type D --page 2 --page-size 20 --json
๊ฒ์ ํ๋๋ keyword, title, author, subject, publisher์ด๋ฉฐ ํ๋ ์ด์ ํ์ํ๋ค. page๋ 1 ์ด์, pageSize๋ 1~100์ด๋ค. RISS์ rsnum์ (page-1)*pageSize+1๋ก ๊ณ์ฐํ๋ค. ์ค์ ํธ์ถ์๋ ์ฌ์ฉ์ RISS ํค๊ฐ ํ์ํ๋ค.
์ฌ๋ฌ upstream type์ ํฉ์น๋ ALL๊ณผ A๋ ์ฒซ ํ์ด์ง์์ type๋ณ ๊ฒฐ๊ณผ๋ฅผ round-robin์ผ๋ก ํฉ์น๋ค. ์ ํํ ํ์ ํ์ด์ง๊ฐ ํ์ํ๋ฉด T, D, B ๋๋ ์ค์ ๋จ์ผ ์๋ฃ์ ํ ๊ฒ์์ ์ฌ์ฉํ๋ค. ๊ฒฐํฉ ๊ฒ์์ upstream์ type ์๋งํผ ํธ์ถํ๋ค.
์ฌ์ฉ์ resource type alias:
ALL: ๊ณต์ T/A/O/U/F/S๋ฅผ ๋ชจ์ ์ต๋ pageSize๊ฑด ๋ฐํ
T: ํ์๋
ผ๋ฌธ, ๊ณต์ T
A: ๊ตญ๋ด+ํด์ธ ํ์ ๋
ผ๋ฌธ, ๊ณต์ A/O
D: ๊ตญ๋ด ํ์ ๋
ผ๋ฌธ(domestic article) ํธํ alias, ๊ณต์ A
B: ๋จํ๋ณธ(book) ํธํ alias, ๊ณต์ U
์๋ต item์ resource_type์๋ alias๊ฐ ์๋๋ผ ์ค์ RISS ์ฝ๋๋ฅผ ๋ณด์กดํ๋ค.
Credentials
python3 scripts/keris_academic.py search --keyword '๊ต์ก ๋ฐ์ดํฐ' --resource-type ALL --dry-run
- RISS ํค:
KSKILL_RISS_API_KEY, ์์ผ๋ฉด compatibility RISS_API_KEY, ์ดํ ~/.config/k-skill/secrets.env
DATA_GO_KR_API_KEY๋ RISS ๊ฒ์์ ์ฌ์ฉํ์ง ์๋๋ค
--dry-run์ ํค๋ฅผ ๋ฐ๊ธ๋ฐ๊ธฐ ์ ์๋ ํธ์ถ URL์ ํ์ธํ ์ ์์ผ๋ฉฐ ํค๋ฅผ REDACTED๋ก ํ์ํ๋ค
- ํค๊ฐ ์์ผ๋ฉด ์คํ์ ์ค๋จํ๊ณ RISS API ์ผํฐ ๋ฐ๊ธ ์๋ด๋ฅผ ์ถ๋ ฅํ๋ค
Output and fallback order
- ๊ฒ์ ์ฑ๊ณต ๊ฒฐ๊ณผ๋ฅผ ์ ๋ชฉ, ์ ์, ๋ฐํ์ฒ/ํ์ ์ง, ์ฐ๋, ๋งํฌ, ์๋ฌธ ์ํ๋ก ์์ฝํ๋ค.
- ํค๊ฐ ์์ผ๋ฉด RISS API ์ผํฐ์์ ๊ฒ์ API ํค๋ฅผ ๋ฐ๊ธ๋ฐ๋๋ก ์๋ดํ๋ค.
- RISS ์ฅ์ /์ฟผํฐ/ํ์ฑ ์ค๋ฅ๋ฅผ ์น scraping์ด๋ data.go.kr
15071949๋ก ๋์ฒดํ์ง ์๋๋ค.
- ๋น ๊ฒฐ๊ณผ๋ ์ฑ๊ณต(
items: [])์ผ๋ก ์ ์งํ๊ณ ๊ฒ์์ด/์๋ฃ์ ํ์ ์กฐ์ ํ๋ค.
Failure modes
- missing key: ์คํ ์ค๋จ + RISS API ์ผํฐ ํค ๋ฐ๊ธ ์๋ด(exit 1)
- invalid input: ์
๋ ฅ ๊ฒ์ฆ ์ค๋ฅ ๋ฉ์์ง(exit 1)
- RISS ์ธ์ฆ ์ค๋ฅ ๋๋ HTTP 401/403: ํค/๊ธฐ๊ด ๊ถํ ํ์ธ ์๋ด(exit 1)
- ํธ์ถ๋/์ฟผํฐ ์ด๊ณผ ๋๋ HTTP 429: ์ฟผํฐ ์ด๊ณผ ์๋ด(exit 1)
- upstream network/HTTP failure: ๋คํธ์ํฌ/HTTP ์ค๋ฅ ๋ฉ์์ง(exit 1)
- empty/malformed/unexpected XML: XML ํ์ฑ ์ค๋ฅ ๋ฉ์์ง(exit 1)
- empty result: ์ฑ๊ณต ์๋ต๊ณผ ๋น
items
- login/licensed full text: ์์ธ ๋งํฌ๋ง ์ ๊ณตํ๊ณ ์๋ ๋ค์ด๋ก๋ํ์ง ์์
Done when
- ๊ฒ์ ์กฐ๊ฑด๊ณผ ์ค์ RISS ์๋ฃ์ ํ์ด ๋ช
์๋๋ค.
- ๊ฒฐ๊ณผ ๋๋ typed failure๋ฅผ ์ ๊ณตํ๋ค.
- ์๋ฌธ ์ ๋ฌด ํ์๋ API ๊ฐ์ผ๋ก๋ง ์ค๋ช
ํ๊ณ ์ ๊ทผ๊ถํ์ ๋ณด์ฅํ๊ฑฐ๋ ๋ค์ด๋ก๋๋ฅผ ์๋ํํ์ง ์์๋ค.