summaryrefslogtreecommitdiff
path: root/bridges/GiphyBridge.php
blob: 202bbbbdb572867fc52a2a804c266c46148b4f00 (plain)
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
<?php
define('GIPHY_LIMIT', 10);

class GiphyBridge extends BridgeAbstract {

	const MAINTAINER = 'kraoc';
	const NAME = 'Giphy Bridge';
	const URI = 'https://giphy.com/';
	const CACHE_TIMEOUT = 300; //5min
	const DESCRIPTION = 'Bridge for giphy.com';

	const PARAMETERS = array( array(
		's' => array(
			'name' => 'search tag',
			'required' => true
		),
		'n' => array(
			'name' => 'max number of returned items',
			'type' => 'number'
		)
	));

	public function collectData(){
		$html = '';
		$base_url = 'http://giphy.com';
		$html = getSimpleHTMLDOM(self::URI . '/search/' . urlencode($this->getInput('s') . '/'))
			or returnServerError('No results for this query.');

		$max = GIPHY_LIMIT;
		if($this->getInput('n')) {
			$max = $this->getInput('n');
		}

		$limit = 0;
		$kw = urlencode($this->getInput('s'));
		foreach($html->find('div.hoverable-gif') as $entry) {
			if($limit < $max) {
				$node = $entry->first_child();
				$href = $node->getAttribute('href');

				$html2 = getSimpleHTMLDOM(self::URI . $href)
					or returnServerError('No results for this query.');
				$figure = $html2->getElementByTagName('figure');
				$img = $figure->firstChild();
				$caption = $figure->lastChild();

				$item = array();
				$item['id'] = $img->getAttribute('data-gif_id');
				$item['uri'] = $img->getAttribute('data-bitly_gif_url');
				$item['username'] = 'Giphy - ' . ucfirst($kw);
				$title = $caption->innertext();
					$title = preg_replace('/\s+/', ' ', $title);
					$title = str_replace('animated GIF', '', $title);
					$title = str_replace($kw, '', $title);
					$title = preg_replace('/\s+/', ' ', $title);
					$title = trim($title);
					if(strlen($title) <= 0) {
						$title = $item['id'];
					}
				$item['title'] = trim($title);
				$item['content'] = '<a href="'
				. $item['uri']
				. '"><img src="'
				. $img->getAttribute('src')
				. '" width="'
				. $img->getAttribute('data-original-width')
				. '" height="'
				. $img->getAttribute('data-original-height')
				. '" /></a>';

				$this->items[] = $item;
				$limit++;
			}
		}
	}
}