IT

구글 키워드 애즈 API 실제로 구현 했을 때 예시

KeepGooing 2024. 10. 29. 14:20
반응형

필요한 환경

python 및 pip   (Python 3.11.4)

pip install google-ads

 

필요한 파일

google_keyword_planner.py

google-ads.yaml

 

실행 방법

python google_keyword_planner.py 

 


 

두 개의 파일만 있으면 구글 키워드 플래너 api 구현이 가능하다.

 

단, 그대로 코드를 복붙하면 안되고 특정 값은 변경해서 써야함을 주의하자!

 

1. 코드 (google_keyword_planner.py)

from google.ads.googleads.client import GoogleAdsClient
from google.ads.googleads.errors import GoogleAdsException
import sys

def get_keyword_ideas(customer_id, location_ids, language_id, keyword_texts):
    client = GoogleAdsClient.load_from_storage("[google-ads.yaml가 위치한 경로]/google-ads.yaml")

    keyword_plan_idea_service = client.get_service("KeywordPlanIdeaService")

    # Create the request object
    request = client.get_type("GenerateKeywordIdeasRequest")
    request.customer_id = customer_id

    # Set the language
    request.language = f"languageConstants/{language_id}"

    # Set the locations
    request.geo_target_constants = [
        client.get_service("GeoTargetConstantService").geo_target_constant_path(location_id)
        for location_id in location_ids
    ]

    # Set the keyword plan network
    request.keyword_plan_network = client.enums.KeywordPlanNetworkEnum.GOOGLE_SEARCH_AND_PARTNERS

    # Add the keyword texts
    request.keyword_seed.keywords.extend(keyword_texts)

    try:
        # Make the request
        keyword_ideas = keyword_plan_idea_service.generate_keyword_ideas(request=request)

        # print(keyword_ideas)

        # Process and print the results
        for idea in keyword_ideas:
            competition_level = client.enums.KeywordPlanCompetitionLevelEnum(
                idea.keyword_idea_metrics.competition
            ).name

            print(
                f'Keyword: "{idea.text}", '
                f"Avg. Monthly Searches: {idea.keyword_idea_metrics.avg_monthly_searches}, "
                f"Competition: {competition_level}"
            )
    except GoogleAdsException as ex:
        print(f"Request failed with status {ex.error.code().name} and includes the following errors:")
        for error in ex.failure.errors:
            print(f"\t{error.error_code}: {error.message}")
        sys.exit(1)

if __name__ == "__main__":
    customer_id = "[구글 애드즈에서 가입한 테스트 계정의 customer_id]"
    location_ids = ["2410"]  # 한국 코드
    language_id = "1012"     # 한국어 코드
    keyword_texts = ["행복","돈","아름다움"]


    get_keyword_ideas(customer_id, location_ids, language_id, keyword_texts)

 

* 필요시 설치사항  pip install google-ads

 

위 코드를 복붙하기 전에 바꿔야 될 것 두 개

 

  • [google-ads.yaml가 위치한 경로]/google-ads.yaml
    • example)   "D:/googleTrendsAPI/google-ads.yaml"
  • [구글 애드즈에서 가입한 테스트 계정의 customer_id]
    • example)    2381517421

 

2. yaml파일 (google-ads.yaml)

developer_token: SdASD23SDAF323rf23fSDFSDFBC
client_id: 178978978978932-mwesdfwef22wefweeeeo3q.apps.googleusercontent.com
client_secret: SDFSDFdf-0SDFSDFDFFqQcqPDDSFSDF0TGrR-KSfDFSDFY
login_customer_id: 2381517421
use_proto_plus: True
refresh_token: 2//7e9WSDGdD_YInwA4SNwF-L9IrJmMu3kS8aASD8zrSASDD_ZwJASDSADASrEtP-CX92Jm2ASDASDSADSADls

위 YAML파일은 예시입니다.

 

그럼 yaml파일에 있는 각각의 토큰과 code값을 어디서 갖고 올 수 있는지 알아보겠습니다.

 

1. developer_token

https://ads.google.com

여기에서 계정을 생성해서 개발자 토큰 발행하시면 얻을 수 있습니다.

 

2. client_id와 client_secret

https://console.cloud.google.com/apis/credentials

 

해당 페이지에서 프로젝트 생성 후 사용자 인증 정보 만들기에서 OAuth2 클라이언트 ID 생성하시면

client_id와 client_secret를 구하실 수 있습니다.

 

3. login_customer_id

https://ads.google.com/ 여기에서 계정을 생성해서 개발자 토큰 발행했던 것과 별개로

추가로 계정을 생성하고 해당 계정의 customer id를 갖고오면 되는데 이 것은 페이지 우측 상단에
332-191-7852 이런식으로 써있는게 있는데 이걸 쓰면 된다. 단 코드 상에서는 -를 빼고 쓰자.

 

4. user_proto_plus

그냥 설절 값이다 코드상 다음 이점이 있어 쓴다.

 

`use_proto_plus: True` 설정은 Google의 Python API 클라이언트 라이브러리(예: `google-ads`)에서 Google Protocol Buffers(프로토버프, protobuf) 메시지를 좀 더 Python 친화적으로 다룰 수 있도록 해주는 `proto-plus` 라이브러리를 활성화하는 역할을 합니다.

 

5. refresh_token

마지막으로 refresh_token은 해당 로그인을 매번할 수 없어 한 번 인증하고 난 후에 받는 토큰으로 api 호출시 인증할 때 로그인 대시 사용하는 토큰이다.

이 토큰은 특정 사이트에서도 받을 수 있지만 어차피 코드로 구현할 거면 해당 코드를 제공해줄테니 이 코드를 활용해서 token 발행 하시길 바란다.

 

 

generate-refresh-token.py

import json
from google.auth.transport.requests import Request
from google_auth_oauthlib.flow import InstalledAppFlow

def generate_refresh_token(client_id, client_secret):
    flow = InstalledAppFlow.from_client_config(
        {
            "installed": {
                "client_id": client_id,
                "client_secret": client_secret,
                "auth_uri": "https://accounts.google.com/o/oauth2/auth",
                "token_uri": "https://oauth2.googleapis.com/token",
            }
        },
        scopes=["https://www.googleapis.com/auth/adwords"],
    )
    # 포트를 8080으로 고정
    credentials = flow.run_local_server(port=8080)
    print("Access token:", credentials.token)
    print("Refresh token:", credentials.refresh_token)
    return credentials.refresh_token

if __name__ == "__main__":
    # 여기 client_id 및 client_secret 값을 Google Cloud에서 생성한 값으로 변경
    client_id = " 178978978978932-mwesdfwef22wefweeeeo3q.apps.googleusercontent.com"
    client_secret: SDFSDFdf-0SDFSDFDFFqQcqPDDSFSDF0TGrR-KSfDFSDFY


    refresh_token = generate_refresh_token(client_id, client_secret)
    print(f"Your refresh token: {refresh_token}")

*  필요시 설치사항:    pip install google-auth google-auth-oauthlib google-auth-httplib2

 

이전에 언급한데로 client_id와 client_secret는 예시로 적어 놓은 것이니 변경해서 넣자.

주의사항이 두 가지가 있다.

해당 코드를 python generate-refresh.token.py로 실행하면 브라우저 창에서 구글 로그인을 요청하거나 등록된 계정에서 로그인 하라고 하는데 해당 계정을 인증 받기위한 준비 단계 2개 있다.

 

 

첫 번째,

OAuth 2.0 클라이언트 ID에서 발급 받은 client_id와 client_secret의 수정 페이지로 들어가면

 

아래같은 칸을 볼 수 있는데 테스트 계정으로 운영하는 것이니 아래처럼 칸을 채워야한다.

(포트는 8080으로 코드 상에 넣었으니 8080으로 한다.)

 

위 내용은 refresh token을 발급 신청하는 곳을 gcp에 미리 저장하여 승인 받을 수 있게하는 과정이다.

 

 

 

 

두 번째, 

테스트 사용자 등록

 

 

 

위에 내용에서 자신이 발급 받은 것을 변경해서 써야 아래처럼 정상적으로 발행이 가능하다.

 python generate-refresh.token.py

 

 

위 내용을 잘 따라 했다면 다음과 같은 결과물을 콘솔 창에서 확인할 수 있다.

 

키워드 호출 플래너 api 호출 결과물

반응형