RSS-Bridge_rss-bridge/bridges/IKWYDBridge.php

129 lines
3.7 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 = [
[
'ip' => [
'name' => 'IP Address',
'exampleValue' => '8.8.8.8',
'required' => true
],
'update' => [
'name' => 'Update last seen',
'type' => 'checkbox',
'title' => 'Update timestamp every time "last seen" changes'
]
]
];
private $name;
private $uri;
public function detectParameters($url)
{
$params = [];
$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);
$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 = [];
$item['uri'] = $uri;
$item['title'] = $title;
$item['author'] = $author;
$item['timestamp'] = $timestamp;
$item['content'] = $content;
if ($category) {
$item['categories'] = [$category];
}
$this->items[] = $item;
}
}
}