soomgogather.google.searchconsole의 소스 코드

from marshmallow import Schema, ValidationError, fields, validate

from ._googleclient import BaseGoogleClient


[문서]class SearchConsole(BaseGoogleClient): """Google SearchConsol query 인스턴스의 기본설정 값(GOOGLE_APPLICATION_CREDENTIALS)이나 service account 키파일을 사용하여 search console 서비스 객체를 생성하고 사용자 사이트(site_url)의 검색 트래픽에 대한 통계 정보를 얻을 수 있다. https://developers.google.com/webmaster-tools/search-console-api-original/v3/searchanalytics/query 사용 예시) ``https://soomgo.com`` 에 대해 2021-11-30 ~ 2021-11-30까지 image 검색에 대한 통계정보를 받아온다. 구글 API 서비스생성시 키파일을 사용하거나 인스턴스의 기본설정을 사용한다. .. code-block:: python >>> from soomgogather.google import SearchConsole >>> site_url = "https://soomgo.com" >>> service = SearchConsole('path/service_account_key.json') >>> # when using the default setting >>> # service = SearchConsole() >>> params = { ... 'start_dt': '2021-11-01', ... 'end_dt': '2021-11-30', ... 'type': 'image' ... } >>> r = service.query(site_url, params=params) >>> if r['rows']: ... print(r['rows']) """ scope = ['https://www.googleapis.com/auth/webmasters.readonly'] service_name = 'searchconsole' service_version = 'v1' class _SearchConsoleSchema(Schema): start_dt = fields.Str(attribute='startDate', required=True) end_dt = fields.Str(attribute='endDate', required=True) dimensions = fields.List( fields.Str(), attribute='dimensions', validate=validate.ContainsOnly(['country', 'device', 'date', 'page', 'query', 'searchAppearance']), ) row_limit = fields.Int(attribute='rowLimit', validate=validate.Range(max=25000)) start_row = fields.Int(attribute='startRow', validate=validate.Range(min=0)) type = fields.Str( attribute='type', validate=validate.OneOf(['web', 'video', 'image', 'news', 'googleNews', 'discover']) ) dimension_filter_groups = fields.List(fields.Str(), attribute='dimensionFilterGroups') data_state = fields.Str(attribute='dataState', validate=validate.OneOf(['all', 'final'])) aggregation_type = fields.Str(attribute='aggregationType') def _get_params(self, params): if "data_state" in params: params["data_state"] = params["data_state"].lower() try: return self._SearchConsoleSchema().load(params) except ValidationError as err: raise ValueError(f"incorrect parameters: {err}")
[문서] def query(self, site_url, params={}): """전달한 필터와 조건에 맞는 검색 트래픽에 대한 정보를 반환한다. :param params: search console의 데이터를 받아오기 위한 매개변수, start_dt, end_dt는 필수 :type params: dict **params:** - *start_dt* (`str`) : 통계를 추출할 기간의 시작일, YYYY-MM-DD PT (UTC - 7:00/8:00) (required) - *end_dt* (`str`) : 통계를 추출할 기간의 종료일, YYYY-MM-DD PT (UTC - 7:00/8:00) (required) - *dimensions* (`list`) : 결과를 그룹핑할 키, 지정안하거나 여러개를 지정가능, 결과셋의 keys값 - country, device, date, page, query, searchAppearance - *row_limit* (`int`) : 반환되는 결과의 row수 지정 - default 1000, maximum = 25000 - *start_row* (`int`) : 반환되는 결과의 시작 row 번호 - 결과셋은 0부터 시작하는 인덱스 - 양수만 가능 - *type* (`str`) : 구글의 검색타입 필터 - web(default), video, image, news, discover, googleNews(구글 뉴스 앱) - *dimension_filter_groups* (`list`) : dimensions 로 그룹핑시 필터 및 조건 - groupType: 현재는 'and' 조건만 지원 - filters: dimension의 필터 설정 리스트 - 형식: (dimension name) (an operator) (a value) - dimension: 필터를 지정할 dimension 이름 (country, device, date, query, searchAppearance) - operator: contains, equals, notEquals, includingRegex, excludingRegex - expression: 필터 값 - *data_state* (`str`) : all(fresh data 포함) 또는 final 값으로 지정 (대소문자 구분안함) - *aggregation_type* (`str`) : 결과의 aggregation(집합)타입, auto(default), byPage(by URI), byProperty(by property) """ response = self.service.searchanalytics().query(siteUrl=site_url, body=self._get_params(params)).execute() return response