Skip to content

Instantly share code, notes, and snippets.

@littlefuntik
Last active October 12, 2017 14:54
Show Gist options
  • Save littlefuntik/1a50eb3499b1ffa7a40965b5b88e4450 to your computer and use it in GitHub Desktop.
Save littlefuntik/1a50eb3499b1ffa7a40965b5b88e4450 to your computer and use it in GitHub Desktop.

Устанавливаем консольную утилиту под названием jq для парсинга JSON строк.

sudo apt-get install -y jq
# ключ -y означает, что нам не придется отвечать на вопросы - авто-соглашение, interactive=no

Выполним в консоли скрипт для установки нужных нам переменных окружения для работы с Google AdWords API.

export \
GOOGLEAPIS_ADWORDS_VERSION="v201705" \
GOOGLEAPIS_APPLICATION_NAME="Test App" \
GOOGLEAPIS_DEVELOPER_TOKEN="" \
GOOGLEAPIS_CLIENT_CUSTOMER_ID="" \
GOOGLEAPIS_CLIENT_ID="" \
GOOGLEAPIS_CLIENT_SECRET="" \
GOOGLEAPIS_OAUTH2_REFRESH_TOKEN=""

Получить от Google API через OAuth 2.0 новый access token для работы с API и записать его в переменную окружения GOOGLEAPIS_OAUTH2_ACCESS_TOKEN.

export GOOGLEAPIS_OAUTH2_ACCESS_TOKEN=$(curl \
-X POST \
-H "Accept: application/json" \
-d "client_id=$GOOGLEAPIS_CLIENT_ID&client_secret=$GOOGLEAPIS_CLIENT_SECRET&grant_type=refresh_token&refresh_token=$GOOGLEAPIS_OAUTH2_REFRESH_TOKEN" \
https://www.googleapis.com/oauth2/v4/token | jq -r '.access_token')

Перед тем как скачивать отчет из гугла, нам нужно составить SOAP запрос.

В файле ReportAdwords_FROM_TO_request.xml будет храниться тело запроса.

Устанавливаем тип, сегмент, интервал отчета.

В результате будет вот так SOAP-запрос:

export REPORT_TYPE="ADGROUP_PERFORMANCE_REPORT" \
REPORT_SEGMENT="AdNetworkType2" \
REPORT_DATE_FROM="$(date '+%Y%m%d' -d '-90 day')" \
REPORT_DATE_TO="$(date '+%Y%m%d')" && \
export REPORT_SOAP_REQUEST='<?xml version="1.0" encoding="UTF-8"?>
<reportDefinition xmlns="https://adwords.google.com/api/adwords/cm/'$GOOGLEAPIS_ADWORDS_VERSION'"> 
    <selector>
        <fields>'$REPORT_SEGMENT'</fields>
        <fields>Date</fields>
        <fields>CampaignId</fields>
        <fields>CampaignName</fields>
        <fields>CampaignStatus</fields>
        <fields>AdGroupId</fields>
        <fields>AdGroupName</fields>
        <fields>AdGroupStatus</fields>
        <fields>Impressions</fields>
        <fields>Clicks</fields>
        <fields>Cost</fields>
        <fields>AveragePosition</fields>
        <!--<fields>AllConversions</fields>-->
        <!--<fields>AllConversionValue</fields>-->
        <fields>Conversions</fields>
        <fields>ConversionValue</fields>
        <!--<fields>SearchImpressionShare</fields>-->
        <!--<fields>SearchRankLostImpressionShare</fields>-->
        <dateRange>
            <min>'$REPORT_DATE_FROM'</min>
            <max>'$REPORT_DATE_TO'</max>
        </dateRange>
    </selector>
    <reportName>Custom Adgroup Performance Report</reportName>
    <reportType>'$REPORT_TYPE'</reportType>
    <dateRangeType>CUSTOM_DATE</dateRangeType>
    <downloadFormat>CSV</downloadFormat>
</reportDefinition>
' && \
export REPORT_REQUEST_FILENAME="ReportAdwords_${REPORT_DATE_FROM}_${REPORT_DATE_TO}_request.xml" && \
echo $REPORT_SOAP_REQUEST > $REPORT_REQUEST_FILENAME

Теперь скачиваем CSV репорт в файл, название которого соответствует шаблону ReportAdwords_FROM_TO_response.csv:

export REPORT_FILENAME="ReportAdwords_${REPORT_DATE_FROM}_${REPORT_DATE_TO}_response.csv" && \
curl \
-X POST \
-H "Authorization: Bearer $GOOGLEAPIS_OAUTH2_ACCESS_TOKEN" \
-H "developerToken: $GOOGLEAPIS_DEVELOPER_TOKEN" \
-H "clientCustomerId: $GOOGLEAPIS_CLIENT_CUSTOMER_ID" \
-H "skipReportHeader: true" \
-H "skipColumnHeader: true" \
-H "skipReportSummary: true" \
-H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" \
-H "Expect: 100-continue" \
-d "__rdxml=$REPORT_SOAP_REQUEST" \
https://adwords.google.com/api/adwords/reportdownload/$GOOGLEAPIS_ADWORDS_VERSION > $REPORT_FILENAME && \
echo "" && \
echo "Report file path: $REPORT_FILENAME"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment