네이버 검색광고 가져오기

2024년 7월 8일 월요일

Today I Learned

날짜

2024년 7월 8일 월요일

내용

검색광고 데이터 가져오기(2)

기본적인 기능 구현을 완료했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
class NaverDataImporter:
    def __init__(
        self, naver_account_id: str, raw_data_format: RawDataFormat, db: Session
    ):
        self.naver_account_id = naver_account_id
        self.raw_data_format = raw_data_format
        self.db = db

    def days_division(self):
        if (
            self.raw_data_format == RawDataFormat.NSA_GTD
            or self.raw_data_format == RawDataFormat.NSA_CTD
        ):
            self.days_interval = 49
            self.days_limit = 50

        else:
            self.days_interval = 29
            self.days_limit = 90

    def import_data(self):
        res = []
        today = datetime.today()
        start_date = today - timedelta(days=1)
        end_date = start_date - timedelta(days=self.days_interval)
        while start_date >= today - timedelta(days=self.days_limit):
            create_naver_stat_report(
                start_date=start_date,
                end_date=end_date,
                naver_account_id=self.naver_account_id,
                report_type=self.raw_data_format,
                db=self.db,
            )
            start_date = end_date - timedelta(days=1)
            end_date = start_date - timedelta(days=self.days_interval)

            result = get_naver_stat_reports(
                type=self.raw_data_format,
                naver_account_id=self.naver_account_id,
                db=self.db,
            )
            res += result
        return res

    def delete_reports_and_files(self):
        delete_all_stat_reports(naver_account_id=self.naver_account_id, db=self.db)

    def data_process(self):
        self.days_division()
        result = self.import_data()
        self.delete_reports_and_files()
        return result

NSA_GTD, NSA_CTD 로우 데이터를 만들 때는 2가지 대용량 보고서를 만들고 데이터륿 참조해야한다. 네이버에선 100개 이상 보고서가 생성되면 가장 오래된 것을 기준으로 삭제해버린다. 이 두 가지 로우데이터는 최대 400일치 분량의 데이터를 가져와야하므로 하루에 2가지, 총 800개 보고서를 만들어서 데이터를 가져와야 한다. 보고서의 날짜는 하루짜리밖에 안된다. 100개 이상의 보고서를 만들 수 없으므로 나누어서 100개를 만들고 데이터를 취한다음 다음 100개를 다시 만들어야한다. 이때 기존에 만들어 놨던 100개는 삭제된다.

NSA_TD, NSA_T는 최대 90일치를 불러오는데, 하루에 3가지 보고서를 만들어야 한다. 검색어 데이터가 필요해서 추가적인 보고서가 필요하기 때문.. 그래서 30일 씩 3번 끊어서 만들도록 처리했다.

구글 스프레드시트에 추가하는 동작도 구현했는데, 400일 동안 7천개 가량의 데이터가 있었고 가져와서 스프레드시트에 올리는데 4분정도 소요됐다. 우선 확실히 작동되도록 만들고, 추상 클래스 패턴으로 바꾸든 리팩토링해야 겠다.

데이터 가져오는동안 status 상태도 처리해야하고, 현재 집어넣는 데이터 형식도 그냥 문자열인데다, 순서도 엉망이라 정렬도 해야한다. 후딱 만들고 기깔나게 손질해보자.

회고

개발 꿀잼