/** * request character data from CCP API * @param int $characterId * @return array */ public function getPublicCharacterData($characterId) { $characterData = []; $apiPath = self::getEnvironmentData('CCP_XML') . '/eve/CharacterInfo.xml.aspx'; $baseOptions = $this->getRequestOptions(); $requestOptions = ['method' => 'GET', 'content' => ['characterID' => (int) $characterId]]; $requestOptions = array_merge($baseOptions, $requestOptions); $apiResponse = Lib\Web::instance()->request($apiPath, $requestOptions); if ($apiResponse['body'] && ($xml = simplexml_load_string($apiResponse['body']))) { if (isset($xml->result) && is_object($rowApiData = $xml->result->children())) { foreach ($rowApiData as $item) { // map attributes to array if (count($item->children()) == 0) { $characterData[$item->getName()] = strval($item); } } } } $data = (new Mapper\CcpCharacterMapper($characterData))->getData(); return $data; }
/** * set new ingame waypoint * @param Model\CharacterModel $character * @param int $systemId * @param array $options * @return array */ public function setWaypoint(Model\CharacterModel $character, $systemId, $options = []) { $crestUrlParts = parse_url(self::getCrestEndpoint()); $waypointData = []; if ($crestUrlParts) { $accessToken = $character->getAccessToken(); $endpoints = $this->getEndpoints($accessToken); // get endpoint list for "ui" endpoints $uiEndpoints = $endpoint = $this->walkEndpoint($endpoints, $accessToken, ['decode', 'character', 'ui']); if (isset($uiEndpoints['setWaypoints']) && isset($uiEndpoints['setWaypoints']['href'])) { $endpointUrl = $uiEndpoints['setWaypoints']['href']; $systemEndpoint = self::getCrestEndpoint() . '/solarsystems/' . $systemId . '/'; // request body $content = ['clearOtherWaypoints' => (bool) $options['clearOtherWaypoints'], 'first' => (bool) $options['first'], 'solarSystem' => ['href' => $systemEndpoint, 'id' => (int) $systemId]]; $requestOptions = ['timeout' => self::CREST_TIMEOUT, 'method' => 'POST', 'user_agent' => $this->getUserAgent(), 'header' => ['Scope: characterNavigationWrite', 'Authorization: Bearer ' . $character->getAccessToken(), 'Host: ' . $crestUrlParts['host'], 'Content-Type: application/vnd.ccp.eve.PostWaypoint-v1+json;charset=utf-8'], 'content' => json_encode($content, JSON_UNESCAPED_SLASHES)]; $apiResponse = Lib\Web::instance()->request($endpointUrl, $requestOptions); if (isset($apiResponse['body'])) { $responseData = json_decode($apiResponse['body']); if (empty($responseData)) { $waypointData['systemId'] = (int) $systemId; } elseif (isset($responseData->message) && isset($responseData->key)) { // waypoint could not be set... $error = (object) []; $error->type = 'error'; $error->message = $responseData->key; $waypointData['error'] = $error; } } } } return $waypointData; }