aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Yaman Qalieh <ybq987@gmail.com> 2022-06-09 10:56:52 -0400
committerGravatar GitHub <noreply@github.com> 2022-06-09 16:56:52 +0200
commit3927ecd8220fca3e52ddc2ba42267e258b6a2a5d (patch)
treee90f9d5bf9c73c505fe3d792a5f56fb10614cded
parent1b0a6f281386d12f70b094193d6bf15dcf61729b (diff)
downloadrss-bridge-3927ecd8220fca3e52ddc2ba42267e258b6a2a5d.tar.gz
rss-bridge-3927ecd8220fca3e52ddc2ba42267e258b6a2a5d.tar.zst
rss-bridge-3927ecd8220fca3e52ddc2ba42267e258b6a2a5d.zip
[UsenixBridge] Add bridge (#2800)
-rw-r--r--bridges/UsenixBridge.php68
1 files changed, 68 insertions, 0 deletions
diff --git a/bridges/UsenixBridge.php b/bridges/UsenixBridge.php
new file mode 100644
index 00000000..4f785a0e
--- /dev/null
+++ b/bridges/UsenixBridge.php
@@ -0,0 +1,68 @@
+<?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
+ ];
+ }
+}