mirror of
https://github.com/RSS-Bridge/rss-bridge.git
synced 2024-12-18 17:10:29 +03:00
[MistralAIBridge] Add Mistral (#4356)
This commit is contained in:
parent
17d142c038
commit
bf4a918e60
1 changed files with 70 additions and 0 deletions
70
bridges/MistralAIBridge.php
Normal file
70
bridges/MistralAIBridge.php
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
<?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,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue