Конвертируйте micros в валюту в отчете csv AWQL с помощью API AdWords

У меня есть этот запрос в AWQL, и я получаю ответ в формате CSV, используя ReportUtils::DownloadReportWithAwql

select Date, Clicks, Cost from ACCOUNT_PERFORMANCE_REPORT during LAST_30_DAYS

Мне нужно преобразовать данные о стоимости в CSV из микросхем в валюту на счете (Cost / 1000000).

Также мне нужно иметь возможность преобразовывать любые данные Cost в ответе с использованием любого запроса AWQL, например, решение должно работать и для этого запроса:

SELECT CampaignName, KeywordText, Cost, CostPerConversion, QualityScore FROM KEYWORDS_PERFORMANCE_REPORT DURING LAST_7_DAYS

Начиная с v201406, заголовок returnMoneyInMicros больше не действителен, а значения всегда возвращаются как микро. https://developers.google.com/adwords/api/docs/guides/reporting-concepts

Это мой первый вопрос в stackru.

1 ответ

Решение

Наконец-то я это сделал и отлично работает для меня.

    //data is a string with data in micros in csv format
    $data = $this->DownloadCriteriaReportWithAwql($awql);

    //start micros conversion
    $count = 0;
    $costpos = array();
    $newarray = array();
    foreach(preg_split("/((\r?\n)|(\r\n?))/", $data) as $line){

        $linearray = str_getcsv($line);

        if($count == 0) {
            //adwords report title
            $newarray[] = $linearray;
            $count++;
            continue;
        }

        if($count == 1) {
            //columns report header
            $postvalue = 0;

            foreach($linearray as $value){
                if (strpos($value,'Cost') !== false) {
                    $costpos[] = $postvalue;
                }
                $postvalue++;
            }

            $newarray[] = $linearray;
            $count++;
            continue;
        }

        if(!empty($costpos)) {

            foreach($costpos as $costpostval){

                if(isset($linearray[$costpostval])) {
                    $linearray[$costpostval] = $linearray[$costpostval] / 1000000;
                }

            }
        }

        $newarray[] = $linearray;
        $count++;
    }


    $tmpfname = tempnam(sys_get_temp_dir(), "FOO");
    $outstream = fopen($tmpfname, "r+");
    foreach($newarray as $newline){
        fputcsv($outstream, $newline);
    }
    fclose($outstream);
    //end micros conversion - $tmpfname temp file with cost in currency csv formated
Другие вопросы по тегам