mirror of
https://github.com/RSS-Bridge/rss-bridge.git
synced 2024-12-18 17:10:29 +03:00
70 lines
2 KiB
PHP
70 lines
2 KiB
PHP
<?php
|
|
|
|
class MistralAIBridge extends BridgeAbstract
|
|
{
|
|
const MAINTAINER = 'sqrtminusone';
|
|
const NAME = 'Mistral AI Bridge';
|
|
const URI = 'https://mistral.ai/';
|
|
|
|
const CACHE_TIMEOUT = 3600; // 1 hour
|
|
const DESCRIPTION = 'Returns blog posts from Mistral AI';
|
|
|
|
const PARAMETERS = [
|
|
'' => [
|
|
'limit' => [
|
|
'name' => 'Limit',
|
|
'type' => 'number',
|
|
'required' => true,
|
|
'defaultValue' => 10
|
|
],
|
|
]
|
|
];
|
|
|
|
public function collectData()
|
|
{
|
|
$html = getSimpleHTMLDOM(self::URI . 'news/');
|
|
$limit = $this->getInput('limit');
|
|
|
|
$posts = $html->find('article.news-card');
|
|
for ($i = 0; $i < min($limit, count($posts)); $i++) {
|
|
$post = $posts[$i];
|
|
$url = self::URI . $post->find('a', 0)->href;
|
|
$this->parsePage($url);
|
|
}
|
|
}
|
|
|
|
private function parsePage($url)
|
|
{
|
|
$html = getSimpleHTMLDOMCached($url, 7 * 24 * 60 * 60);
|
|
$title = $html->find('h1.hero-title', 0)->plaintext;
|
|
$timestamp_tag = $html->find('i.ti-calendar', 0)->parent;
|
|
$timestamp = DateTime::createFromFormat('F j, Y', $timestamp_tag->plaintext)->format('U');
|
|
|
|
$content = '';
|
|
|
|
// Subheader
|
|
$header = $html->find('p.hero-description', 0);
|
|
if ($header != null) {
|
|
$content .= $header->outertext;
|
|
}
|
|
|
|
// Main content
|
|
$main = $html->find('$article > div.content', 0);
|
|
|
|
// Mostly YouTube videos
|
|
$iframes = $main->find('iframe');
|
|
foreach ($iframes as $iframe) {
|
|
$iframe->parent->removeAttribute('style');
|
|
$iframe->outertext = '<a href="' . $iframe->src . '">' . $iframe->src . '</a>';
|
|
}
|
|
|
|
$main = defaultLinkTo($main, self::URI);
|
|
$content .= $main;
|
|
$this->items[] = [
|
|
'title' => $title,
|
|
'timestamp' => $timestamp,
|
|
'content' => $content,
|
|
'uri' => $url,
|
|
];
|
|
}
|
|
}
|