mirror of
https://github.com/RSS-Bridge/rss-bridge.git
synced 2024-11-25 19:06:23 +03:00
68 lines
1.8 KiB
PHP
68 lines
1.8 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
final class UsenixBridge extends BridgeAbstract
|
|
{
|
|
const NAME = 'USENIX';
|
|
const URI = 'https://www.usenix.org/publications';
|
|
const DESCRIPTION = 'Digital publications from USENIX (usenix.org)';
|
|
const MAINTAINER = 'dvikan';
|
|
const PARAMETERS = [
|
|
'USENIX ;login:' => [
|
|
],
|
|
];
|
|
|
|
public function collectData()
|
|
{
|
|
if ($this->queriedContext === 'USENIX ;login:') {
|
|
$this->collectLoginOnlineItems();
|
|
return;
|
|
}
|
|
returnClientError('Illegal Context');
|
|
}
|
|
|
|
private function collectLoginOnlineItems(): void
|
|
{
|
|
$url = 'https://www.usenix.org/publications/loginonline';
|
|
$dom = getSimpleHTMLDOMCached($url);
|
|
$items = $dom->find('div.view-content > div');
|
|
|
|
foreach ($items as $item) {
|
|
$title = $item->find('.views-field-title > span', 0);
|
|
$author = $item->find('.views-field-pseudo-author-list > span.field-content', 0);
|
|
$relativeUrl = $item->find('.views-field-nothing-1 > span > a', 0);
|
|
$uri = sprintf('https://www.usenix.org%s', $relativeUrl->href);
|
|
// June 2, 2022
|
|
$createdAt = $item->find('div.views-field-field-lv2-publication-date > div > span', 0);
|
|
|
|
$item = [
|
|
'title' => $title->innertext,
|
|
'author' => strstr($author->plaintext, ',', true) ?: $author->plaintext,
|
|
'uri' => $uri,
|
|
'timestamp' => $createdAt->innertext,
|
|
];
|
|
|
|
$this->items[] = array_merge($item, $this->getItemContent($uri));
|
|
}
|
|
}
|
|
|
|
private function getItemContent(string $uri) : array
|
|
{
|
|
$html = getSimpleHTMLDOMCached($uri);
|
|
$content = $html->find('.paragraphs-items-full', 0)->innertext;
|
|
$extra = $html->find('fieldset', 0);
|
|
if (!empty($extra)) {
|
|
$content .= $extra->innertext;
|
|
}
|
|
|
|
$tags = [];
|
|
foreach($html->find('.field-name-field-lv2-tags div.field-item') as $tag) {
|
|
$tags[] = $tag->plaintext;
|
|
}
|
|
|
|
return [
|
|
'content' => $content,
|
|
'categories' => $tags
|
|
];
|
|
}
|
|
}
|