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;
 }