Интернет-сервис подбора мероприятий
Различные источники мероприятий, их API. Методы построения прогнозов в рекомендательных системах. Способы реализации рекомендательных систем, а также библиотеки, реализующие соответствующие алгоритмы. Серверная часть сервиса, а также клиент на Android.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 04.07.2018 |
Размер файла | 1,7 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
15. J. Herlocker, J. Konstan, L. Terveen, and J. Riedl. Evaluating collaborative filtering recommender systems, ACM Translations on Information Systems, 2004.
16. Ржеуцкая, С.Ю. Базы данных. Теоретические и языковые основы: учебное пособие - Вологда: ВоГУ, 2016. - 112 с.
17. Кожевникова А.М. Исследование моделей и алгоритмов рекомендующих систем - Санкт-Петербург: СПбГЭТУ, 2016. 112с.
18. Каляшов Г. А., Кудряшов А.А. РАЗРАБОТКА РЕКОМЕНДАТЕЛЬНОЙ СИСТЕМЫ ДЛЯ МЕРОПРИЯТИЙ. - «Актуальные проблемы науки и практики в различных отраслях народного хозяйства» (Пенза, 28-29 марта 2018)
19. Using OAuth 2.0 to Access Google APis [Электронный ресурс]: документация по использованию OAuth. - Режим доступа: https://developers.google.com/identity/protocols/OAuth2.
ПРИЛОЖЕНИЕ 1
ПРИМЕР JSON-ОТВЕТА API МИНКУЛЬТУРЫ
(обязательное)
{
"status": 200,
"start": 0,
"limit": 1,
"total": 214575,
"filter": {
"odSchema": "59a423129a5a55204f05ac00",
"odSetVersions": {
"$in": [
"5a21136aeac434e206718f50"
]
},
"inactivated": {
"$exists": false
}
},
"data": [
{
"_id": "59a4275bf6e2c37b074998c4",
"created": "2017-08-28T14:23:23.264Z",
"nativeId": "155245",
"hash": "155245",
"odSchema": "59a423129a5a55204f05ac00",
"dataset": "57866908d95989950590d1d5",
"data": {
"general": {
"seances": [
{
"end": "2015-09-01T16:00:00Z",
"start": "2015-09-01T08:00:00Z"
}
],
"places": [
{
"videoHostings": [],
"tags": [],
"recommendations": [],
"locale": {
"id": 2038,
"sysName": "kaliningrad",
"timezone": "Europe/Kaliningrad",
"name": "Калининград"
},
"localeIds": [
2038,
237,
1
],
"image": {
"title": "8.jpg",
"url": "https://all.culture.ru/uploads/67dccf208eb81e47d2ca37799499c76b.jpg"
},
"gallery": [],
"externalInfo": [],
"category": {
"sysName": "muzei-i-galerei",
"name": "Музеи и галереи"
},
"address": {
"mapPosition": {
"coordinates": [
54.706630000000004,
20.500507
],
"type": "Point"
},
"fullAddress": "обл Калининградская,г Калининград,наб Петра Великого,д 1",
"fiasStreetId": "dff042a7-4305-44d1-8e5f-4a25367603cf",
"fiasHouseId": "f13969c2-7d77-4cbe-b3bf-51b99a995441",
"comment": "",
"street": "наб Петра Великого,д 1"
},
"name": "Научно-исследовательское судно «Витязь»",
"id": 10662
}
],
"organization": {
"locale": {
"id": 2038,
"sysName": "kaliningrad",
"timezone": "Europe/Kaliningrad",
"name": "Калининград"
},
"localeIds": [],
"subordination": {
"id": 1,
"sysName": "rf",
"timezone": "Europe/Moscow",
"name": "РФ"
},
"subordinationIds": [
1
],
"type": "mincult",
"name": "ФГБУК «Музей Мирового океана»",
"id": 4566
},
"category": {
"sysName": "vystavki",
"name": "Выставки",
"type": "events"
},
"image": {
"title": "SVi_17-04_0147.JPG",
"url": "https://all.culture.ru/uploads/af82283b2c6fe9a0ead85d2f577e81de.JPG"
},
"tags": [
{
"sysName": "nauka-i-tehnika",
"name": "Наука и техника",
"id": 23
},
{
"sysName": "otkrytye-ploshchadki",
"name": "Открытые площадки",
"id": 69
},
{
"sysName": "muzeimorskie",
"name": "Музеи.Морские",
"id": 408
}
],
"end": "2020-01-28T16:00:00Z",
"start": "2015-09-01T08:00:00Z",
"visitorsCount": 30000,
"needMedia": false,
"status": "accepted",
"maxPrice": 100,
"price": 0,
"isFree": false,
"ageRestriction": 0,
"description": "<p>Научно-исследовательское судно «Витязь» - судно-легенда, оно внесло выдающийся вклад в изучение Мирового океана. На протяжении 30 лет на судне было совершено 65 научных рейсов, пройдено около 800 000 миль, выполнено 7 942 научные станции. С его борта была измерена максимальная глубина (11 022м) в Марианской впадине. На «Витязе» сформировалась школа отечественной океанологии, в экспедициях работали ученые пятидесяти научных институтов нашей страны и двадцати стран мира.</p><p>Все желающие могут подняться на борт и совершить прогулку по открытым палубам легендарного судна, ставшего музеем. Посетители смогут познакомиться с оборудованием, расположенным на палубах и узнать о предназначении того или иного прибора. Подняться на носовую и кормовую надстройки, посетить бентосную лабораторию и ходовую рубку, откуда осуществлялось управление судном.</p>",
"shortDescription": "На открытых палубах «Витязя» можно увидеть судовые и научные приборы и оборудование, подняться на надстройки, покрутить штурвал и ударить в рынду",
"name": "Экспозиция «Открытые палубы НИС «Витязь»»",
"id": 155245
},
"info": {
"updateDate": "2017-08-28T14:14:43Z",
"createDate": "2017-08-28T14:14:43Z",
"category": "event",
"path": "/cdm/v2/events/155245"
}
},
"nativeName": "Экспозиция «Открытые палубы НИС «Витязь»»",
"modified": "2018-01-26T19:33:44.682Z",
"activated": "2017-12-01T08:31:38.953Z",
"status": 0,
"odSetVersions": [
"5a21136aeac434e206718f50"
]
}
],
"count": 1,
"profile": {
"start": "2018-06-18T13:32:11.890Z",
"parsed": 30,
"counted": 32,
"db": 55,
"total": 62
}}
ПРИЛОЖЕНИЕ 2
ПРИМЕР ПРОТОТИПОВ UI МОБИЛЬНОГО ПРИЛОЖЕНИЯ
(обязательное)
Главный экран с лентой событий:
Профиль пользователя:
ПРИЛОЖЕНИЕ 3
РЕАЛИЗАЦИЯ СЕРВИСА ДЛЯ РАБОТЫ РАБОТЫ с API событий
(обязательное)
Описание endpoint'a:
package com.app.eventsapp.rest.postapi;
import com.app.eventsapp.modules.user.rest.request.Token;
import com.app.eventsapp.modules.user.rest.response.SimpleResponse;
import com.app.eventsapp.modules.postline.models.Post;
import java.util.List;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;
/**
* Created by Grigory Kalyashov on 04.11.2016.
*
* Интерфейс для получения событий
*/
public interface EventsAPI
{
/**
* Получить список событий
* @param offset сдвиг
* @param count количество событий
* @return список
*/
@GET("events/list")
Call<List<Post>> getPosts(@Query("offset") int offset, @Query("count") int count);
/**
* @param id - id события
* @return пост
*/
@GET("events/get")
Call<Post> getPost(@Query("id") long id);
/**
* Оценить событие
* @param token
* @return
*/
@POST("events/rateup")
Call<SimpleResponse> rateUp(@Body Token token);
}
Реализация EventService:
package com.app.eventsapp.rest.postapi;
import com.app.eventsapp.core.cache.PostCacheUtils;
import com.app.eventsapp.modules.user.rest.request.Token;
import com.app.eventsapp.modules.user.rest.response.SimpleResponse;
import com.app.eventsapp.modules.postline.models.Post;
import com.app.eventsapp.rest.base.RestService;
import com.app.eventsapp.rest.request.RequestCallback;
import com.app.eventsapp.rest.request.RequestListener;
import java.util.List;
import javax.inject.Inject;
import retrofit2.Call;
import retrofit2.Response;
/**
* Created by Grigory Kalyashov on 04.11.2016.
*
* Сервис для работы с событиями
*/
public class EventsService extends RestService
{
@Inject
public EventsService()
{}
public void getPost(long id, final RequestListener<Post> requestListener)
{
getPostById(requestListener, id);
}
/**
* @return список постов
*/
public void getPosts(final RequestListener<List<Post>> requestListener,
int offset, int count)
{
sendPostRequest(requestListener, offset, count);
}
public void rateUp(String token, RequestListener<SimpleResponse> requestListener)
{
EventsAPI eventsAPI = buildRetrofit().create(EventsAPI.class);
Call<SimpleResponse> call = eventsAPI.rateUp(new Token(token));
call.enqueue(new RequestCallback<>(requestListener));
}
private void sendPostRequest(RequestListener<List<Post>> requestListener,
int offset, int count)
{
EventsAPI eventsAPI = buildRetrofit(PostJsonBuilder.buildPostGson()).create(EventsAPI.class);
Call<List<Post>> call = eventsAPI.getPosts(offset, count);
call.enqueue(new PostListRequestCallback<>(requestListener));
}
private void getPostById(RequestListener<Post> requestListener, long id)
{
EventsAPI eventsAPI = buildRetrofit(PostJsonBuilder.buildPostGson()).create(EventsAPI.class);
Call<Post> call = eventsAPI.getPost(id);
call.enqueue(new PostRequestCallback<>(requestListener));
}
private class PostListRequestCallback<T> extends RequestCallback<T>
{
PostListRequestCallback(RequestListener<T> listener)
{
super(listener);
}
@Override
public void onResponse(Call<T> call, Response<T> response)
{
super.onResponse(call, response);
if(response.isSuccessful())
{
PostCacheUtils.addPostsToCache((List<Post>) response.body());
}
}
}
private class PostRequestCallback<T> extends RequestCallback<T>
{
PostRequestCallback(RequestListener<T> listener)
{
super(listener);
}
@Override
public void onResponse(Call<T> call, Response<T> response)
{
super.onResponse(call, response);
if(response.isSuccessful())
{
PostCacheUtils.addPostToCache((Post) response.body());
}
}
}
}
ПРИЛОЖЕНИЕ 4
Пример скриптов для тестирования UI в Android
(обязательное)
Функция поиска и запуска приложения:
private void findAndRunApp() throws UiObjectNotFoundException {
// Go to main screen
getUiDevice().pressHome();
// Find menu button
UiObject allAppsButton = new UiObject(new UiSelector()
.description("Apps"));
// Click on menu button and wait new window
allAppsButton.clickAndWaitForNewWindow();
// Find App tab
UiObject appsTab = new UiObject(new UiSelector()
.text("Apps"));
// Click on app tab
appsTab.click();
// Find scroll object (menu scroll)
UiScrollable appViews = new UiScrollable(new UiSelector()
.scrollable(true));
// Set the swiping mode to horizontal (the default is vertical)
appViews.setAsHorizontalList();
// Find application
UiObject settingsApp = appViews.getChildByText(new UiSelector()
.className("com.android.eventsapp"), "Spree");
// Open application
settingsApp.clickAndWaitForNewWindow();
}
Функция открытия поста с информацией по событию:
private void openDetailPost() throws UiObjectNotFoundException {
// Find and click post
UiObject openButton = new UiObject(new UiSelector()
.className("android.widget.CardView").description("Open"));
openButton.clickAndWaitForNewWindow();
}
ПРИЛОЖЕНИЕ 5
пример ответа с рекомендациями событий
(обязательное)
{ "recommendations": [
{
"userId": 1,
"eventId": 217,
"name": "GRIME TING 28/10 @MOD CLUB",
"score": 5.481898245512628
},
{
"userId": 1,
"eventId": 214,
"name": "Спектакль «Бременские музыканты»",
"score": 5.481898245512628
},
{
"userId": 1,
"eventId": 219,
"name": "10 секретов денег,о которых молчат богатые люди",
"score": 5.481898245512628
},
{
"userId": 1,
"eventId": 52,
"name": "Сплин |Самара | 25 ноября| МТЛ Арена",
"score": 5.481898245512628
},
{
"userId": 1,
"eventId": 171,
"name": "9-11 июня Холотропное дыхание Екатеринбург",
"score": 5.481898245512628
},
{
"userId": 1,
"eventId": 104,
"name": "г. Нижний Новгород 27-29 октября 2018 года",
"score": 5.481898245512628
},
{
"userId": 1,
"eventId": 176,
"name": "9 июня | Каспийский Груз | Саратов",
"score": 5.481898245512628
},
{
"userId": 1,
"eventId": 126,
"name": "Марш-бросок 22 июня по Большой Воронежской тропе",
"score": 5.481898245512628
},
{
"userId": 1,
"eventId": 189,
"name": "06.11 Фолк -Фестиваль \"Самайн-2018\" (ЕКБ)",
"score": 5.481898245512628
},
{
"userId": 1,
"eventId": 136,
"name": "Asking Alexandria | 13.06.2018 | Тур во Вроцлав",
"score": 5.481898245512628
}
]
}
ПРИЛОЖЕНИЕ 6
КОНФИГУРАЦИЯ LENSKIT
import org.lenskit.transform.normalize.BaselineSubtractingUserVectorNormalizer
import org.lenskit.transform.normalize.UserVectorNormalizer
import org.lenskit.api.ItemScorer
import org.lenskit.baseline.BaselineScorer
import org.lenskit.baseline.ItemMeanRatingItemScorer
import org.lenskit.baseline.UserMeanBaseline
import org.lenskit.baseline.UserMeanItemScorer
import org.lenskit.knn.NeighborhoodSize
import org.lenskit.knn.item.ItemItemScorer
import org.lenskit.knn.item.ModelSize
// ... and configure the item scorer. The bind and set methods
// are what you use to do that. Here, we want an item-item scorer.
bind ItemScorer to ItemItemScorer.class
// Item-item works best with a minimum neighbor count
set NeighborhoodSize to 20
// Limit the model size
set ModelSize to 1000
// let's use personalized mean rating as the baseline/fallback predictor.
// 2-step process:
// First, use the user mean rating as the baseline scorer
bind (BaselineScorer, ItemScorer) to UserMeanItemScorer
// Second, use the item mean rating as the base for user means
bind (UserMeanBaseline, ItemScorer) to ItemMeanRatingItemScorer
// and normalize ratings by baseline prior to computing similarities
bind UserVectorNormalizer to BaselineSubtractingUserVectorNormalizer
ПРИЛОЖЕНИЕ 7
Функция для формирования рекомендаций
(обязательное)
public List<Recommendation> run() {
// Для начала нужно сконфигурировать data access
DataAccessObject dao;
try {
StaticDataSource data = StaticDataSource.load(recData.getDataFile());
// получем данные из DAO
dao = data.get();
} catch (IOException e) {
LOGGER.error("cannot load data", e);
throw Throwables.propagate(e);
}
// Далее: загрузить конфигурацию алгоритма LensKit
LenskitConfiguration config = null;
try {
config = ConfigHelpers.load(new File("etc/item-item.groovy"));
} catch (IOException e) {
throw new RuntimeException("could not load configuration", e);
}
// Сейчас необходимо сбилдить рекомендательный движок и передать ему конфигурацию и DAO
// Он вычислит матрицу подобия и вернет рекоменд. движок, который её использует
LenskitRecommenderEngine engine = LenskitRecommenderEngine.build(config, dao);
LOGGER.info("built recommender engine");
try (LenskitRecommender rec = engine.createRecommender(dao)) {
LOGGER.info("obtained recommender from engine");
// мы хотим рекомендовать мероприятия (items)
ItemRecommender irec = rec.getItemRecommender();
assert irec != null; // not null because we configured one
// для пользователей
List<Recommendation> recommendations = new ArrayList<>();
for (long user : recData.getUsers()) {
// получим рекомендации
ResultList recs = irec.recommendWithDetails(user, 10, null, null);
for (Result item : recs) {
Entity itemData = dao.lookupEntity(CommonTypes.ITEM, item.getId());
String name = null;
if (itemData != null) {
name = itemData.maybeGet(CommonAttributes.NAME);
}
recommendations.add(new Recommendation(user, item.getId(), name, item.getScore()));
}
}
return recommendations;
}
}
Размещено на Allbest.ru
...Подобные документы
Знакомство с особенностями и основными этапами разработки онлайн-сервиса, облегчающего потребителям процесс подбора спортивного снаряжения. Анализ оборудования для вейкбординга. Общая характеристика клиент-серверной архитектуры реализации веб-приложения.
дипломная работа [4,1 M], добавлен 30.09.2016Разработка web-сервиса как услуги, предоставляемой пользователю. Продажа товара (автомобилей) в Интернете, проблема выбора. Онтологии как часть концепции Semantic Web. Применение онтологий, их основные типы и свойства. Особенности реализации онтологии.
курсовая работа [57,4 K], добавлен 17.04.2012Системные службы хостинг-компании как целевая аудитория сервиса, общие требования к ним. Критерии оценки интерфейса и направления разработки. Проектирование интернет-сервиса, схема его функционирования и принципы реализации, оценка эффективности.
дипломная работа [2,5 M], добавлен 18.11.2013Изучение истории возникновения и развития сети Интернет - всемирной системы добровольно объединенных компьютерных сетей, построенной на использовании протокола IP и маршрутизации пакетов данных. Определение значения Интернет-сервиса в современном офисе.
курсовая работа [42,7 K], добавлен 28.02.2011"Файл-серверная" и "клиент-серверная" архитектуры. Сетевые операционные системы. Одноранговые NOS и с выделенными серверами. Семейство сетевых ОС Windows, ОС UNIX, Linux. Программное обеспечение для работы в интернет. Назначение службы доменных имен DNS.
учебное пособие [1,3 M], добавлен 19.01.2012Разработка интернет-сервиса для создания визуального интерфейса системных служб хостинг-компании. Критерии оценки интерфейса и направления разработки. Рабочий стол GlideOS. Выбор архитектуры сервиса, языка программирования и коммуникационных методов.
дипломная работа [3,1 M], добавлен 19.11.2013Характеристика разновидностей онлайн видеоредакторов. Суть облачного сервиса, который предоставляет пользователю различные возможности через Интернет. Редактирование видеоинформации. Видеомонтаж - процесс "сборки" фильма из отдельных элементов - кадров.
презентация [442,0 K], добавлен 06.04.2014Потребность в разработке интернет ресурса для более удобного информирования и обслуживания клиентов фирмы. Проектирование базы данных в MySqlServer для более удобной работы с клиентами ООО "КСС-СЕРВИС". Расчет затрат на разработку программного продукта.
дипломная работа [3,7 M], добавлен 10.07.2017Автоматизация работы систем управления управления ЖКХ. Технология SaaS - Интернет-сервис с бесплатным доступом к программам. Разработка облачного информационного сервиса для функционирования инновационной ИТ - инфраструктуры организации ЖКХ "Гармония".
дипломная работа [1,4 M], добавлен 15.08.2014Архитектура и история создания операционной системы Android. Язык программирования Java. Выбор средства для реализации Android приложения. Программная реализация Android приложения. Проведение тестирования разработанного программного обеспечения.
курсовая работа [167,8 K], добавлен 18.01.2017Роль и значение Интернета в жизни общества. Тенденции развития Интернета в России: проблемы и перспективы, характеристика структуры рынка. Сферы обслуживания, реализующие услуги через Интернет. Использование Интернет-технологий в социокультурной сфере.
курсовая работа [95,4 K], добавлен 04.02.2011Анализ существующих систем создания и управления сайтами, их общая характеристика и оценка функциональности на современном этапе. Требования к серверной части, средства ее разработки. Тестирование интерфейса. Формирование руководства пользователя.
дипломная работа [1,0 M], добавлен 11.04.2012Характеристика работы операционной системы Android, используемой для мобильных телефонов. Создание Android проекта в среда разработки Eclipse. Общая структура и функции файла манифест. Компоненты Android приложения. Способы осуществления разметки.
курсовая работа [1,0 M], добавлен 15.11.2012Определение понятия и оценка современного состояния информационного сервиса, основные тенденции его развития. Понятие и управление доступом к ресурсам сети Интернет. Динамика роста информационных ресурсов и развития информационного общества в России.
реферат [28,3 K], добавлен 29.05.2013Исследование рынка банковских программ. Анализ эффективности различных рекомендательных алгоритмов. Обзор имеющихся подходов выработки рекомендаций. Архитектура разрабатываемой системы. Методы коллаборативной фильтрации. Использование контентных методов.
курсовая работа [678,2 K], добавлен 31.08.2016Общие характеристики операционной системы Android. Разработка приложения на основе создания менеджера файлов. Получение с помощью приложения доступа к файлам, хранящимся в "облачном хранилище" в сети Интернет. Расчет стоимости программного обеспечения.
дипломная работа [2,7 M], добавлен 03.04.2015Особенности безопасности работы в сети Интернет. Информационная безопасность и классификация мероприятий по ее технической защите. Разновидности мероприятий по опознанию и предотвращению несанкционированного доступа. Возможности межсетевого экрана.
реферат [764,5 K], добавлен 21.02.2010Обзор существующих решений построения систем взаимодействия. Классическая архитектура клиент-сервер. Защита от копирования и распространения материалов тестирования. Задачи ИБ компьютерных систем тестирования и обзор современных способов их реализации.
курсовая работа [36,9 K], добавлен 26.04.2013Описание создаваемого сервиса. Разработка и реализация серверной части сервиса и клиентской части сервиса, которая будет предоставлять пользователям возможность создания и редактирования генеалогических деревьев, возможность импорта и экспорта данных.
курсовая работа [116,9 K], добавлен 20.07.2012Преимущества и недостатки использования двух типов базовых архитектур Клиент-сервер и Интернет/Интранет, их компоненты и экономическая целесообразность. Информационные взаимосвязи компонентов WEB-узла, взаимодействие браузера, сервера и сценария CGI.
реферат [324,4 K], добавлен 22.06.2011