115 lines
2.9 KiB
PHP
115 lines
2.9 KiB
PHP
|
<?php
|
||
|
class IKWYDBridge extends BridgeAbstract {
|
||
|
const MAINTAINER = 'DevonHess';
|
||
|
const NAME = 'I Know What You Download';
|
||
|
const URI = 'https://iknowwhatyoudownload.com/';
|
||
|
const CACHE_TIMEOUT = 3600; // 1h
|
||
|
const DESCRIPTION = 'Returns torrent downloads and distributions for an IP address';
|
||
|
const PARAMETERS = array(
|
||
|
array(
|
||
|
'ip' => array(
|
||
|
'name' => 'IP Address',
|
||
|
'required' => true
|
||
|
),
|
||
|
'update' => array(
|
||
|
'name' => 'Update last seen',
|
||
|
'type' => 'checkbox',
|
||
|
'title' => 'Update timestamp every time "last seen" changes'
|
||
|
)
|
||
|
)
|
||
|
);
|
||
|
private $name;
|
||
|
private $uri;
|
||
|
|
||
|
public function detectParameters($url) {
|
||
|
$params = array();
|
||
|
|
||
|
$regex = '/^(https?:\/\/)?iknowwhatyoudownload\.com\/';
|
||
|
$regex .= '(?:en|ru)\/peer\/\?ip=(\d+\.\d+\.\d+\.\d+)/';
|
||
|
if(preg_match($regex, $url, $matches) > 0) {
|
||
|
$params['ip'] = urldecode($matches[2]);
|
||
|
return $params;
|
||
|
}
|
||
|
|
||
|
$regex = '/^(https?:\/\/)?iknowwhatyoudownload\.com\/';
|
||
|
$regex .= '(?:(?:en|ru)\/peer\/)?/';
|
||
|
if(preg_match($regex, $url, $matches) > 0) {
|
||
|
$params['ip'] = $_SERVER['REMOTE_ADDR'];
|
||
|
return $params;
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
public function getName() {
|
||
|
if($this->name) {
|
||
|
return $this->name;
|
||
|
} else {
|
||
|
return self::NAME;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function getURI() {
|
||
|
if($this->uri) {
|
||
|
return $this->uri;
|
||
|
} else {
|
||
|
return self::URI;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function collectData() {
|
||
|
$ip = $this->getInput('ip');
|
||
|
$root = self::URI . 'en/peer/?ip=' . $ip;
|
||
|
$html = getSimpleHTMLDOM($root)
|
||
|
or returnServerError('Could not request ' . self::URI);
|
||
|
|
||
|
$this->name = 'IKWYD: ' . $ip;
|
||
|
$this->uri = $root;
|
||
|
|
||
|
foreach($html->find('.table > tbody > tr') as $download) {
|
||
|
$download = defaultLinkTo($download, self::URI);
|
||
|
$firstSeen = $download->find('.date-column',
|
||
|
0)->innertext;
|
||
|
$lastSeen = $download->find('.date-column',
|
||
|
1)->innertext;
|
||
|
$category = $download->find('.category-column',
|
||
|
0)->innertext;
|
||
|
$torlink = $download->find('.name-column > div > a',
|
||
|
0);
|
||
|
$tortitle = strip_tags($torlink);
|
||
|
$size = $download->find('td', 4)->innertext;
|
||
|
$title = $tortitle;
|
||
|
$author = $ip;
|
||
|
|
||
|
if($this->getInput('update')) {
|
||
|
$timestamp = strtotime($lastSeen);
|
||
|
} else {
|
||
|
$timestamp = strtotime($firstSeen);
|
||
|
}
|
||
|
|
||
|
$uri = $torlink->href;
|
||
|
|
||
|
$content = 'IP address: <a href="' . $root . '">';
|
||
|
$content .= $ip . '</a><br>';
|
||
|
$content .= 'First seen: ' . $firstSeen . '<br>';
|
||
|
$content .= ($this->getInput('update') ? 'Last seen: ' .
|
||
|
$lastSeen . '<br>' : '');
|
||
|
$content .= ($category ? 'Category: ' .
|
||
|
$category . '<br>' : '');
|
||
|
$content .= 'Title: ' . $torlink . '<br>';
|
||
|
$content .= 'Size: ' . $size;
|
||
|
|
||
|
$item = array();
|
||
|
$item['uri'] = $uri;
|
||
|
$item['title'] = $title;
|
||
|
$item['author'] = $author;
|
||
|
$item['timestamp'] = $timestamp;
|
||
|
$item['content'] = $content;
|
||
|
if($category) {
|
||
|
$item['categories'] = array($category);
|
||
|
}
|
||
|
$this->items[] = $item;
|
||
|
}
|
||
|
}
|
||
|
}
|