Разработка веб-приложения отложенного постинга в социальные сети
Создание веб-приложения, в котором можно создавать пост, добавлять изображение, выбирать дату и время публикации, сохранять, редактировать уже созданную публикацию и отправлять ее в социальную сеть. Разработка структуры и обобщенного алгоритма приложения.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 14.12.2019 |
Размер файла | 3,1 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
}
.inputfile + label {
display: inline-block;
}
.inputfile + label {
cursor: pointer; /* "hand" cursor */
}
.message:focus,
.textbox:focus{
outline:none;
border:rgba(24,149,215,1) 2px solid;
color:rgba(24,149,215,1);
}
/* Стили текстового поля */
.message{
background: rgba(255, 255, 255, 0.4);
width:100%;
height: 120px;
border:rgba(0,0,0,.3) 2px solid;
box-sizing:border-box;
-moz-border-radius: 3px;
font-size:18px;
font-family: 'Open Sans', sans-serif;
-webkit-border-radius: 3px;
border-radius: 3px;
display:block;
padding:10px;
overflow:hidden;
}
/* Базовые стили кнопки */
.button{
height:50px;
width:100%;
border-radius:3px;
border:rgba(0,0,0,.3) 0px solid;
box-sizing:border-box;
padding:10px;
background:#90c843;
color:#FFF;
font-family: 'Open Sans', sans-serif;
font-weight:400;
font-size: 16pt;
transition:background.4s;
cursor:pointer;
}
/* Изменение фона кнопки при наведении */
.button:hover{
background:#80b438;
}
th {
max-width: 25em;
font-weight: normal;
font-size: 14px;
color: white;
padding: 10px 12px;
background: rgba(44, 204, 76,.8);
}
td {
font-size: 0.7em;
max-width: 1em;
color: #0079f2;
border-top: 1px solid white;
padding: 10px 12px;
background: rgba(44, 204, 76,.4);
transition:.3s;
}
tr:hover td {
background: rgba(44, 204, 76,.2);
}
h4 {
display: block;
margin-block-start: 0.5em;
margin-block-end: 0.5em;
margin-inline-start: 0px;
margin-inline-end: 0px;
font-weight: bold;
}
}
ПРИЛОЖЕНИЕ 3
Листинг scrypt.js
var inputs = document.querySelectorAll('.inputfile');
Array.prototype.forEach.call(inputs, function(input)
{
var label = input.nextElementSibling,
labelVal = label.innerHTML;
input.addEventListener('change', function(e)
{
var fileName = '';
if(this.files && this.files.length > 1)
fileName = (this.getAttribute('data-multiple-caption') || '').replace('{count}', this.files.length);
else
fileName = e.target.value.split('\\').pop();
if(fileName)
label.querySelector('span').innerHTML = fileName;
else
label.innerHTML = labelVal;
});
});
// get the iso time string formatted for usage in an input['type="datetime-local"']
var tzoffset = (new Date()).getTimezoneOffset() * 60000;
var localISOTime = (new Date(Date.now() - tzoffset)).toISOString().slice(0,-1);
var localISOTimeWithoutSeconds = localISOTime.slice(0,16);
var dtlInput = document.querySelector('input[type="datetime-local"]');
dtlInput.value = localISOTime.slice(0,16);
ПРИЛОЖЕНИЕ 4
Листинг index.php
<?php
//phpinfo();
//require("top.html");
Error_Reporting(1+2+4);
$uploaddir = "/home/u/ustuggazru/vkupload/public_html/files/";
$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());
$NowDate=mktime();
if(isset($_GET['deletepost'])){
$deletepost=htmlspecialchars(stripslashes($_GET['deletepost']));
if(!is_numeric($deletepost)){
$deletepost=0;
}else{
$query = "DELETE FROM otlozhpost WHERE idpost=".$deletepost;
$resultQuery = mysqli_query($dbconn, $query);
}
}
if($_POST['sub']&&$_POST['textmessage']){
// проведем проверку данных и сохраним в базу.
if(isset($_POST['textmessage'])){$textmessage=htmlspecialchars(stripslashes($_POST['textmessage']));}
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>Выберите файл…</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);
Размещено на Allbest.ru
Подобные документы
Создание многоуровневого приложения с Web-интерфейсом выставления оценки фильму и просмотра оценок других пользователей. Клиентская часть приложения. Разработка многопользовательского веб-приложения на ASP.NET MVC 3 с разграничением доступа к данным.
курсовая работа [949,7 K], добавлен 22.02.2015Разработка приложения, которое будет выполнять функции показа точного времени и точной даты. Определение дополнительных функций разработанного приложения. Рассмотрение основных этапов создания программного продукта. Результаты тестирования приложения.
курсовая работа [2,2 M], добавлен 14.04.2019Разработка приложений для смартфонов на ОС Android для сети аптек "Фармация". Архитектура операционной системы Android. Архитектура и реализация приложения. Его функциональность. Описание работы мобильного приложения. Расчет затрат на создание продукта.
дипломная работа [1,6 M], добавлен 17.06.2017Характеристика объекта автоматизации. Создание многоуровневой архитектуры приложения, отладка метода безошибочной идентификации пользователей системы. Разработка нестандартного метода преобразования объектов базы данных в объекты классов приложения.
курсовая работа [395,4 K], добавлен 28.04.2015Основные инструменты построения Web-приложения. Язык сценариев PHP. Системный анализ предметной области базы данных. Коды SQL запросов на создание таблиц. Разработка Web-приложения. Описание функциональности модулей. Система управления содержимым статей.
курсовая работа [4,8 M], добавлен 28.04.2014Технология создания многопоточных приложений в современных системах программирования с использованием языка C# в Visual Studio.NET. Разработка алгоритма и структуры программы. Описание и особенности тестирования приложения с разным количеством потоков.
курсовая работа [773,0 K], добавлен 14.03.2013Область применения и требования создаваемого Web-приложения. Требования к техническому и программному обеспечению. Разработка структуры Web-приложения и выбор средств программной реализации. Программная реализация Web-приложения. Структура базы данных.
дипломная работа [1,4 M], добавлен 03.06.2014Особенности настройки корпоративной сети предприятия. Разработка приложения, обеспечивающего эффективную работу клиент-серверной сети железнодорожной кассы. Защита от несанкционированного доступа, специфика шифрования паролей и ряд других средств защиты.
курсовая работа [5,9 M], добавлен 30.01.2014Создание, изучение и разработка приложение на Android. Среда разработки приложения DelphiXE5. Установка и настройка среды программирования. Этапы разработки приложения. Инструменты для упрощения конструирования графического интерфейса пользователя.
курсовая работа [1,6 M], добавлен 19.04.2017Мультимедийное представление информации. Разработка структуры сайта, макетов страниц, серверной логики и компьютерного кода, интерфейса. Описание шагов для размещения презентации в сети интернет. Затраты на разработку приложения и экономический эффект.
дипломная работа [539,0 K], добавлен 18.10.2015