Дипломная работа: Разработка веб-приложения отложенного постинга в социальные сети

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

if(isset($_POST['timepost'])){$timepost=htmlspecialchars(stripslashes($_POST['timepost']));}

$file_url="";

if(isset($_FILES['filejpg'])){

$uploadfile = $uploaddir. basename($_FILES['filejpg']['name']);

if (move_uploaded_file($_FILES['filejpg']['tmp_name'], $uploadfile)) {

//echo "Файл корректен и был успешно загружен.\n";

$file_url=$_FILES['filejpg']['name'];

}

else {

//echo "Возможная атака с помощью файловой загрузки!\n";

}

//print_r($_FILES);

}

// если пост редактируется, то обновляем, если нет - вставляем новую запись

if(isset($_POST['editpostid'])){

$editpostid=htmlspecialchars(stripslashes($_POST['editpostid']));

$query = "UPDATE otlozhpost SET post='".$textmessage."', img='".$file_url."', timepost='".$timepost."' WHERE idpost=".$editpostid;

$resultQuery = mysqli_query($dbconn, $query);

}else{

$query = "INSERT INTO otlozhpost(post, img, timepost) VALUES ('".$textmessage."', '".$file_url."', '".$timepost."')";

$resultQuery = mysqli_query($dbconn, $query);

}

}

echo "

<div>";

$editpost=0;

if(isset($_GET['editpost'])){$editpost=htmlspecialchars(stripslashes($_GET['editpost']));}

echo "

<form enctype='multipart/form-data' method='post'>

";

if(isset($_POST['editpost'])){$tPost=$_POST['editpost'];}

if(isset($_POST['timepost'])){$tTimePost=$_POST['timepost'];}

if(isset($_POST['filejpg'])){$tImg=$_POST['filejpg'];}

if($editpost!= 0){

echo "<input type='hidden' name='editpostid' value='".$editpost."'>";

$query = "select post, img, DATE_FORMAT(timepost, '%Y-%m-%dT%H:%i') from otlozhpost WHERE idpost=".$editpost;

$resultQuery = mysqli_query($dbconn, $query);

if($temp = mysqli_fetch_array($resultQuery)){

list($tPost, $tImg,$tTimePost)=$temp;

}

}

echo "

<link rel='stylesheet' href='style.css'>

<meta name='viewport' content='width=device-width, initial-scale=1.0'>

<div class='container'>

<h4>Введите текст</h4>

<textarea rows='10' cols='45' class='message' name='textmessage'>".$tPost."</textarea>

<h4>Изображение для поста</h4>

<input type='file' value='".$tImg."' class='inputfile' id='file' name='filejpg' data-multiple-caption='{count} files selected' multiple />

<label for='file'><span>Выберите файл&hellip;</span></label>

<h4>Установите дату и время публикации</h4>

<input type='datetime-local' class='textbox' name='timepost' value='".$tTimePost."' max='9999-12-31'>

<input type='submit' class='button' name='sub' value='Отправить'>

</div>

<h4>Имеющиеся посты</h4>

<table>

<tr><th>Текст поста</th><th>Ссылка на картинку</th><th>Время поста</th><th>DEL</th></tr>

";

$query = "select idpost, post, img, DATE_FORMAT(timepost, '%d.%m.%Y %H:%i') from otlozhpost ORDER BY timepost";

$resultQuery = mysqli_query($dbconn, $query);

while($temp = mysqli_fetch_array($resultQuery)){

list($tIdPost, $tPost, $tImg,$tTimePost)=$temp;

echo "<tr><td><a href='?editpost=".$tIdPost."'>".$tPost."</a></td><td><a href='/files/".$tImg."'>".$tImg."</a></td><td>".$tTimePost."</td><td><a href='?deletepost=".$tIdPost."'><img class='del' src='img/cancel.png'></a></td></tr>";

}

echo "</table></div>

<script type='text/javascript' src='js/script.js'></script>";

mysqli_close($dbconn);

ПРИЛОЖЕНИЕ 5

Листинг cronpost.php

<?php

//phpinfo();

//require("top.html");

Error_Reporting(1+2+4);

$uploaddir = "/home/u/ustuggazru/vkupload/public_html/files/";

$token = "558331d85bd2c20c54bc2d483c8c78db26b2d60d22be9fa477b6e334e136e39f9c24110b9768c889c818e"; //наш токен вставить из полученного запроса

$owner_id = "45289115"; // указываем id пользователя, к которому есть доступ - свой ID!

//Нужно зайти https://vk.com/editapp?act=create

//Под собой соотвественно. Выбрать Standalone-приложение и нажать Подключить

//Далее в настройки и там посмотреть ID приложения

//строка для получения кода доступа - где client_id=<CLIENTID> - ID созданного приложения

//https://oauth.vk.com/authorize?client_id=<CLIENTID>&scope=photos,friends,wall,groups,offline&redirect_uri=https://oauth.vk.com/blank.html&response_type=token

//вставляем в браузер и запускаем, получаем строку ниже

//отсюда копируем access_token и вставляем в переменную $token

//https://oauth.vk.com/blank.html#access_token=<ТУТ ТОКЕН БУДЕТ>&expires_in=0&user_id=3560536

$dbconn = mysqli_connect("localhost", "ustuggazru_objec", "mykuku", "ustuggazru_objec") or die("Could not connect: ". mysql_error());

//$dbobject = mysqli_select_db('ustuggazru_objec', $dbconn) or die ('Не удалось выбрать базу ustuggazru_objec: '. mysql_error());

// возьмем пост в интервале, в котором будет запускаться скрипт cron - учитывается то, что пост будет размещен ПОЗЖЕ! ровно во время, указанное в посту.

$minutes=5;

$query = "select idpost, post, img, UNIX_TIMESTAMP(timepost) from otlozhpost WHERE timepost < DATE_ADD(NOW(), INTERVAL ".$minutes." MINUTE) and timepost > NOW() and info is null ORDER BY timepost";

$resultQuery = mysqli_query($dbconn, $query);

while($temp = mysqli_fetch_array($resultQuery)){

list($tIdPost, $tPost, $tImg, $tTimePost)=$temp;

// теперь выкладываем пост.

///Получаем разрешение на загрузку картинки Вконтакте

$getwall = 'https://api.vk.com/method/photos.getWallUploadServer?group_id='.$owner_id.'&access_token='.$token."&v=5.95";

$dl = file_get_contents($getwall);

$dl = json_decode($dl); ///Декодируем json

$dl = $dl->response->upload_url; ///Получаем ссылку загрузки от Вконтакте

$file = new CURLFile(realpath("/home/u/ustuggazru/vkupload/public_html/files/".$tImg)); ///Загружаем картинку

$ch = curl_init($dl);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, array('photo' => $file));

$data = curl_exec($ch);

curl_close($ch);

///Получаем данные для сохранения картинки

$fot = $data; ///Получаем данные из массива

$fot = json_decode($data); ///Декодируем json

$fot = $fot->photo; ///Получаем данные из массива

$hash = json_decode($data); ///Декодируем json

$hash = $hash->hash; ///Получаем данные из массива

$serv = json_decode($data); ///Декодируем json

$serv = $serv->server; ///Получаем данные из массива

///Сохраняем фото на сервер Вконтакте

$savephoto = 'https://api.vk.com/method/photos.saveWallPhoto?group_id='.$owner_id.'&hash='.$hash.'&server='.$serv.'&photo='.$fot.'&access_token='.$token."&v=5.95";

$result = file_get_contents($savephoto);

$fok = json_decode($result); ///Декодируем json

$fok = $fok->response[0]->id; ///Получаем данные из массива

$VKquery = file_get_contents("https://api.vk.com/method/wall.post?owner_id=".$owner_id."&message=".urlencode($tPost)."&attachments=photo".$owner_id."_".$fok."&publish_date=".$tTimePost."&from_group=0&v=5.69&access_token=".$token);

@$VKquery['response']; //выдераем только response из ответа АПИ

$VKquery = str_replace(array('{"response":', '}'),'',$VKquery); // Вырезаем всё не нужное, оставляем только ИД сообщения

$VKquery = "ALL_OK, comment_id=".$VKquery;

echo "$VKquery"; // эту информацию при запуске в кроне никто не увидит, НО ее можно кидать в какой-то текст или размещать в базу. В общем это уже на откуп фантазии дальнейшей разработки.

// добавил внесение в базу информации о посте

$query1 = "UPDATE otlozhpost SET info='".$VKquery."'' WHERE idpost=".$tIdPosts;

$resultQuery1 = mysqli_query($dbconn, $query1);

}

mysqli_close($dbconn);