177 lines
5.1 KiB
Markdown
177 lines
5.1 KiB
Markdown
# Homepage Custom API 위젯 가이드
|
|
|
|
## 엔드포인트
|
|
|
|
- 공개 URL: `GET /api/homepage-widget`
|
|
- 운영 예시: `https://sori.studio/api/homepage-widget`
|
|
- NAS 호스트 포트 예시: `http://NAS_LAN_IP:43080/api/homepage-widget`
|
|
- 같은 Docker 네트워크 예시: `http://sori-studio:3000/api/homepage-widget`
|
|
|
|
Homepage가 Docker 컨테이너에서 실행 중이면 `localhost`는 Homepage 컨테이너 자신을 가리킨다. 같은 서버의 sori.studio에 연결할 때는 공개 도메인, NAS 내부 IP 또는 같은 Docker 네트워크의 서비스 이름을 사용한다.
|
|
|
|
## 제공 필드
|
|
|
|
| 필드 | 형식 | 설명 |
|
|
|------|------|------|
|
|
| `title` | text | 사이트 제목 |
|
|
| `updatedAt` | date | API 응답 생성 시각 |
|
|
| `todayVisitors` | number | 오늘 순방문자 수 |
|
|
| `totalVisitors` | number | 일별 순방문자 수의 누적 합계 |
|
|
| `todayPageViews` | number | 오늘 페이지뷰 |
|
|
| `totalPageViews` | number | 전체 누적 페이지뷰 |
|
|
| `visitorsLast7Days` | number | 최근 7일 방문자 합계 |
|
|
| `visitorsLast30Days` | number | 최근 30일 방문자 합계 |
|
|
| `visitorsLast180Days` | number | 최근 180일(약 6개월) 방문자 합계 |
|
|
| `visitorsLast365Days` | number | 최근 365일(1년) 방문자 합계 |
|
|
| `pageViewsLast30Days` | number | 최근 30일 페이지뷰 |
|
|
| `onlineNow` | number | 최근 90초 안에 활동한 접속자 |
|
|
| `loggedInNow` | number | 현재 접속자 중 로그인 회원 |
|
|
| `avgEngagedSeconds` | duration | 오늘 평균 체류시간(오늘 값이 없으면 조회 범위 평균) |
|
|
| `totalPosts` | number | 현재 공개된 발행 게시글 수 |
|
|
| `totalComments` | number | 공개 게시글에 달린 공개 댓글 수 |
|
|
| `totalPages` | number | 공개 고정 페이지 수 |
|
|
| `totalTags` | number | 전체 태그 수 |
|
|
| `totalMembers` | number | 전체 가입 계정 수 |
|
|
| `items` | array | 이름·표시 문자열·원본 값을 포함한 기본 통계 목록 |
|
|
|
|
`totalVisitors`는 사이트 전체에서 동일인을 영구 식별한 값이 아니다. 날짜별 중복을 제거한 방문자 수를 누적하므로 같은 사람이 다른 날짜에 방문하면 다시 집계된다.
|
|
|
|
## 추천 기본 설정
|
|
|
|
`services.yaml`에서 필요한 항목만 골라 `mappings`에 넣는다.
|
|
|
|
```yaml
|
|
- sori.studio:
|
|
href: https://sori.studio
|
|
description: 블로그 통계
|
|
widget:
|
|
type: customapi
|
|
url: https://sori.studio/api/homepage-widget
|
|
refreshInterval: 300000 # 5분
|
|
mappings:
|
|
- field: todayVisitors
|
|
label: 오늘 방문자
|
|
format: number
|
|
suffix: 명
|
|
- field: totalVisitors
|
|
label: 누적 방문자
|
|
format: number
|
|
suffix: 명
|
|
- field: totalPosts
|
|
label: 전체 게시글
|
|
format: number
|
|
suffix: 개
|
|
- field: totalComments
|
|
label: 전체 댓글
|
|
format: number
|
|
suffix: 개
|
|
```
|
|
|
|
## 선택 가능한 설정 예시
|
|
|
|
### 방문·조회 통계
|
|
|
|
```yaml
|
|
mappings:
|
|
- field: todayVisitors
|
|
label: 오늘 방문자
|
|
format: number
|
|
suffix: 명
|
|
- field: totalVisitors
|
|
label: 누적 방문자
|
|
format: number
|
|
suffix: 명
|
|
- field: todayPageViews
|
|
label: 오늘 조회
|
|
format: number
|
|
suffix: 회
|
|
- field: totalPageViews
|
|
label: 누적 조회
|
|
format: number
|
|
suffix: 회
|
|
```
|
|
|
|
### 콘텐츠 통계
|
|
|
|
```yaml
|
|
mappings:
|
|
- field: totalPosts
|
|
label: 게시글
|
|
format: number
|
|
suffix: 개
|
|
- field: totalComments
|
|
label: 댓글
|
|
format: number
|
|
suffix: 개
|
|
- field: totalPages
|
|
label: 페이지
|
|
format: number
|
|
suffix: 개
|
|
- field: totalTags
|
|
label: 태그
|
|
format: number
|
|
suffix: 개
|
|
```
|
|
|
|
### 기간·실시간 통계
|
|
|
|
```yaml
|
|
mappings:
|
|
- field: visitorsLast7Days
|
|
label: 최근 7일 방문
|
|
format: number
|
|
suffix: 명
|
|
- field: visitorsLast30Days
|
|
label: 최근 30일 방문
|
|
format: number
|
|
suffix: 명
|
|
- field: visitorsLast180Days
|
|
label: 최근 6개월 방문
|
|
format: number
|
|
suffix: 명
|
|
- field: visitorsLast365Days
|
|
label: 최근 1년 방문
|
|
format: number
|
|
suffix: 명
|
|
- field: pageViewsLast30Days
|
|
label: 최근 30일 조회
|
|
format: number
|
|
suffix: 회
|
|
- field: onlineNow
|
|
label: 현재 접속
|
|
format: number
|
|
suffix: 명
|
|
- field: avgEngagedSeconds
|
|
label: 평균 체류
|
|
format: duration
|
|
```
|
|
|
|
### 회원·갱신 정보
|
|
|
|
```yaml
|
|
mappings:
|
|
- field: totalMembers
|
|
label: 전체 회원
|
|
format: number
|
|
suffix: 명
|
|
- field: loggedInNow
|
|
label: 로그인 접속
|
|
format: number
|
|
suffix: 명
|
|
- field: updatedAt
|
|
label: 갱신
|
|
format: relativeDate
|
|
locale: ko
|
|
numeric: auto
|
|
```
|
|
|
|
## 확인 방법
|
|
|
|
```bash
|
|
curl https://sori.studio/api/homepage-widget
|
|
```
|
|
|
|
응답이 정상인데 Homepage에 값이 나오지 않으면 Homepage 컨테이너 내부에서 해당 URL에 접근할 수 있는지 먼저 확인한다.
|
|
|
|
방문 기간 통계는 일별 집계 테이블에서 최근 7·30·180·365일을 한 번에 합산한다. Homepage를 개인용으로 간헐적으로 확인한다면 `refreshInterval: 300000`(5분) 또는 `600000`(10분)으로 두면 충분하다.
|