본문으로 건너뛰기

2. 매장 방문 이벤트 데이터 조회하기

이제 특정 매장에 대한 방문 이벤트 데이터를 조회할 수 있습니다. /event/place-visit API를 사용하여 데이터를 필터링하고 페이지네이션을 적용하는 방법을 알아보겠습니다.

매장 방문 이벤트 조회 API

특정 매장에 대한 방문 이벤트 데이터를 조회합니다.

요청

GET /event/place-visit

쿼리 파라미터

  • place_id: 매장 식별자
  • start_date: 조회 시작 날짜 (YYYY-MM-DD 형식)
  • end_date: 조회 종료 날짜 (YYYY-MM-DD 형식)
  • age: 연령대 (0대의 경우 0, 10대일 경우 1, ..., 60대 이상일 경우 6)
  • gender: 성별 (남성일 경우 0, 여성일 경우 1)
  • start_time: 조회 시작 시간 (HH:MM 형식)
  • end_time: 조회 종료 시간 (HH:MM 형식)
  • page: 페이지 번호
  • page_size: 페이지당 결과 수

응답 예시

{
"count": 100,
"next": "https://api.mash-board.io/event/place-visit?page=2",
"previous": null,
"results": [
{
"id": -2147483648,
"age": 0,
"gender": 0,
"place_start_time": "2019-08-24T14:15:22Z",
"place_id": "f0968ed8-288a-49fe-ae98-74c720303b1b"
}
// ... (다른 결과들)
]
}
  • count: 전체 결과 수
  • next: 다음 페이지의 결과를 조회할 수 있는 링크
  • previous: 이전 페이지의 결과를 조회할 수 있는 링크 (현재 페이지가 첫 번째 페이지인 경우 null)
  • results: 조회된 방문 이벤트 데이터 배열

API 명세서 바로가기

예시 코드

아래는 Python을 사용하여 /event/place-visit API를 호출하여 매장 방문 이벤트 데이터를 조회하는 예시 코드입니다. 이 코드는 MashClient 모듈을 사용합니다.

# MashClient 모듈을 사용하여 매장 방문 이벤트 데이터 조회

# 클라이언트 모듈 초기화
client = MashClient()

# 사용자 인증 및 토큰 획득
client.authenticate(email="user@example.com", password="password123")

# 데이터 요청 파라미터 설정
params = {
"place_id": "12345678-1234-5678-1234-567812345678", # place_id는 메타 데이터 - 매장 목록 API를 통해 얻을 수 있습니다.
"start_date": "2023-01-01",
"end_date": "2023-01-31",
"age": 3,
"gender": 1,
"start_time": "09:00",
"end_time": "18:00",
"page": 1,
"page_size": 10
}

# 데이터 요청
data = client.get_data(endpoint="/event/place-visit", params=params)

# 데이터 출력
print(data)

페이지네이션(Pagination)

페이지네이션은 결과를 여러 페이지로 나누어 반환하는 기술입니다. 이를 통해 클라이언트는 필요한 만큼의 결과를 받을 수 있으며, 서버 부하를 분산시키고 응답 시간을 최적화할 수 있습니다.

페이지네이션 파라미터

  1. page (페이지 번호): 조회하려는 페이지의 번호입니다. 기본값은 1입니다.

  2. page_size (페이지당 결과 수): 각 페이지에 포함되는 결과의 개수입니다. 기본값은 API에서 설정한 값이나 클라이언트가 명시적으로 지정할 수 있습니다. 최대값은 10,000 건 입니다.

예시

다음은 /event/place-visit API의 일부 응답입니다.

{
"count": 200,
"next": "https://api.mash-board.io/event/place-visit?page=2",
"previous": null,
"results": [
// ... (현재 페이지의 결과)
]
}
  • count (총 결과 수): 전체 결과의 개수를 나타냅니다.

  • next (다음 페이지 링크): 다음 페이지의 결과를 가져오기 위한 링크입니다. 만약 다음 페이지가 없으면 null입니다.

  • previous (이전 페이지 링크): 이전 페이지의 결과를 가져오기 위한 링크입니다. 만약 이전 페이지가 없으면 null입니다.

페이지네이션 사용 예시

1. 첫 번째 페이지 조회

GET /event/place-visit?page=1&page_size=10

이 경우, 첫 번째 페이지에 해당하는 10개의 결과를 받을 수 있습니다.

2. 다음 페이지 조회

이전 응답의 next 링크를 사용하여 다음 페이지의 결과를 조회합니다.

GET /event/place-visit?page=2&page_size=10

이런 식으로 필요한 만큼 페이지를 이동하여 결과를 받아올 수 있습니다. 페이지네이션은 큰 데이터 세트를 다룰 때 유용하며, 클라이언트가 필요한 양의 데이터를 효율적으로 가져올 수 있도록 합니다.

페이지네이션 된 전체 데이터 불러오기

이전에 작성한 MashClient에 메소드를 추가하여 페이지네이션 된 데이터를 연속적으로 호출하여 전체 데이터를 불러오는 방법을 안내합니다.

import time

class MashClient:
# (이전에 작성한 MashClient 코드...)

def get_all_data(self, endpoint, params=None, sleep_duration=1):
"""
페이지네이션을 사용하여 모든 데이터를 조회합니다.
:param endpoint: 요청할 엔드포인트
:param params: 쿼리 파라미터 (딕셔너리 형태)
:param sleep_duration: 각 페이지 조회 후 대기할 시간(초)
:return: 모든 데이터의 리스트
"""
all_results = []

# 첫 번째 페이지 조회
response = self.get_data(endpoint=endpoint, params=params)

all_results.extend(response["results"])

# 다음 페이지가 있을 경우 계속 조회
while response.get("next"):
response = self.get_data(endpoint=response["next"])

all_results.extend(response["results"])

# 일정 시간 대기
time.sleep(sleep_duration)

return all_results

# 사용 예시 (슬립 2초로 설정)
client = MashClient()
all_data = client.get_all_data(endpoint="/event/place-visit", params=params, sleep_duration=2)
print(all_data)


전체 조회 시 요청 중간 대기 시간 부여하기

슬립(대기)을 주는 이유는 다수의 API 요청을 보낼 때 서버에 부하를 줄이고, 서버의 정상적인 동작을 돕기 위한 것입니다. 특히 페이지네이션된 데이터를 모두 조회할 때, 여러 번의 요청을 동시에 보내면 서버에 과부하가 걸릴 수 있습니다. 이를 방지하고 서버에게 충분한 여유 시간을 제공하기 위해 각 페이지 조회 후 일정 시간 동안 대기합니다.

대기 시간을 적절히 설정함으로써 서버와의 효율적인 소통을 유지하면서 데이터를 안정적으로 수집할 수 있습니다. 너무 짧은 대기 시간은 서버에 부하를 주는 것이고, 너무 긴 대기 시간은 데이터 수집에 소요되는 시간을 늘릴 수 있습니다.