public function testReportXmlToArray()
    {
        $xml = <<<XML
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<report>
    <report-name name="Foo Report" />
    <date-range date="Oct 22, 2013-Nov 1, 2013" />
    <table>
        <columns>
            <column name="budget" display="Budget" />
            <column name="avgCPC" display="Avg. CPC" />
            <column name="avgPosition" display="Avg. position" />
            <column name="campaign" display="Campaign" />
            <column name="clicks" display="Clicks" />
        </columns>
        <row budget="100.00" avgCPC="0.00" avgPosition="0.0" campaign="APSA - Pesquisa" clicks="0" />
        <row budget="12.00" avgCPC="0.84" avgPosition="2.3" campaign="Apsa - Locação BA - Abril 2011" clicks="430" />
        <row budget="20.00" avgCPC="1.23" avgPosition="1.6" campaign="Apsa - Condomínio PE - Abril 2011" clicks="174" />
    </table>
</report>
XML;
        $expected = array((object) array('budget' => "100.00", 'avgCPC' => "0.00", 'avgPosition' => "0.0", 'campaign' => "APSA - Pesquisa", 'clicks' => "0"), (object) array('budget' => "12.00", 'avgCPC' => "0.84", 'avgPosition' => "2.3", 'campaign' => "Apsa - Locação BA - Abril 2011", 'clicks' => "430"), (object) array('budget' => "20.00", 'avgCPC' => "1.23", 'avgPosition' => "1.6", 'campaign' => "Apsa - Condomínio PE - Abril 2011", 'clicks' => "174"));
        $arr = $this->xml_parser->reportXmlToArray($xml);
        $this->assertEquals($expected, $arr);
    }
Esempio n. 2
0
 /**
  * @param ReportDefinition[] $report_definitions
  *
  * @return array
  * @throws \Exception
  */
 public function downloadReports($report_definitions)
 {
     $responses = array();
     $offset = 0;
     do {
         list($sliced_report_definitions_count, $requests) = $this->getNextRequests($report_definitions, $offset);
         // if $requests is none, wait a moment to free some slots and try again
         if (count($requests) == 0) {
             usleep(10000);
             continue;
         }
         try {
             $responses = array_merge($responses, $this->client->send($requests));
         } catch (MultiTransferException $e) {
             $this->freeUsedRequestCount($sliced_report_definitions_count);
             $messages = '';
             foreach ($e as $exception) {
                 /** @noinspection PhpUndefinedMethodInspection */
                 $element = new \SimpleXMLElement($exception->getResponse()->getBody('true'));
                 $api_error = $element->ApiError->type;
                 $trigger = $element->ApiError->trigger;
                 $messages .= $api_error . ' : ' . $trigger . "\n";
             }
             throw new \Exception($messages);
         }
         $this->freeUsedRequestCount($sliced_report_definitions_count);
     } while (count($responses) < count($report_definitions));
     $reports = array();
     /** @var Response[] $responses */
     foreach ($responses as $response) {
         $response_body = $response->getBody(true);
         $xml = gzdecode($response_body);
         $report = $this->xml_parser->reportXmlToArray($xml);
         $reports[] = $report;
     }
     $this->fixFieldTypes($reports, $report_definitions);
     return $reports;
 }