AI prompts
base on Clien-Archiver is a CLI tool that allows users to backup and manage posts from the clien.net website in a local environment. # Clien Archiver
Clien-Archiver는 [클리앙]((https://www.clien.net) 웹사이트의 게시물을 로컬 환경에 백업하고 관리할 수 있는 CLI 도구입니다.
## 기능
- 내가 작성한 게시물을 로컬 디스크에 저장할 수 있습니다.
- 단일 게시물 URL 또는 여러 개의 게시물 URL을 파일에서 읽어와 백업할 수 있습니다.
- 게시물의 제목, 작성자, 카테고리, 내용, 작성일, 댓글 등의 정보를 저장합니다.
- 게시물에 포함된 이미지를 로컬 디렉토리에 다운로드하여 저장합니다.
- 저장된 데이터는 JSON 형식으로 저장됩니다.
## 알려진 문제
> 댓글의 이미지와 작성자는 저장하지 않으며, 댓글의 답글이나 사용자 본인이 작성한 댓글도 특별히 구별하지 않습니다.
## 내보내기 플러그인 (예정)
향후 백업된 데이터를 다른 플랫폼으로 내보낼 수 있는 내보내기 플러그인 기능을 개발할 계획입니다. 초기에는 [다모앙](https://damoang.net/)과 [레딧 모공](https://new.reddit.com/r/Mogong/)을 지원할 예정입니다.
## 설치
[여기](https://github.com/wokim/clien-archiver/releases)에서 사전 빌드 된 바이너리를 다운로드 하세요.
```sh
./clien-archiver-<platform>-<arch> --help
# For example,
./client-archiver-macos-x64 --help
```
### Building from Source
```sh
# Clone the project:
$ git clone https://github.com/yourusername/clien-archiver.git
# Navigate to the project directory:
$ cd clien-archiver
# Install the required dependencies:
$ npm install
# Build the project:
$ npm run build
# Run the tool:
node lib/index.js --help
```
## 사용법
### 단일 게시물 백업
주어진 게시물을 백업합니다. 내가 작성한 게시물이 아니어도 상관 없습니다.
```sh
$ clien-archiver archive --url <post URL>
# 예시:
$ clien-archiver archive --url https://www.clien.net/service/board/park/18680440
# dry-run 명령어를 추가하면 실제로 게시물을 저장하지 않고, 처리 결과만을 확인할 수 있습니다.
$ clien-archiver archive --url https://www.clien.net/service/board/park/18680440 --dry-run
Archiving URL: https://www.clien.net/service/board/park/18680440
```
### 여러 게시물 백업
1. 백업할 게시물 URL을 urls.txt 파일에 개행 문자로 구분하여 저장합니다.
2. 다음 명령을 실행합니다.
```sh
$ clien-archiver archive --urls urls.txt
# urls.txt
# URL이 개행 문자로 구분되어 있습니다
$ cat urls.txt
https://www.clien.net/service/board/park/18680440
https://www.clien.net/service/board/park/18680441
https://www.clien.net/service/board/park/18680442
...
# # dry-run 명령어를 추가하면 실제로 게시물을 저장하지 않고, 처리 결과만을 확인할 수 있습니다.
$ clien-archiver archive --urls urls.txt --dry-run
```
### 사용자 글 백업
주어진 사용자 아이디와 비밀번호로 로그인하여 내가 작성한 게시글 목록을 가져옵니다. 반드시 **2단계 인증은 사용안함**으로 설정되어 있어야 합니다. `dry-run` 명령어를 사용한 경우 현재 경로의 `my-articles.txt` 파일에 내가 작성한 모든 게시글의 경로를 저장합니다.
> 아이디와 비밀번호는 절대 저장하지 않습니다. 소스코드가 공개되어 있으므로 확인 가능합니다.
```sh
$ clien-archiver backup --id <사용자 아이디> --password <비밀번호>
# 예시:
$ clien-archiver backup --id myusername --password mypassword
# dry-run 명령어를 추가하면 실제로 게시물을 저장하지 않고, 처리 결과만을 확인할 수 있습니다.
# 현재 경로에 my-articles.txt 라는 파일로 저장합니다.
$ clien-archiver backup --id myusername --password mypassword --dry-run
```
### 도움말
```sh
clien-archiver --help
```
## 파일 구조
백업된 데이터는 다음과 같은 구조로 저장됩니다:
```sh
# articles 폴더를 잘 보관해주세요.
articles/
Board Name/
Post ID.json
images/
Image File1.jpg
Image File2.png
...
```
- `articles` 디렉토리 내에 각 게시판 이름으로 하위 디렉토리가 생성됩니다.
- 각 게시물은 `게시물 ID.json` 파일로 저장되며, JSON 형식으로 게시물 정보가 포함됩니다.
- 게시물에 포함된 이미지는 `images` 디렉토리에 저장됩니다.
## Contributing
This project is open-source, and contributions are welcome. You can contribute to the project in various ways, such as reporting bugs, requesting features, or improving the code.
## License
This project is licensed under the MIT License.
", Assign "at most 3 tags" to the expected json: {"id":"8995","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"