0, 'Taurus' => 1, 'Gemini' => 2, 'Cancer' => 3, 'Leo' => 4, 'Virgo' => 5, 'Libra' => 6, 'Scorpio' => 7, 'Sagittarius' => 8, 'Capricorn' => 9, 'Aquarius' => 10, 'Pisces' => 11, ]; private function getHtml($pageId = 0) { $httpClient = new Client; $resp = $httpClient->request('GET', $this->baseUrl . '?' . http_build_query([ 'iAstro' => $pageId, 'iAcDay' => Carbon::now()->format('Y-m-d') ])); if($resp->getStatusCode() == 200) { return $resp->getBody()->getContents(); } else { return ''; } } private function removeEscapeSign($str) { return str_replace('\\', '', $str); } private function parseHtml($html) { $matches = []; $entryPattern = '
',
],
[
'pattern' => '<\/span><\/p>',
'name' => 'all',
'type' => 'level'
],
[
'pattern' => ' '
],
[
'pattern' => '<\/p>',
'name' => 'all_desc',
'type' => 'text'
],
[
'pattern' => ' ',
],
[
'pattern' => '<\/span><\/p>',
'name' => 'love',
'type' => 'level'
],
[
'pattern' => ' '
],
[
'pattern' => '<\/p>',
'name' => 'love_desc',
'type' => 'text'
],
[
'pattern' => ' ',
],
[
'pattern' => '<\/span><\/p>',
'name' => 'career',
'type' => 'level'
],
[
'pattern' => ' '
],
[
'pattern' => '<\/p>',
'name' => 'career_desc',
'type' => 'text'
],
[
'pattern' => ' ',
],
[
'pattern' => '<\/span><\/p>',
'name' => 'income',
'type' => 'level'
],
[
'pattern' => ' '
],
[
'pattern' => '<\/p>',
'name' => 'income_desc',
'type' => 'text'
],
];
preg_match("/$entryPattern/", $html, $matches, PREG_OFFSET_CAPTURE);
if(!empty($matches[0])) {
$offset = $matches[0][1];
$html = trim(substr($html, $offset + strlen($entryPattern)));
$data = [];
foreach ($htmlPatterns as $htmlPattern) {
preg_match("/{$htmlPattern['pattern']}/", $html, $matches, PREG_OFFSET_CAPTURE);
$offset = $matches[0][1];
if(!empty($htmlPattern['type'])) {
if($htmlPattern['type'] == 'level') {
$rateText = substr($html, 0, $offset);
$starMatches = [];
preg_match('/★+/u', $rateText, $starMatches);
$rate = empty($starMatches[0]) ? 0 : mb_strlen($starMatches[0]);
$data[$htmlPattern['name']] = $rate;
} else if($htmlPattern['type'] == 'text') {
$data[$htmlPattern['name']] = substr($html, 0, $offset);
}
}
$html = trim(substr($html, $offset + strlen($this->removeEscapeSign($htmlPattern['pattern']))));
}
return $data;
} else {
return null;
}
}
public function getConstellations()
{
$data = [];
foreach ($this->constellationPageIds as $name => $constellationPageId) {
$html = $this->getHtml($constellationPageId);
$data[$name] = $this->parseHtml($html);
}
return $data;
}
}