public function buildResponse(Crawler $responseCrawler) { $response = new CharacterSearchResponse(); $response->setPage($this->getPage())->setTotalResults($responseCrawler->filter('div.pager .pagination span.total')->first()->extract('_text', true)); $freeCompanyName = $responseCrawler->filter('.ic_freecompany_box .pt4 a')->extract('_text', true); foreach ($responseCrawler->filter('.area_inner_body .table_black_border_bottom table tr ') as $searchResult) { $searchResultCrawler = new Crawler($searchResult); $character = new CharacterSearchResult(); $loadUrl = $searchResultCrawler->filter('.player_name_area a')->extract('href', true); $characterName = $searchResultCrawler->filter('.player_name_area a')->extract('_text', true); $characterWorld = $searchResultCrawler->filter('.player_name_area span[class!="right_txt"]')->extract('_text', true); $classImageUrl = $searchResultCrawler->filter('.ic_class img')->extract('src', true); $thumbnail = $searchResultCrawler->filter('.thumb_cont_black_50 img')->extract('src', true); $fcRank = $searchResultCrawler->filter('.fc_member_status')->extract('_text', true); $grandCompany = explode('/', trim($searchResultCrawler->filter('.ic_gc')->extract('_text', true))); $classLevel = $searchResultCrawler->filter('.lv_class')->extract('_text'); if (is_array($classLevel)) { $classLevel = implode(',', $classLevel); } $character->setId(preg_replace('/[^0-9]/i', '', $loadUrl))->setName($characterName)->setWorld(str_replace(array(')', '('), null, $characterWorld))->setThumbnail($thumbnail)->setFreeCompany($freeCompanyName)->setFreeCompanyRank(trim($fcRank))->setCurrentClassLevel($classLevel)->setCurrentClassImage($classImageUrl)->setGrandCompany(isset($grandCompany[0]) ? $grandCompany[0] : null)->setGrandCompanyRank(isset($grandCompany[1]) ? $grandCompany[1] : null); $response->addResult($character); } return $response; }
public function buildResponse(Crawler $responseCrawler) { $response = new CharacterSearchResponse(); $response->setPage($this->getPage())->setTotalResults($responseCrawler->filter('div.pager .pagination span.total')->first()->extract('_text', true)); foreach ($responseCrawler->filter('.area_inner_body .table_black_border_bottom table tr ') as $searchResult) { $searchResultCrawler = new Crawler($searchResult); $character = new CharacterSearchResult(); $loadUrl = $searchResultCrawler->filter('.player_name_area a')->extract('href', true); $characterName = $searchResultCrawler->filter('.player_name_area a')->extract('_text', true); $characterWorld = $searchResultCrawler->filter('.player_name_area span[class!="right_txt"]')->extract('_text', true); $languages = $searchResultCrawler->filter('.player_name_area span[class="right_txt"]')->extract('_text', true); $classImageUrl = $searchResultCrawler->filter('.ic_class img')->extract('src', true); $thumbnail = $searchResultCrawler->filter('.thumb_cont_black_50 img')->extract('src', true); $character->setId(preg_replace('/[^0-9]/i', '', $loadUrl))->setName($characterName)->setWorld(str_replace(array(')', '('), null, $characterWorld))->setLanguages(explode(',', $languages))->setThumbnail($thumbnail); //->setClass($classImageUrl); $response->addResult($character); } return $response; }
protected function extractAttribute(Crawler $li, CharacterAttributes $characterAttributes) { $isBaseAttribute = $li->filter('span.left,span.right')->count() ? false : true; $isElementAttribute = $li->filter('.clearfix')->count() ? true : false; if ($isElementAttribute) { $text = $li->extract('_text', true); $attributeLabel = preg_replace('/[^[A-Z\\s]/i', '', $text); $attributeValue = preg_replace('/[^0-9]/', '', $text); } else { if ($isBaseAttribute) { $attributeLabel = trim(str_replace('clearfix', '', $li->getNode(0)->getAttribute('class'))); $attributeValue = $li->extract('_text', true); } else { $attributeLabel = $li->filter('span.left')->extract('_text', true); $attributeValue = $li->filter('span.right')->extract('_text', true); } } switch ($attributeLabel) { case 'str': $attributeLabel = 'strength'; break; case 'dex': $attributeLabel = 'dexterity'; break; case 'vit': $attributeLabel = 'vitality'; break; case 'int': $attributeLabel = 'intelligence'; break; case 'mnd': $attributeLabel = 'mind'; break; case 'pie': $attributeLabel = 'piety'; break; } if ($attributeLabel && $attributeValue) { $characterAttributes->set(strtolower(str_replace(' ', '_', $attributeLabel)), $attributeValue); return true; } return false; }