public function actionScrape() { $infohash = Yii::$app->request->get("info_hash"); if (!is_array($infohash)) { $infohash = [$infohash]; } $res = []; foreach ($infohash as $ih) { $tmp = Seed::findOne(['info_hash' => strtoupper(bin2hex($ih))]); if (!empty($tmp)) { $res[] = $tmp; } } return $this->renderPartial("queryScrape", ['seeds' => $res]); }
public function rules() { return [[['info_hash', 'peer_id', 'port', 'left', 'downloaded', 'uploaded'], 'required'], [['passkey', 'info_hash', 'event', 'ip', 'port', 'left', 'no_peer_id', 'uploaded', 'downloaded', 'ipv6', 'numwant', 'compact'], 'trim'], [['passkey', 'info_hash', 'ip', 'ipv6'], 'default'], ['event', 'default', 'value' => 'regular'], [['port', 'left', 'uploaded', 'downloaded', 'compact', 'numwant'], 'default', 'value' => 0], [['compact', 'no_peer_id'], 'filter', 'filter' => function ($val) { return (bool) $val; }], [['port', 'left', 'uploaded', 'downloaded', 'numwant'], 'integer'], ['info_hash', 'string', 'length' => [40, 40]], ['peer_id', 'string', 'length' => [4, 30]], [['info_hash', 'passkey'], 'filter', 'filter' => 'strtoupper'], ['event', 'filter', 'filter' => 'strtolower'], ['ipv6', function ($attr, $params) { if (!empty($this->{$attr})) { self::rfc2732Convert($this->{$attr}, $ipv6, $port); if ($port == null) { $port = $this->port; } if (filter_var($ipv6, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) && $port != null) { $this->ipv6 = $ipv6; $this->ipv6port = $port; } } }], ['ip', function ($attr, $param) { $this->ipv4 = $this->ip; $this->ipv4port = $this->port; }], ['info_hash', function ($attr, $param) { $this->_seed = Seed::findOne(['info_hash' => $this->{$attr}]); if (empty($this->_seed)) { $this->addError('info_hash', 'no such seed'); } elseif (!$this->_seed->is_valid) { $this->addError('info_hash', 'seed is invalid'); } }]]; }
public function actionPeerInfo($seed_id) { /** @var Seed $seed */ $seed = Seed::findOne($seed_id); if (empty($seed)) { return ['result' => 'failed', 'extra' => 'no such seed']; } $peers = $seed->peers; $leechers = []; $seeders = []; $all = []; foreach ($peers as $peer) { $peer->update_time = strtotime($peer->update_time); $peer->create_time = strtotime($peer->create_time); $peer->client_tag = substr(base64_decode($peer->client_tag), 0, 3); if ($peer->status == 'Seeder') { $seeders[] = $peer->attributes; } else { $leechers[] = $peer->attributes; } $all[] = $peer->attributes; } return ['result' => 'succeed', 'extra' => ['all' => $all, 'leechers' => $leechers, 'seeders' => $seeders]]; }
private function replace(&$retval) { $retval = 'failed'; if (!empty($this->torrentFile)) { return $this->handleTorrent($this->torrentFile->tempName, $retval); } else { /** @var Seed $seed */ $seed = Seed::findOne($this->seed_id); if (empty($seed)) { $this->addError('seed_id', 'seed being edited not exists'); return $seed; } else { $seed->detail_info = $this->proc_obj->getDetail(); $seed->full_name = $this->proc_obj->generateSubject(); $seed->is_valid = true; $seed->type_id = $this->type_id; $seed->sub_type_id = $this->sub_type_id; $seed->save(); $retval = 'succeed'; return $seed; } } }
public function actionOperation() { SeedOperationRecord::deleteAll(); $offset = 0; $limit = 1000; QUERY: $sql = <<<SQL SELECT * FROM `ngpt_ngpt_seed_op_records` LIMIT {$limit} OFFSET {$offset}; SQL; $res = $this->fdb->createCommand($sql)->queryAll(); foreach ($res as $oop) { var_dump($oop); $op = new SeedOperationRecord(); /** @var User $admin */ $admin = User::findOne(['discuz_user_id' => $oop['uid']]); /** @var Seed $seed */ $seed = Seed::findOne(['info_hash' => strtoupper($oop['infohash'])]); if (empty($seed)) { continue; } $op->admin_id = $admin->user_id; $op->seed_id = $seed->seed_id; $op->operation_type = $oop['reason']; $op->detail_info = json_encode(['reason' => $oop['info']]); $op->publisher_id = $seed->publisher_user_id; $op->create_time = $this->date($oop['opdate']); var_dump($op->attributes); if (!$op->insert()) { var_dump($op->errors); return; } } if (count($res)) { $offset += $limit; goto QUERY; } return; }