Веб сервис "закладки"
Идея создать веб-сервис, где можно было бы хранить свои ссылки-закладки была у меня уже давно: визуальные закладки браузера меня не устраивали - они были лишь на моём ПК и их было мало, около 20 шт. Но я не представлял как создать свой сервис. Прошло время, теперь создать свой веб-сервис не так сложно как казалось, к тому же я хочу попрактиковаться в PHP и MySQL.
Прежде всего я попытался рассмотреть возможности, представляемые другими сервисами. Как оказалось, сайтов, где можно хранить свои закладки, оказалось не много, а очень много + желающих создать такой тоже оказалось не мало. И всё же, мне ни один из существующих не понравился, в основном это длинные списки, в лучшем случае распределённые по папкам. В браузере у меня около 500 ссылок и навигация по ним просто ужасна. Да, есть возможность создания папок, но ведь это так долго - искать подходящую папку или создавать новую, а если ссылка подошла бы в несколько папок? В общем - долго и неудобно.
Итак, это должен быть сайт, где можно регистрироваться, добавлять данные, изменять, удалять, просматривать. CMS? - Нет. CMS - это шаблонно, это не индивидуально, это сплошные ограничения и незнание, как всё устроено. Поэтому я выбрал создание веб-сервиса с нуля, в блокноте (образно).
Критерий завершения
Сервис общедоступен, функционирует, зарегистрировано несколько реальных пользователей.
-
Основы: хостинг и домен.
Основа любого сайта - это хостинг (или сервер :) + домен. Необходимо выбрать хостинг, купить домен.
-
Создание простейшей регистрации пользователей
Изучить все те основы, что касаются регистрации пользователей на сайте. Создание простейшей системы регистрации. Нашёл информацию: http://ruseller.com/lessons.php?rub=37&id=347
-
Создание базы данных. Структура
Продумать структуру веб-сервиса: создать базу данных - таблицы, поля. Необходимо продумать то, как будет функционировать сайт, что необходимо сохранять о пользователе, о его ссылках и т.д.
-
Создание скриптов PHP
Индексный файл, добавление, изменение, вывод данных, работа с персональными данными пользователя - всё это необходимо объяснить машине, что должно происходить при определённых действиях пользователя. PHP-скрипты, MySQL-запросы, это уже можно назвать сервисом.
-
Внешний вид, вёрстка
Последнее время бывает быстрее сверстать, чем нарисовать макет, поэтому сразу за вёрстку. Куча текста и непонятные формы нельзя назвать удобным сервисом.
-
Получение иконки сайта
Какой же это сервис для хранения ссылок, если даже иконку сайта получить не может? Итак, нужно написать скрипт, получающий иконку по адресу. Для начала я "погуглил" какие готовые решения уже есть. Самый популярный - как раз таки решение от google, не помню адрес, но смысл в том, что ты передаёшь в строке запроса url сайта и как ответ получаешь иконку. На первый взгляд - "Отлично! Что может быть лучше готового решения от Google?", но на второй взгляд оказалось не идеально. Я попробовал получить несколько иконок, и результаты работы скрипта от google меня не порадовали. Он выдаёт старую иконку для яндекса,
наверное мстит конкуренту :),некоторые иконки искажает, будто неудачно изменяет их размер. В конце концов я хочу научиться новому! Поэтому создам свой скрипт получения иконки сайта.Работу скрипта можно разделить на несколько этапов:
1) Поиск на самой странице явного указания адреса иконки (регулярные выражения идеально подходят)
2) Иначе поиск иконки в каталоге, где находится страница.
3) Иначе если страница второстепенная, смотрим явное указание иконки на главной странице сайта
4) Если и здесь иконка не найдена, пытаемся найти её в корневом каталоге сайта под именем favicon.ico
5) Если не удалось получить иконку сайта, выдаём стандартную иконку -
Тестирование
Регистрация нескольких пользователей, проверка функционала, исправление багов.
-
Поддержка русских доменов
Сервис для хранения ссылок должен поддерживать русскоязычные доменные имена. Сложность в том, что они кодируются в соответствующее им представление из английских символов. Нужно раздобыть функцию для кодировки русскоязычных доменов.
-
Создание меню, настроек
-
Сортировка ссылок
Нужно добавить возможность сортировки ссылок по дате, по популярности. Нужно добавить поле в таблицу БД, где будет храниться информация о популярности.
-
Поиск ссылок
Поиск ссылок просто необходим, иначе как не запутаться в куче ссылок без иерархии? Поиск по заголовку, адресу, тегам. Сортировка ссылок по релевантности: думаю хватит процента совпадений и некоторых изменений "важности" совпадений в заголовке и описании.
-
Первоначальные ссылки
Сейчас, при открытии "главной" страницы сайта, открываются ссылки пользователя admin, стоит их же добавлять сразу только что зарегистрировавшимся пользователям.
-
Отделить систему шифрования
Шифрование пароля нужно вынести в отдельную свою функцию, для того чтобы можно было изменить только её, а не искать по уже немалому количеству файлов.
-
Поддержка событий сенсорных экранов
Пусть адаптивность для этих самых устройств ещё не реализована, но поддержку сенсорных событий сделать нужно.
-
Некоторые ограничения для безопасности
Письмо с ссылкой для подтверждения почты можно отправлять 1 раз в 10 минут.
Не делать новый запрос на добавление ссылки, если не получен ответ от предыдущего. -
Переключатель версий
Снова добавляю этот этап, так как переключатель всё же нужен, но не такой как я предполагал изначально. Нужно использовать @media css3 чтобы предлагать включить мобильную версию, когда разрешение не позволяет пользоваться обычной, ведь php всего-лишь определяет устройство, но никак не разрешение экрана. Так, возможно, для пользователей с большими планшетами стоит предложить открыть обычную версию (если я доработаю некоторые моменты).
-
Мобильная версия
Продумать структуру, нарисовать макетСверстать структуруДобавить свой CSS файл, кроме основногоНастроить отображение формНастроить отображение меню, настроекНастроить PHP скрипты для взаимодействия с новой структурой
6.1Добавление ссылок
6.2Поиск ссылок
6.3Подгрузка ссылок ajaxВнедрить мобильную версию (включать ту или иную в зависимости от условий)Настроить возможность редактирования и удаления ссылок
-
Умный поиск - восстановление раскладки текста
Если результатов поиска мало, а запрос из 3+ букв, проверять на ошибку раскладки.
-
Расширенная чистка
Удалять старые или неиспользуемые не всегда удобно, так как среди старых могут быть часто используемые, а среди неиспользуемых 100% будут только что добавленные. Честно говоря, текущая чистка бесполезна. Нужно дорабатывать. Стоит использовать при чистке одновременно 2 критерия, и, возможно, спрятать чистку в спойлер.
-
Добавить чужую ссылку к себе
Возможность добавить чужую ссылку себе: открывается уже заполненная форма "добавить"
-
Создать форму обратной связи
-
Быстрый просмотр всех публичных ссылок
Знакомый посоветовал, чтобы при поиске ссылок, после своих шли наиболее релевантные ссылки других пользователей, которые, естественно, не помечены как приватные ссылки.
Как минимум нужно:
- Реализовать подгрузку ссылок (для существующего поиска), возможно, для этого создавать отдельные временные таблицы отсортированные, чтобы не проделывать это каждый раз при подгрузке. Для этого лучше создать отдельный скрипт, чтобы не засорять уже отлаженный.
- Внедрить это дело в обе версии (мобильную и полную). Придётся добавить пару условий и несколько строк кода javascript.
- Написать скрипт, осуществляющий поиск по всем публичным ссылкам, принимающий 3 параметра: поисковый запрос, порядковый номер, с какой ссылки начинать отображение и количество то, сколько ссылок выводить. Примерный алгоритм скрипта:
3.1 Получить полный список подходящих ссылок
3.2 Исключить из списка свои ссылки, дабы они уже отображены
3.3 Исключить из списка ссылки, с одинаковым url-адресом
3.4 Отсортировать ссылки по релевантности
3.5 Если порядковый номер (2-ой параметр, то, с какой ссылки по счёту начинать) равен 0, тосоздать временную таблицу ссылок или только якорей (идентификаторов ссылок, а может даже лишь строку в таблице, ибо таблица для одного запроса жирно будет, как-то запомнить эту строку для последующих запросов подгрузки; иначе, если это уже запрос подгрузки (порядковый номер != 0) "вспомнить" строку со списком идентификаторов результатов.
3.6 Вывести очередную (или первую) порцию ссылок, соответствующих идентификаторам из строки. - Изменить скрипт поиска и подрузки своих ссылок: если результатов своих больше нет, вывести кнопку "показать другие ссылки"
- Добавить отдельно возможность поиска сразу среди всех публичных ссылок других пользователей.
Что-то многовато для одной фичи...
Как решить проблему мусорных ссылок или спама? Ввести отдельную "категорию" и после модерации присваиваивать эту категорию? Создать специальный скрипт для модерации ссылок? -
Настроить новый поиск для мобильной версии
-
Перенести на новый домен
Когда откроют регистрацию доменов в новой зоне неизвестно, пишут "скоро". Как только, нужно будет скопировать весь сайт в новую папку, почистить, изменить пару значений в sitedata.php - это будет уже бета-версия.
-
Промо-страничка
Создать страничку-лендинг для первого посещения с описанием, скриншотами и т.п. + 2 кнопки "регистрация" и "попробовать".
-
Настроить robots.txt и доступ к файлам
Нужно запретить индексирование большинства файлов, а также запретить их просмотр и пользователями.
-
Создать "вспомогательные" страницы сайта
О сервисе, Как это работает, Нужна помощь и т.д.
-
Подключить SSL
К HTTPS даже поисковики относятся лучше) Но это когда домен будет.
-
Знакомство с интерфейсом - подсказки
Пользователю, первый раз зашедшему на сайт довольно сложно быстро разобраться с интерфейсом, к тому же некоторые моменты совсем не очевидные, например, чтобы сделать ссылку приватной, нужно добавить тег "приват" или "private".
-
Дополнительные возможности
Хочу попробовать сделать расширенные возможности и принимать платежи. Поглядел сторонние сервисы позволяющие принимать платежи, но, как мне кажется, пользоваться ими не вариант, в плане того, что стоит сделать это напрямую. C wm хорошо знаком, думаю это будет первый подключенный способ оплаты.
Однако, это последний этап, до него ещё далеко :)
В эти дополнительные возможности будет входить бекап ссылок, неограниченное их количество, стоит придумать что-то вроде кэширования страниц.
-
Мелочи
А это этап реализации всего того, что пока не хочется:
Лоадер в промежуток времени, когда кнопка добавить уже нажата, а ответ от сервера ещё не последовал.Заменить надпись "создать папку" на "новая папка"либо добавить графическую кнопку...Как оказалось, для добавления себе ссылки а не папки тоже следует использовать сторонний скрипт, иначе проявляется один безобидный, забавный баг.
Хорошо, что скрипт добавления чужой папки себе подходит и для добавления себе чужой ссылки.- Добавить форму уведомление когда юзер добавил себе чужую папку "Папка успешно добавлена"
- Добавить форму уведомление когда юзер добавил себе чужую ссылку "Ссылка успешно добавлена"
- Запретить повторные нажатия на "добавить себе"
Не добавлять в общий поиск ссылки от пользователей, которые ещё не подтвердили свою почту- Сделать форму-предупреждение резиновой по высоте, т.к. названия папок могут быть длинными (или сокращать имена подставляемые например "Моя коллекция кар...")
-
Фичи
Решил добавить этап, где буду формировать список фич - кандидатов в потенциальные возможности сервиса.
- Расширение для браузеров для быстрого сохранения ссылок
- Автоматическое сохранение ссылок из любого браузера без расширений через GET-запрос
- Написать скрипт, который будет брать картинку (или скриншот) соответствующий странице. Показывать её при наведении на ссылку (загрузка после наведения, чтобы не грузить лишнее)
- Сохранение заметок, а не ссылок (пустой url, та же БД, отдельная иконка)
Различные флажки "к прочтению" или "важно", + мб, как посоветовалArcв комментариях, флаг "прочитано". Этап "группы" перестаёт существовать и сливается с этим пунктом.
Остановился таки на группах - процесс создания групп подходит к завершению.Модераторы с блэкджэком и плюшками (возможность пометить как "спам" или "плохая ссылка", после N таких жалоб ссылка выпадает из поиска и/или модерируемое добавление в общий поиск, для модератеров -плюшки)
Почти готово - осталось только настроить.Возможность дать ссылку на ссылку или группу ссылок
Так как реализована возможность создавать папки, которые открываются по отдельному адресу, этот пункт можно вычёркивать. Возможно лишь кнопку "поделиться" и ссылку на текущую страницу отправлять в нужную соц. сеть.- Возможность переместить ссылку/папку (и на забыть условие поставить чтоб папку саму в себя не перенесли случайно)
- Отметить ссылки и выполнить действие
Работа с ссылками на файл (изображения и другие)
10.1Изменить (убрать) автозаполнение
10.2Разные иконки для разных типов файлов- Корзина: создать таблицу для "мусора", т.е. ссылки после удаления пусть попадают в корзину, где хранятся 24 часа, и их можно восстановить.
Выбор иконки - создать коллекцию иконок, внедрить интерфейс (изменить формы, изменить скрипты, добавить ещё поле в бд)- Сортировка по алфавиту
- Может чистку сделать автоматической, настраиваемой, регулярной
- Не "фича", но записать нужно: блог, группы в соц сетях для того, чтобы писать об обновлениях. В принципе уже можно бы запускать сервис и создавать для начала группу, все последующие изменения были бы там, но домена всё нет.
- 6697
- 24 сентября 2014, 17:38
Не пропустите новые записи!
Подпишитесь на цель и следите за ее достижением