summaryrefslogtreecommitdiff
path: root/bridges/VkBridge.php
blob: 4eba9610d331ce22c0355222c721ba2d0e2be225 (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
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
123
124
125
126
127
128
<?php

class VkBridge extends BridgeAbstract
{

	const MAINTAINER = 'ahiles3005';
	const NAME = 'VK.com';
	const URI = 'https://vk.com/';
	const CACHE_TIMEOUT = 300; // 5min
	const DESCRIPTION = 'Working with open pages';
	const PARAMETERS = array(
		array(
			'u' => array(
				'name' => 'Group or user name',
				'required' => true
			)
		)
	);

	protected $pageName;

	public function getURI()
	{
		if (!is_null($this->getInput('u'))) {
			return static::URI . urlencode($this->getInput('u'));
		}

		return parent::getURI();
	}

	public function getName()
	{
		if ($this->pageName) {
			return $this->pageName;
		}

		return parent::getName();
	}

	public function collectData()
	{
		$text_html = $this->getContents()
		or returnServerError('No results for group or user name "' . $this->getInput('u') . '".');

		$text_html = iconv('windows-1251', 'utf-8', $text_html);
		$html = str_get_html($text_html);
		$pageName = $html->find('.page_name', 0)->plaintext;
		$this->pageName = $pageName;

		foreach ($html->find('.post') as $post) {

			if (is_object($post->find('a.wall_post_more', 0))) {
				//delete link "show full" in content
				$post->find('a.wall_post_more', 0)->outertext = '';
			}
			$item = array();
			$item['content'] = strip_tags(backgroundToImg($post->find('div.wall_text', 0)->innertext), '<br><img>');

			if (is_object($post->find('a.page_media_link_title', 0))) {
				$link = $post->find('a.page_media_link_title', 0)->getAttribute('href');
				//external link in the post
				$item['content'] .= "\n\rExternal link: "
					. str_replace('/away.php?to=', '', urldecode($link));
			}

			//get video on post
			if (is_object($post->find('span.post_video_title_content', 0))) {
				$titleVideo = $post->find('span.post_video_title_content', 0)->plaintext;
				$linkToVideo = self::URI . $post->find('a.page_post_thumb_video', 0)->getAttribute('href');
				$item['content'] .= "\n\r {$titleVideo}: {$linkToVideo}";
			}

			// get post link
			$item['uri'] = self::URI . $post->find('a.post_link', 0)->getAttribute('href');
			$item['timestamp'] = $this->getTime($post);
			$item['author'] = $pageName;
			$this->items[] = $item;

		}
	}

	private function getTime($post)
	{
		if ($time = $post->find('span.rel_date', 0)->getAttribute('time')) {
			return $time;
		} else {
			$strdate = $post->find('span.rel_date', 0)->plaintext;

			$date = date_parse($strdate);
			if (!$date['year']) {
				if (strstr($strdate, 'today') !== false) {
					$strdate = date('d-m-Y') . ' ' . $strdate;
				} elseif (strstr($strdate, 'yesterday ') !== false) {
					$time = time() - 60 * 60 * 24;
					$strdate = date('d-m-Y', $time) . ' ' . $strdate;
				} else {
					$strdate = $strdate . ' ' . date('Y');
				}

				$date = date_parse($strdate);
			}
			return strtotime($date['day'] . '-' . $date['month'] . '-' . $date['year'] . ' ' .
				$date['hour'] . ':' . $date['minute']);
		}

	}

	public function getContents()
	{
		ini_set('user-agent', 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:53.0) Gecko/20100101 Firefox/53.0');

		$opts = array(
			'http' => array(
				'method' => "GET",
				'user_agent' => ini_get('user_agent'),
				'accept_encoding' => 'gzip',
				'header' => "Accept-language: en\r\n 
					Cookie: remixlang=3\r\n"
			)
		);

		$context = stream_context_create($opts);

		return getContents($this->getURI(), false, $context);
	}


}