aboutsummaryrefslogtreecommitdiff
path: root/bridges/ExplosmBridge.php
blob: 8874c6cbd42babe8fe8898d6df8d499fc1c4aae5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?php

class ExplosmBridge extends BridgeAbstract
{
    const MAINTAINER = 'bockiii';
    const NAME = 'Explosm Bridge';
    const URI = 'https://www.explosm.net/';
    const CACHE_TIMEOUT = 4800; //2hours
    const DESCRIPTION = 'Returns the last 5 comics';
    const PARAMETERS = [
        'Get latest posts' => [
            'limit' => [
                'name' => 'Posts limit',
                'type' => 'number',
                'title' => 'Maximum number of items to return',
                'defaultValue' => 5
                ]
            ]
        ];

    public function collectData()
    {
        $limit = $this->getInput('limit');
        $latest = getSimpleHTMLDOM('https://explosm.net/comics/latest');
        $image = $latest->find('div[id=comic]', 0)->find('img', 0)->getAttribute('src');
        $date_string = $latest->find('p[class*=Author__P]', 0)->innertext;
        $next_data_string = $latest->find('script[id=__NEXT_DATA__]', 0)->innertext;
        $exp = '/{\\\"latest\\\":\[{\\\"slug\\\":\\\"(.*?)\\ /';
        $reg_array = [];
        preg_match($exp, $next_data_string, $reg_array);
        $comic_id = $reg_array[1];
        $comic_id = substr($comic_id, 0, strpos($comic_id, '\\'));
        $item = [];
        $item['uri'] = $this::URI . 'comics/' . $comic_id;
        $item['uid'] = $this::URI . 'comics/' . $comic_id;
        $item['title'] = 'Comic for ' . $date_string;
        $item['timestamp'] = strtotime($date_string);
        $item['author'] = $latest->find('p[class*=Author__P]', 2)->innertext;
        $item['content'] = '<img src="' . $image . '" />';
        $this->items[] = $item;

        $next_comic = substr($this::URI, 0, -1)
            . $latest->find('div[class*=MainComic__Selector]', 0)->find('a', 0)->getAttribute('href');
        // use index 1 as the latest comic was already found
        for ($i = 1; $i <= $limit; $i++) {
            $this_comic = getSimpleHTMLDOM($next_comic);
            $image = $this_comic->find('div[id=comic]', 0)->find('img', 0)->getAttribute('src');
            $date_string = $this_comic->find('p[class*=Author__P]', 0)->innertext;
            $item = [];
            $item['uri'] = $next_comic;
            $item['uid'] = $next_comic;
            $item['title'] = 'Comic for ' . $date_string;
            $item['timestamp'] = strtotime($date_string);
            $item['author'] = $this_comic->find('p[class*=Author__P]', 2)->innertext;
            $item['content'] = '<img src="' . $image . '" />';
            $this->items[] = $item;
            $next_comic = substr($this::URI, 0, -1)
                . $this_comic->find('div[class*=MainComic__Selector]', 0)->find('a', 0)->getAttribute('href'); // get next comic link
        }
    }
}