aboutsummaryrefslogtreecommitdiff
path: root/bridges/MaalaimalarBridge.php
blob: fcdbda48e3206baa5c9371c347ad37480ef3761e (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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
<?php

class MaalaimalarBridge extends BridgeAbstract
{
    const NAME = 'Maalaimalar';
    const URI = 'https://www.maalaimalar.com';
    const DESCRIPTION = 'Retrieve news from maalaimalar.com';
    const CACHE_TIMEOUT = 60 * 5; // 5 minutes
    const MAINTAINER = 'tillcash';
    const PARAMETERS = [
        [
            'topic' => [
                'name' => 'topic',
                'type' => 'list',
                'values' => [
                    'news' => [
                        'tamilnadu' => '/news/tamilnadu',
                        'puducherry' => '/news/puducherry',
                        'india' => '/news/national',
                        'world' => '/news/world',
                    ],
                    'district' => [
                        'chennai' => '/news/district/chennai',
                        'ariyalur' => '/news/district/ariyalur',
                        'chengalpattu' => '/news/district/chengalpattu',
                        'coimbatore' => '/news/district/coimbatore',
                        'cuddalore' => '/news/district/cuddalore',
                        'dharmapuri' => '/news/district/dharmapuri',
                        'dindugal' => '/news/district/dindugal',
                        'erode' => '/news/district/erode',
                        'kaanchepuram' => '/news/district/kaanchepuram',
                        'kallakurichi' => '/news/district/kallakurichi',
                        'kanyakumari' => '/news/district/kanyakumari',
                        'karur' => '/news/district/karur',
                        'krishnagiri' => '/news/district/krishnagiri',
                        'madurai' => '/news/district/madurai',
                        'mayiladuthurai' => '/news/district/mayiladuthurai',
                        'nagapattinam' => '/news/district/nagapattinam',
                        'namakal' => '/news/district/namakal',
                        'nilgiris' => '/news/district/nilgiris',
                        'perambalur' => '/news/district/perambalur',
                        'pudukottai' => '/news/district/pudukottai',
                        'ramanathapuram' => '/news/district/ramanathapuram',
                        'ranipettai' => '/news/district/ranipettai',
                        'salem' => '/news/district/salem',
                        'sivagangai' => '/news/district/sivagangai',
                        'tanjore' => '/news/district/tanjore',
                        'theni' => '/news/district/theni',
                        'thenkasi' => '/news/district/thenkasi',
                        'thiruchirapalli' => '/news/district/thiruchirapalli',
                        'thirunelveli' => '/news/district/thirunelveli',
                        'thirupathur' => '/news/district/thirupathur',
                        'thiruvarur' => '/news/district/thiruvarur',
                        'thoothukudi' => '/news/district/thoothukudi',
                        'tirupur' => '/news/district/tirupur',
                        'tiruvallur' => '/news/district/tiruvallur',
                        'tiruvannamalai' => '/news/district/tiruvannamalai',
                        'vellore' => '/news/district/vellore',
                        'villupuram' => '/news/district/villupuram',
                        'virudhunagar' => '/news/district/virudhunagar',
                    ],
                    'cinema' => [
                        'news' => '/cinema/cinemanews',
                        'gossip' => '/cinema/gossip',
                    ],
                ],
            ],
        ],
    ];

    public function getName()
    {
        $topic = $this->getKey('topic');
        return self::NAME . ($topic ? ' - ' . ucfirst($topic) : '');
    }

    public function collectData()
    {
        $dom = getSimpleHTMLDOM(self::URI . $this->getInput('topic'));
        $articles = $dom->find('div.mb-20.infinite-card-wrapper.white-section');

        foreach ($articles as $article) {
            $titleElement = $article->find('h2.title a', 0);
            if (!$titleElement) {
                continue;
            }

            $dateElement = $article->find('time.h-date span', 0);
            $date = $dateElement ? $dateElement->{'data-datestring'} . 'UTC' : '';

            $content = $this->constructContent($article);

            $this->items[] = [
                'content'   => $content,
                'timestamp' => $date,
                'title'     => $titleElement->plaintext,
                'uid'       => $titleElement->href,
                'uri'       => self::URI . $titleElement->href,
            ];
        }
    }

    private function constructContent($article)
    {
        $content = '';
        $imageElement = $article->find('div.ignore-autoplay img', 0);
        if ($imageElement && isset($imageElement->{'data-src'})) {
            $url = str_replace('500x300_', '', $imageElement->{'data-src'});

            if (filter_var($url, FILTER_VALIDATE_URL)) {
                $content = sprintf('<p><img src="%s"></p>', htmlspecialchars($url, ENT_QUOTES, 'UTF-8'));
            }
        }

        $storyElement = $article->find('div.story-content', 0);
        if ($storyElement) {
            $content .= $storyElement->innertext;
        }

        return $content;
    }
}