<h1 align="center">rusaint</h1>
<p align="center" style="font-style: italic;">빠르고 간편하며 믿을 수 있는 숭실대학교 u-saint 클라이언트</p>
<p align="center">
<a href="https://github.com/EATSTEAK/rusaint"><img alt="GitHub Badge" src="https://img.shields.io/badge/github-eatsteak/rusaint-8da0cb?style=for-the-badge&labelColor=555555&logo=github"></a>
<a href="https://pypi.org/project/rusaint/"><img alt="PyPI - Version" src="https://img.shields.io/pypi/v/rusaint?style=for-the-badge&logo=pypi&color=3775A9"></a>
<a href="https://docs.rs/rusaint"><img alt="docs.rs" src="https://img.shields.io/badge/docs.rs-rusaint-66c2a5?style=for-the-badge&labelColor=555555&logo=docs.rs"></a>
<a href="https://github.com/EATSTEAK/rusaint/LICENSE.md"><img alt="License" src="https://img.shields.io/github/license/EATSTEAK/rusaint?style=for-the-badge"></a>
</p>
---
rusaint(_ru-saint, 루세인트_)는 [숭실대학교 u-saint](https://saint.ssu.ac.kr)를 정확하고 빠르게, 간편하게 파싱하고 다양한 환경에서 조작할 수 있는 Rust 기반 비공식
u-saint 클라이언트입니다.
u-saint의 기반인 [SAP Web Dynpro](https://en.wikipedia.org/wiki/Web_Dynpro)에서 사용하는 Lightspeed 라이브러리의 최소 동작을 구현하여 안전하게
u-saint 내부 요소들을 조작하고 파싱할 수 있습니다.
- **JS 런타임 없음** — JS 런타임 없이 자체적으로 요청과 응답에 따른 처리를 수행하므로 HTTPS 요청이 가능한 모든 환경에서 실행 가능합니다.
- **빠른 속도** — 네이티브 환경으로 컴파일되는 Rust를 이용하고, 휴리스틱 없이 요청이 완료되면 곧바로 실행되어 빠르게 u-saint 를 조작 및 파싱 가능합니다.
- **멀티플랫폼 지원** — UniFFI를 통한 Kotlin, Swift, React-Native, Python 지원을 제공하여 다양한 플랫폼에서 간편하게 이용할 수 있습니다.
- **간편한 기능 정의** — rusaint 에서 지원하지 않는 u-saint 애플리케이션에 대한 파싱 및 지원을 제공하는 API를 이용해 간편하게 정의할 수 있습니다.
## 설치
```bash
# Using pip
pip install rusaint
# Using uv
uv add rusaint
```
## 문서
[docs.rs](https://docs.rs/rusaint)
Raw data
{
"_id": null,
"home_page": "https://eatsteak.dev",
"name": "rusaint",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "ssu, u-saint, scraping, parser",
"author": "Hyomin Koo <me@eatsteak.dev>",
"author_email": "Hyomin Koo <me@eatsteak.dev>",
"download_url": "https://files.pythonhosted.org/packages/6f/a4/61833c4893fead7e80481f125faa6137ab3b7c5231087892ed313a49922f/rusaint-0.11.4.tar.gz",
"platform": null,
"description": "<h1 align=\"center\">rusaint</h1>\n<p align=\"center\" style=\"font-style: italic;\">\ube60\ub974\uace0 \uac04\ud3b8\ud558\uba70 \ubbff\uc744 \uc218 \uc788\ub294 \uc22d\uc2e4\ub300\ud559\uad50 u-saint \ud074\ub77c\uc774\uc5b8\ud2b8</p>\n<p align=\"center\">\n <a href=\"https://github.com/EATSTEAK/rusaint\"><img alt=\"GitHub Badge\" src=\"https://img.shields.io/badge/github-eatsteak/rusaint-8da0cb?style=for-the-badge&labelColor=555555&logo=github\"></a>\n <a href=\"https://pypi.org/project/rusaint/\"><img alt=\"PyPI - Version\" src=\"https://img.shields.io/pypi/v/rusaint?style=for-the-badge&logo=pypi&color=3775A9\"></a>\n <a href=\"https://docs.rs/rusaint\"><img alt=\"docs.rs\" src=\"https://img.shields.io/badge/docs.rs-rusaint-66c2a5?style=for-the-badge&labelColor=555555&logo=docs.rs\"></a>\n <a href=\"https://github.com/EATSTEAK/rusaint/LICENSE.md\"><img alt=\"License\" src=\"https://img.shields.io/github/license/EATSTEAK/rusaint?style=for-the-badge\"></a>\n</p>\n\n---\n\nrusaint(_ru-saint, \ub8e8\uc138\uc778\ud2b8_)\ub294 [\uc22d\uc2e4\ub300\ud559\uad50 u-saint](https://saint.ssu.ac.kr)\ub97c \uc815\ud655\ud558\uace0 \ube60\ub974\uac8c, \uac04\ud3b8\ud558\uac8c \ud30c\uc2f1\ud558\uace0 \ub2e4\uc591\ud55c \ud658\uacbd\uc5d0\uc11c \uc870\uc791\ud560 \uc218 \uc788\ub294 Rust \uae30\ubc18 \ube44\uacf5\uc2dd\nu-saint \ud074\ub77c\uc774\uc5b8\ud2b8\uc785\ub2c8\ub2e4.\n\nu-saint\uc758 \uae30\ubc18\uc778 [SAP Web Dynpro](https://en.wikipedia.org/wiki/Web_Dynpro)\uc5d0\uc11c \uc0ac\uc6a9\ud558\ub294 Lightspeed \ub77c\uc774\ube0c\ub7ec\ub9ac\uc758 \ucd5c\uc18c \ub3d9\uc791\uc744 \uad6c\ud604\ud558\uc5ec \uc548\uc804\ud558\uac8c\nu-saint \ub0b4\ubd80 \uc694\uc18c\ub4e4\uc744 \uc870\uc791\ud558\uace0 \ud30c\uc2f1\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\n- **JS \ub7f0\ud0c0\uc784 \uc5c6\uc74c** \u2014 JS \ub7f0\ud0c0\uc784 \uc5c6\uc774 \uc790\uccb4\uc801\uc73c\ub85c \uc694\uccad\uacfc \uc751\ub2f5\uc5d0 \ub530\ub978 \ucc98\ub9ac\ub97c \uc218\ud589\ud558\ubbc0\ub85c HTTPS \uc694\uccad\uc774 \uac00\ub2a5\ud55c \ubaa8\ub4e0 \ud658\uacbd\uc5d0\uc11c \uc2e4\ud589 \uac00\ub2a5\ud569\ub2c8\ub2e4.\n- **\ube60\ub978 \uc18d\ub3c4** \u2014 \ub124\uc774\ud2f0\ube0c \ud658\uacbd\uc73c\ub85c \ucef4\ud30c\uc77c\ub418\ub294 Rust\ub97c \uc774\uc6a9\ud558\uace0, \ud734\ub9ac\uc2a4\ud2f1 \uc5c6\uc774 \uc694\uccad\uc774 \uc644\ub8cc\ub418\uba74 \uace7\ubc14\ub85c \uc2e4\ud589\ub418\uc5b4 \ube60\ub974\uac8c u-saint \ub97c \uc870\uc791 \ubc0f \ud30c\uc2f1 \uac00\ub2a5\ud569\ub2c8\ub2e4.\n- **\uba40\ud2f0\ud50c\ub7ab\ud3fc \uc9c0\uc6d0** \u2014 UniFFI\ub97c \ud1b5\ud55c Kotlin, Swift, React-Native, Python \uc9c0\uc6d0\uc744 \uc81c\uacf5\ud558\uc5ec \ub2e4\uc591\ud55c \ud50c\ub7ab\ud3fc\uc5d0\uc11c \uac04\ud3b8\ud558\uac8c \uc774\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n- **\uac04\ud3b8\ud55c \uae30\ub2a5 \uc815\uc758** \u2014 rusaint \uc5d0\uc11c \uc9c0\uc6d0\ud558\uc9c0 \uc54a\ub294 u-saint \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0 \ub300\ud55c \ud30c\uc2f1 \ubc0f \uc9c0\uc6d0\uc744 \uc81c\uacf5\ud558\ub294 API\ub97c \uc774\uc6a9\ud574 \uac04\ud3b8\ud558\uac8c \uc815\uc758\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\n## \uc124\uce58\n\n```bash\n# Using pip\npip install rusaint\n# Using uv\nuv add rusaint\n```\n\n## \ubb38\uc11c\n\n[docs.rs](https://docs.rs/rusaint)\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": null,
"version": "0.11.4",
"project_urls": {
"Homepage": "https://eatsteak.dev",
"Source Code": "https://github.com/EATSTEAK/rusaint"
},
"split_keywords": [
"ssu",
" u-saint",
" scraping",
" parser"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "2d1b9cb65871ed8425c54b429eb2dbd496cd6e2934a9f46ea741086673d3e6d2",
"md5": "61a1c4da1a811f20db922296040e3024",
"sha256": "a600df12b5e17fca05cf5458dfa3782a440a135b84f36c85f02ed893f5c4ea93"
},
"downloads": -1,
"filename": "rusaint-0.11.4-py3-none-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "61a1c4da1a811f20db922296040e3024",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 3797491,
"upload_time": "2025-07-20T12:43:53",
"upload_time_iso_8601": "2025-07-20T12:43:53.010657Z",
"url": "https://files.pythonhosted.org/packages/2d/1b/9cb65871ed8425c54b429eb2dbd496cd6e2934a9f46ea741086673d3e6d2/rusaint-0.11.4-py3-none-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "70f49a8fd2f34c9ab1fe637227133698e743c62bc7614e9a1c73ac09cb76fce9",
"md5": "1e6c67fb091eb04a4087e3240508a4f9",
"sha256": "84bf7c7e756bdbec5fa464fdedafc509fadaf5cce44e953cb04e96274b7a2d68"
},
"downloads": -1,
"filename": "rusaint-0.11.4-py3-none-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "1e6c67fb091eb04a4087e3240508a4f9",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 3677750,
"upload_time": "2025-07-20T12:43:51",
"upload_time_iso_8601": "2025-07-20T12:43:51.155047Z",
"url": "https://files.pythonhosted.org/packages/70/f4/9a8fd2f34c9ab1fe637227133698e743c62bc7614e9a1c73ac09cb76fce9/rusaint-0.11.4-py3-none-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a06b2d73a6369efe4d75ef5112bd28fbc104180c053c00de559b2412b3b91538",
"md5": "c85abbae126efe505ccbeca8cf6c7d6c",
"sha256": "c5bfa7f52428ff49ef8cd899aa384b9af6417da36b8fdccaaaf76f54d701b08a"
},
"downloads": -1,
"filename": "rusaint-0.11.4-py3-none-musllinux_1_2_aarch64.whl",
"has_sig": false,
"md5_digest": "c85abbae126efe505ccbeca8cf6c7d6c",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 4266077,
"upload_time": "2025-07-20T12:43:54",
"upload_time_iso_8601": "2025-07-20T12:43:54.704897Z",
"url": "https://files.pythonhosted.org/packages/a0/6b/2d73a6369efe4d75ef5112bd28fbc104180c053c00de559b2412b3b91538/rusaint-0.11.4-py3-none-musllinux_1_2_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5a07dc3bae151bb31eb9f2a593d06fe87d70b0bf36848b833790e5f3067baab2",
"md5": "f1910d2f01e98c8108163b8a99f8ae5d",
"sha256": "7293a988038f859d7aebf5f85afe4c49f7e4c64578949791a7b4bd47d24f9ac8"
},
"downloads": -1,
"filename": "rusaint-0.11.4-py3-none-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "f1910d2f01e98c8108163b8a99f8ae5d",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 4311410,
"upload_time": "2025-07-20T12:43:56",
"upload_time_iso_8601": "2025-07-20T12:43:56.355328Z",
"url": "https://files.pythonhosted.org/packages/5a/07/dc3bae151bb31eb9f2a593d06fe87d70b0bf36848b833790e5f3067baab2/rusaint-0.11.4-py3-none-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "806ee36a5268d0e327644208726d8c3867f0fda70f97fa2e9ec382966e1aec20",
"md5": "ecd15b94f0b868c57007a5ae5a97ec39",
"sha256": "9e4292439a57b37b4a7d114900aa4f3b0e4c0997c0ec12e4e7ad115c6f25b9ac"
},
"downloads": -1,
"filename": "rusaint-0.11.4-py3-none-win_amd64.whl",
"has_sig": false,
"md5_digest": "ecd15b94f0b868c57007a5ae5a97ec39",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 3424322,
"upload_time": "2025-07-20T12:43:58",
"upload_time_iso_8601": "2025-07-20T12:43:58.875711Z",
"url": "https://files.pythonhosted.org/packages/80/6e/e36a5268d0e327644208726d8c3867f0fda70f97fa2e9ec382966e1aec20/rusaint-0.11.4-py3-none-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "6fa461833c4893fead7e80481f125faa6137ab3b7c5231087892ed313a49922f",
"md5": "1de3a54735eb397132bf14a34ba72495",
"sha256": "6497f74dc047e3b752a6e831958b9dfb95d7dbe3cd7bd1d6c5f514830dd86abb"
},
"downloads": -1,
"filename": "rusaint-0.11.4.tar.gz",
"has_sig": false,
"md5_digest": "1de3a54735eb397132bf14a34ba72495",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 125435,
"upload_time": "2025-07-20T12:43:57",
"upload_time_iso_8601": "2025-07-20T12:43:57.885196Z",
"url": "https://files.pythonhosted.org/packages/6f/a4/61833c4893fead7e80481f125faa6137ab3b7c5231087892ed313a49922f/rusaint-0.11.4.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-20 12:43:57",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "EATSTEAK",
"github_project": "rusaint",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "rusaint"
}