Giter Site home page Giter Site logo

dosociety's Introduction

doSociety - это проект, которым я занимался последние полгода 2017 года.

Т.к. я им уже не занимаюсь, а исходники пыляться более 3 месяцев, я решил залить его с bitbucket'а на github(возможно, они кому-нибудь понадобятся). Readme проект оставляю неизменным.

doSociety

doSociety - новая социальная сеть, цель которой заключается в поиске потенциально интересных собеседников в максимально близком регионе.

Основная концепция

Суть заключается в работе VK API, которая предоставляет работу с группами, музыкой и личной информацией каждого пользователя. Находя максимально близких людей по интересам(пересечениям общих групп и музыкальных исполнителей) и сортируя их по геопозиции(или исходя из личной информации), можно найти потенциально интересных собеседников, учитывая разницу в возрасте(+-5 лет).

Возможности

  1. Возможность приватного чата с потенциально интересными и близкими собеседниками
  2. Возможность выбора региона для поиска собеседников(например: при переезде, появляется потребность в новых друзьях; при поступлении в вуз другого города, нужно найти новых друзей, максимально близких по твоим интересам)
  3. Возможность общения на базе doSociety(при добавлении этой возможности, людям не потребуется "контачиться" в других социальных сетях)
  4. Возможность прослушивания аудиозаписей(онлайн и оффлайн)
  5. Возможность добавления фотографий и видео (По мере развития, список будет продолжаться)

Основные постулаты

  1. Актуальность(включает в себя нужность, именно из-за этого большое внимание должно быть уделено интерфейсу поиска новых собеседников)
  2. Скорость(при выше всего; вся работа должно происходить "плавно" и без типичных для android-приложений "подлагиваний")
  3. Элементарность и простота в использовании(все дожно быть просто и ясно, чтобы человек любого возраста смог без затруднений разобраться в приложении и найти нужную ему функцию)

TODO List

  1. Разобраться с работой VK API
  2. Создание шаблона будущего приложения
  3. Проектрирование архитектуры
  4. Написание сервера
  5. Верстка клиента
  6. Функционирование клиента

VK API

VK API предоставляет всю необходимую информацию для работы с группами, но 16 декабря 2016 года VK отключила поддержку Audio API(из-за монетизация ИМХО). Придется парсить аудиозаписи посредством магии PHP(со стороны сервера), для этого придется предварительно просить людей включить общий доступ к аудиозаписям(естественно не все последуют совету, но это все, что мы можем сделать в данной ситуации).

Для работы с группами можно использовать следующие методы(список может пополняться):

  1. Для узнавания определенных групп пользователя
  2. Для поиска каталог пользователя
  3. Здесь можно организовать интересующий нас поиск записей

Насчет аудиозаписей

Пытаемся найти аудиозаписи на странице,если находим, то начинаем парсить, в противном случае вешаем подсказку о необходимости открытия аудиозаписей.

Насчет получения личной информации

В VK API для этих целей есть специальный метод, думаю, его хватит с головой.

Разработка

Разработка ведется на Django(веб-фреймворк написанный на Python) и React.js(MVC написанный на JS компанией Facebook). Разработка сервера будет осуществлятся на Python.

WEB-версия

Веб-сервер:

Веб-сервер написан на Django с использованием Django-REST-Framework и Django-JWT(Json Web Token)
При любых запросах браузера сервер ведет на одну view (Index), в котором находятся только метатеги, тайтл и подключение скриптов с css-файлами
Обработкой отображения занимается app.js
Т.е. все происходит на одной странице, это так называемая SPA (Single Page Application)
Сделано это для того, чтобы страница не перезагружалась, т.к. мы будем подключаться к серверу(с помощью технологии websocket) один раз, передавая ему свой token и имела огромную скорость загрузки(см. постулат 2), которая реализуется с помощью виртуального DOM-дерева, при изменении которого React.js просматривает реальное DOM-дерево и изменяет минимальный кусок кода для его идентичного представления
Для получения token'а и другого рода информации(например id-пользователя, его личные переписки, настройки и доступ к данным) мы используем Django REST API
Django REST API - это фреймворк, который позволяет получать стериализованные данные(данные в формате json/или другом удобном виде)
Он имеет очень много всяких удобных параметров для настройки вывода той информации, которая удобна только нам(права доступа для отображения, поля вывода, обработка методов CRUD и т.д.)
Для получения token 'а я использовал метод obtain_jwt_token(), который расположен по адресу '/api/token-auth/'
На вход метода POST ему подается username(логи пользователя: email или телефон) и password(пароль)
При удачном обращении он вернет token, который мы сохраняем в localStorage(локальное хранилище, которое чистится только при удалении браузера, в отличии от кук, которые удаляются при закрытии браузера), которое мы будем очищать только при выходе пользователя(реализованно в "Настройки")
Получения личной информации реализовано в классе DRF, унаследованного от APIView - GetUserInfo, расположенный по адресу 'api/getuserinfo/'

Веб-клиент:

Для работы клиента используется React.js
Так как сервер отравляет все запросы на одну страницу(index.html), то обрабатывать url страницы приходится на стороне клиента, иначе происходило бы обновление, которые мы не можем допустить(все действия должны происходить на одной странице)
Для обработки запросов используется класс Route, которому в property path нужно передать регулярное выражение страницы

... ниже будут отдельные пункты, которые мне показались "интересными" или то, с чем я столкнулся в процессе выполнения определенной задачи ...

dosociety's People

Contributors

noonemza avatar nrjshka avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.