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); }
/** * @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; }