diff --git a/bridges/IKWYDBridge.php b/bridges/IKWYDBridge.php new file mode 100644 index 00000000..b24ac75c --- /dev/null +++ b/bridges/IKWYDBridge.php @@ -0,0 +1,114 @@ + 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: '; + $content .= $ip . '
'; + $content .= 'First seen: ' . $firstSeen . '
'; + $content .= ($this->getInput('update') ? 'Last seen: ' . + $lastSeen . '
' : ''); + $content .= ($category ? 'Category: ' . + $category . '
' : ''); + $content .= 'Title: ' . $torlink . '
'; + $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; + } + } +}