Вообщем, написал обработчик репостов для паблика ВКонтакте. Подключил его к сайту. Все вроде бы нормально, но тут ребром стал вопрос, касающийся оптимизации.
<?
if (isset($_POST['submit_form'])) {
if (empty($_POST["url"])) {
echo '<div class="alert alert-danger" role="alert">Не указана ссылка на пост, который нужно репостить.</div>';
} elseif (empty($_POST["post"])) {
echo '<div class="alert alert-danger" role="alert">Не указана ссылка для проверки репоста с Вашей стороны.</div>';
} else {
$url = explode("-", $_POST["url"]);
$postinfo = explode("_", $url[1]);
$copy_url = explode("-", $_POST["post"]);
$copyinfo = explode("_", $copy_url[1]);
$members = file_get_contents("http://api.vk.com/method/groups.getMembers?group_id=" . $postinfo[0]);
$members = json_decode($members);
$members = $members->response->count;
if ($members >= 300) {
if ($postinfo[0] == $copyinfo[0]) {
$status = file_get_contents("http://api.vk.com/method/wall.getById?posts=-" . $copy_url[1]);
$status = json_decode($status);
$status = $status->response;
$post = $status[0]->copy_owner_id;
if ($post == $gid) {
$res = $dbh->query("SELECT COUNT(*) FROM `reposts` WHERE `id` = " . $postinfo[0]);
if ($res->fetchColumn() == 0) {
$wall = file_get_contents("https://api.vk.com/method/wall.repost?v=4.102&object=wall-" . $postinfo[0] . "_" . $postinfo[1] . "&group_id=100562658&access_token=" . $token);
$wall = json_decode($wall);
$response = $wall->response;
$error = $wall->error;
if ($response->success == 1) {
$stmt = $dbh->prepare("INSERT IGNORE INTO `reposts` (id, url, repost, date) VALUES (:id, :url, :repost, :date)");
$stmt->bindParam(':id', $postinfo[0]);
$stmt->bindParam(':url', $_POST["url"]);
$stmt->bindParam(':repost', $_POST["post"]);
$stmt->bindParam(':date', $currentTime->getTimestamp());
$stmt->execute();
$dbh = null;
$link = "https://vk.com/wall" . $gid . "_" . $response->post_id;
echo '<div class="alert alert-success" role="alert">Репост сделан! Проверить его наличие Вы можете по этой ссылке: <a href="' . $link . '" target="_blank">' . $link . '</a></div>';
} else {
echo '<div class="alert alert-danger" role="alert">Ошибка! Сервер ВКонтакте вернул ответ с кодом ошибки: ' . $error->redirect_uri . '</div>';
}
} elseif ($res->fetchColumn() !== 0) {
$qwe = $dbh->query("SELECT * FROM `reposts` WHERE `id` = " . $postinfo[0]);
$row = $qwe->fetch();
$repostTime = new DateTime(date('Y-m-d H:i:s', $row['date']));
$interval = $currentTime->diff($repostTime);
if ($interval->d >= 7) {
$wall = file_get_contents("https://api.vk.com/method/wall.repost?v=4.102&object=wall-" . $postinfo[0] . "_" . $postinfo[1] . "&group_id=100562658&access_token=" . $token);
$wall = json_decode($wall);
$response = $wall->response;
$error = $wall->error;
if ($response->success == 1) {
$stmt = $dbh->prepare("INSERT IGNORE INTO `reposts` (id, url, repost, date) VALUES (:id, :url, :repost, :date)");
$stmt->bindParam(':id', $postinfo[0]);
$stmt->bindParam(':url', $_POST["url"]);
$stmt->bindParam(':repost', $_POST["post"]);
$stmt->bindParam(':date', $currentTime->getTimestamp());
$stmt->execute();
$dbh = null;
$link = "https://vk.com/wall" . $gid . "_" . $response->post_id;
echo '<div class="alert alert-success" role="alert">Репост сделан! Проверить его наличие Вы можете по этой ссылке: <a href="' . $link . '" target="_blank">' . $link . '</a></div>';
} else {
echo '<div class="alert alert-danger" role="alert">Ошибка! Сервер ВКонтакте вернул ответ с кодом ошибки: ' . $error->error_code . '</div>';
}
} else {
$diff = date('d.m.Y H:i:s', $row['date'] + 604800);
echo '<div class="alert alert-danger" role="alert">Сожалеем, но мы уже делали с Вами репост на этой неделе. Следующий репост будет возможен: ' . $diff . '</div>';
}
}
} else {
echo '<div class="alert alert-danger" role="alert">Отсутствует репост с Вашей стороны или неверно указаны ссылки на записи. Будьте внимательнее!</div>';
}
} else {
echo '<div class="alert alert-danger" role="alert">Указаны ссылки на разные группы.</div>';
}
} else {
echo '<div class="alert alert-danger" role="alert">Минимальное количество участников в сообществе - 300. У Вас же их: ' . $members . '</div>';
}
}
} ?>
Уже на первый взгляд видно, что слишком много условий, но я понятия не имею и не представляю какие из них можно сократить и как оптимизировать этот код. Очень нужна помощь.