2016-12-29 122 views
2

我試圖從DFP廣告管理系統通過API和Google提供的PHP庫https://github.com/googleads/googleads-php-lib/從Google Analytics獲得一份非常基本的報告。我已經嘗試在UI中創建查詢並從API中獲取ReportQuery並運行它(根據https://developers.google.com/doubleclick-publishers/docs/reporting#retrieving_a_saved_reportquery)以及創建臨時查詢。所有創建請求好吧,這似乎暗示查詢驗證沒問題。其他的API請求,我測試過,做工精細,包括獲取的行項目等Google DFP API ReportService失敗,沒有顯着的錯誤消息

相關代碼如下列表:

$statementBuilder = (new StatementBuilder()) 


->where('AD_UNIT_NAME like \'prebid_\''); 

# Create report query. 
$reportQuery = new ReportQuery(); 
$reportQuery->setDimensions([ 
    Dimension::AD_UNIT_NAME, 
    Dimension::CUSTOM_CRITERIA, 
    Dimension::DATE 
]); 
$reportQuery->setColumns([ 
    Column::TOTAL_INVENTORY_LEVEL_IMPRESSIONS, 
    Column::TOTAL_INVENTORY_LEVEL_WITHOUT_CPD_AVERAGE_ECPM 
]); 
$reportQuery->setStatement($statementBuilder->toStatement()); 
$reportQuery->setAdUnitView(ReportQueryAdUnitView::TOP_LEVEL); 
$reportQuery->setDateRangeType(DateRangeType::YESTERDAY); 

# Create report job. 
$reportJob = new ReportJob(); 
$reportJob->setReportQuery($reportQuery); 

# Run report job. 
$reportJob = $reportService->runReportJob($reportJob); 

# Create report downloader. 
$reportDownloader = new ReportDownloader($reportService, $reportJob->getId(), POLL_TIME_SECONDS); 

# Wait for the report to be ready. 
$reportDownloader->waitForReportToFinish(); 

# Change to your file location. 
$filePath = sprintf('%s.csv.gz', tempnam(sys_get_temp_dir(), 
    'delivery-report-')); 

printf("Downloading report to %s ...\n", $filePath); 

# Download the report. 
$reportDownloader->downloadReport('CSV_DUMP', $filePath); 

下面是錯誤信息,我從該API獲取:

PHP Fatal error: Uncaught exception 'UnexpectedValueException' with message 'Cannot download report 1834923393 because it has a status of FAILED.' in ~/test/vendor/googleads/googleads-php-lib/src/Google/AdsApi/Dfp/Util/v201611/ReportDownloader.php:146 
Stack trace: 
#0 ~/test/vendor/googleads/googleads-php-lib/src/Google/AdsApi/Dfp/Util/v201611/ReportDownloader.php(116): Google\AdsApi\Dfp\Util\v201611\ReportDownloader->getDownloadUrl('CSV_DUMP') 
#1 ~/test/dfp/get_prebid_unit_data.php(85): Google\AdsApi\Dfp\Util\v201611\ReportDownloader->downloadReport('CSV_DUMP', '/tmp/delivery-r...') 
#2 {main} 
    thrown in ~/test/vendor/googleads/googleads-php-lib/src/Google/AdsApi/Dfp/Util/v201611/ReportDownloader.php on line 146 
+0

功能評論[狀態](https://github.com/googleads/googleads-php-lib/blob/5eea2f7fb65fd07f0413eb2e33bc2e7563c43078/src/Google/AdsApi/Dfp/Util/v201611/ReportDownloader.php# L112)當報告失敗時引發異常,所以您可能需要該服務提供的其他工具。可悲的是,我在某個Google論壇中發現的潛在工作超時:/並且沒有支持文檔(在他們自己的回購示例中,如果報告失敗,它只是打印失敗......)看起來你可能不是能夠從API獲得有用的失敗原因。 – Jmills

回答

0

有時候睡在上面會有所不同。值得注意的是,同樣的查詢,當通過ReportService::getSavedQueriesByStatement取出,返回如下:

Google\AdsApi\Dfp\v201611\SavedQuery {#52 
    #id: 468197553 
    #name: "Prebid KV Query" 
    #reportQuery: Google\AdsApi\Dfp\v201611\ReportQuery {#49 
    #dimensions: array:3 [ 
     0 => "AD_UNIT_NAME" 
     1 => "CUSTOM_CRITERIA" 
     2 => "DATE" 
    ] 
    #adUnitView: "TOP_LEVEL" 
    #columns: array:2 [ 
     0 => "TOTAL_INVENTORY_LEVEL_IMPRESSIONS" 
     1 => "TOTAL_INVENTORY_LEVEL_WITHOUT_CPD_AVERAGE_ECPM" 
    ] 
    #dimensionAttributes: null 
    #customFieldIds: null 
    #contentMetadataKeyHierarchyCustomTargetingKeyIds: null 
    #startDate: null 
    #endDate: null 
    #dateRangeType: "YESTERDAY" 
    #statement: Google\AdsApi\Dfp\v201611\Statement {#48 
     #query: " where ad_unit_name like 'prebid_'" 
     #values: null 
    } 
    #useSalesLocalTimeZone: false 
    #includeZeroSalesRows: false 
    } 
    #isCompatibleWithApiVersion: true 
} 

注意查詢缺乏%

但是,在生成報告時,在LIKE語句中需要%才能正確過濾。

這裏有趣的是,即使拉取已保存的查詢並從中生成ReportJob而未經過修改就會失敗,這似乎意味着無法以編程方式運行包含LIKE過濾器的已保存查詢?

1

我已經使用下面的代碼完成了類似的報告。希望這會對你有所幫助。只有

<?php 
ini_set('display_errors', 'On'); 
error_reporting('E_ALL'); 
$date_to = isset($_GET['dateTo']) && !empty($_GET['dateTo']) ? date('Y-m-d', strtotime(trim($_GET['dateTo']))) : date('Y-m-d', strtotime('now')); 
$date_from = isset($_GET['dateFrom']) && !empty($_GET['dateFrom']) ? date('Y-m-d', strtotime(trim($_GET['dateFrom']))) : date('Y-m-d', strtotime('-1 day')); 

require_once 'Google/Api/Ads/Dfp/Lib/DfpUser.php'; 
//require_once dirname(__FILE__) . '/../../../Common/ExampleUtils.php'; 
require_once 'Google/Api/Ads/Dfp/Util/ReportUtils.php'; 
require_once 'Google/Api/Ads/Dfp/Util/DateTimeUtils.php'; 

try { 
    // Get DfpUser from credentials in "../auth.ini" 
    // relative to the DfpUser.php file's directory. 
    $user = new DfpUser(); 
    // Log SOAP XML request and response. 
    // Get the ReportService. 
    $reportService = $user->GetService('ReportService', 'v201405'); 
    // Create report job. 
    $reportJob = new ReportJob(); 
    // Create report query. 
    $reportQuery = new ReportQuery(); 
// $reportQuery->dateRangeType = 'LAST_MONTH'; 
    $reportQuery->dateRangeType = 'CUSTOM_DATE'; 
// $reportQuery->dateRangeType = 'YESTERDAY'; 
// $reportQuery->dateRangeType = 'TODAY'; 
    $reportQuery->startDate = DateTimeUtils::GetDfpDateTime(new DateTime($date_from))->date; 
    $reportQuery->endDate = DateTimeUtils::GetDfpDateTime(new DateTime($date_to))->date; 

    //-- create PQL statement 
// $reportStatement = new Statement(); 
// $reportStatement->query = "WHERE LINE_ITEM_TYPE = 'SPONSORSHIP'"; 
// $reportQuery->statement = $reportStatement; 
    //Date Salesperson Advertiser Order Line item Line item type Ad unit Salesperson ID Advertiser ID  
// 
//Order ID Line item ID Ad unit ID Total impressions Total impressions Total clicks Total CTR 
    $reportQuery->dimensions = array(
     'DATE', 'SALESPERSON_NAME', 'ADVERTISER_NAME','ORDER_NAME', 'LINE_ITEM_NAME', 'LINE_ITEM_TYPE', 'AD_UNIT_NAME' 
    ); 

    $reportQuery->columns = array(
     'TOTAL_INVENTORY_LEVEL_IMPRESSIONS', 'TOTAL_LINE_ITEM_LEVEL_IMPRESSIONS', 'TOTAL_LINE_ITEM_LEVEL_CLICKS', 'TOTAL_LINE_ITEM_LEVEL_CTR', 'TOTAL_LINE_ITEM_LEVEL_CPM_AND_CPC_REVENUE', 'TOTAL_LINE_ITEM_LEVEL_WITH_CPD_AVERAGE_ECPM' 
    ); 

    $reportJob->reportQuery = $reportQuery; 
    // Run report job. 
    $reportJob = $reportService->runReportJob($reportJob); 

    do { 
     printf("<p>Report with ID '%s' is running.", $reportJob->id); 

     sleep(5); 
     // Get report job. 
     $reportJob = $reportService->getReportJob($reportJob->id); 
    } while ($reportJob->reportJobStatus == 'IN_PROGRESS'); 

    if ($reportJob->reportJobStatus == 'FAILED') { 
     printf("Report job with ID '%s' failed to finish successfully.</p>", $reportJob->id); 
    } else { 
     printf("Report job with ID '%s' completed successfully.</p>", $reportJob->id); 
     $reportJobId = $reportJob->id; 

     //-- Set the format of the report (e.g., CSV_DUMP) and download without compression so we can print it. 
     $reportDownloadOptions = new ReportDownloadOptions(); 
//  $reportDownloadOptions->exportFormat = 'CSV_DUMP'; 
     $reportDownloadOptions->exportFormat = 'TSV'; 
     $reportDownloadOptions->useGzipCompression = false; 

     //-- get download url of the report 
     $downloadUrl = $reportService->getReportDownloadUrlWithOptions($reportJobId, $reportDownloadOptions); 

     //-- get printed data of the report from the download url 
     $report = ReportUtils::DownloadReport($downloadUrl); 
     //-- now parse the report data and manage it to view/store it in Database 
//  print $report.'<br><br>';die; 
    } 
} catch (OAuth2Exception $e) { 
    ExampleUtils::CheckForOAuth2Errors($e); 
// echo "check"; 
} catch (ValidationException $e) { 
    ExampleUtils::CheckForOAuth2Errors($e); 
} catch (Exception $e) { 
    print $e->getMessage() . "\n"; 
} 
相關問題