'POST',
CURLOPT_POSTFIELDS => json_encode([
'templateId' => [self::TEMPLATE_ID],
'componentId' => self::COMPONENT_ID,
'page' => '1',
'amount' => 10,
'filter' => (object)[],
'tags' => null,
'sortType' => 'DateDesc',
'restrictionType' => 'None'
])
];
$headers = [
'Accept: application/json, text/plain, */*',
'Content-Type: application/json;charset=UTF-8'
];
$json = getContents($url, $headers, $opts);
$data = json_decode($json);
foreach ($data->model->Results as $record) {
$this->items[] = [
'uri' => self::URI . $record->Link,
'title' => $record->Heading,
'categories' => [$record->Topic],
'author' => join(', ', array_map(function ($author) {
return $author->Name;
}, $record->Authors)),
'timestamp' => DateTime::createFromFormat('jS F Y', $record->Date)->format('U'),
'content' => $this->getContents(self::URI . $record->Link)
];
}
}
private function getContents($uri)
{
$html = getSimpleHTMLDOMCached($uri);
$body = $html->find('body', 0);
$scripts = $body->find('script');
$result = '';
foreach ($scripts as $script) {
$script_text = $script->innertext;
if (str_contains($script_text, 'ReactDOM.render(React.createElement(Components.Reading')) {
$args = $this->getRenderArguments($script_text);
$result .= $args->Html;
} elseif (str_contains($script_text, 'ReactDOM.render(React.createElement(Components.ImagePanel')) {
$args = $this->getRenderArguments($script_text);
$image_tag = str_replace('src="/-', 'src="' . self::URI . '/-', $args->Image);
$result .= '
' . $args->Intro . '
'; } } return $result; } private function getRenderArguments($script_text) { $matches = []; preg_match('/React\.createElement\(Components\.\w+, {(.*)}\),/', $script_text, $matches); return json_decode('{' . $matches[1] . '}'); } }