Загрузка отчетов об эффективности кампаний с использованием Bings Ads на PHP

#php #download #fopen #ads #bing-api

#php #Скачать #fopen #объявления #bing-api

Вопрос:

Я был поражен этим с недели. Пожалуйста, скажите мне, может ли кто-нибудь помочь мне в этом.

Я попробовал эти примеры, которые они дали. Я пытаюсь загружать только отчеты о производительности кампании, где я могу загрузить zip-файл, содержащий csv-файл. Вот еще один прямой пример, которому я следовал для ключевых слов и сделал то же самое для эффективности кампании. Что дает мне ссылку для загрузки отчетов. Когда я пытаюсь загрузить URL вручную, я могу загрузить, но я не могу загрузить его через свой код.

 function DownloadFile($reportDownloadUrl, $downloadPath) {
    if (!$reader = fopen($reportDownloadUrl, 'rb')) {
        throw new Exception("Failed to open URL " . $reportDownloadUrl . ".");
    }
    if (!$writer = fopen($downloadPath, 'wb')){
        fclose($reader);
        throw new Exception("Failed to create ZIP file " . $downloadPath . ".");
    }
    $bufferSize = 100 * 1024;
    while (!feof($reader)) {
        if (false === ($buffer = fread($reader, $bufferSize))) {
            fclose($reader);
            fclose($writer);
            throw new Exception("Read operation from URL failed.");
        }

        if (fwrite($writer, $buffer) === false) {
            fclose($reader);
            fclose($writer);
            $exception = new Exception("Write operation to ZIP file failed.");
        }
    }
    fclose($reader);
    fflush($writer);
    fclose($writer);
}
 

Но я не смог загрузить файл. Я не могу двигаться дальше, поэтому я очень признателен за любую помощь, например, за загрузку отчетов в любой другой форме или за простые изменения кода в текущем методе. Заранее спасибо.

Ответ №1:

Когда я попробовал это, у меня также возникли проблемы с функцией DownloadFile, поэтому заменил ее другой версией

 function DownloadFile($reportDownloadUrl, $downloadPath) {
    $url    = $reportDownloadUrl;
    // Example for the path would be in this format
    // $path = '/xxx/yyy/reports/keywordperf.zip';
    // using the server path and not relative to the file
    $path   = $downloadPath;

    $fp     = fopen($path, 'w');
    $ch     = curl_init($url);

    curl_setopt($ch, CURLOPT_SSLVERSION, 3);
    curl_setopt($ch, CURLOPT_FILE, $fp);

    if($result = curl_exec($ch)) {
        $status = true;
    }
    else
    {
        $status = false;
    }

    curl_close($ch);
    fclose($fp);

    return status;
}