22

Агрегатор контента своими руками. Попытка №2.

Агрегатор контента своими руками. Попытка №2.

Привет моим верным подписчикам и лиге вэб разработчиков! В данном посте я поведаю о:

- паре забавных случаев, возникших при разработке новой версии моего агрегатора котиков и мемасиков (а так же новостей, видео, пабликов, групп, RSS и Telegram каналов );

- текущем состоянии дел и планах развития.


Около 800 дней назад я опубликовал первую версию агрегатора контента и сделал пост на пикабу. Сервис получился неплохим и мои цели удовлетворял. Я пользовался им каждый день, для просотра мемасиков и котеек. Но, к сожалению, большого интереса у пользователей не вызывал. А в комментариях знающие люди советовали весь функционал перенести на сервер, что бы на клиентских устройствах все работало максимально быстро.


Так как по своей натуре я перфекционист, то идея сделать все "красиво" не давала мне покоя и в 2017 году я наконец сдался и решился переписать все с 0, нанять хорошего дизайнера и выкатить ресурс который заткнет за пояс конкурентов :) Получилось ли у меня или это очередное фиаско, я надеюсь узнать сегодня, в комментариях к этому посту :)


Итак, начнем с пары интересных задач, которые пришлось решить при разработке.


1. Как я добавлял вывод телеграмм каналов.


В последний год появляется все больше популярных телеграм-каналов. Но лично мне не удобно читать их в приложении, хотя я не пробовал :). Я сразу запланировал, что в новой версии агрегатора обязательно должна быть возможность вывести в свою ленту посты из любых публичных телеграм-каналов вместе со всеми другими источниками.


Обилие инструкций по работе с телеграм-ботами воодушевляло и я рассчитывал, что задача не займет много времени. И еще я не понимал, почему никто не сделал аналогичного сервиса :)


Как это всегда бывает в разработке, препятствия возникли на ровном месте: оказалось, что для того, что бы бот мог читать какой-то канал, бота надо туда добавить. Поэтому вариант сразу отпал. И я перешел к чтению мануалов на основной API телеграма.


Через 30 минут изучения документации я был в отчаянии.



Все данные у телеграма шифруются, что бы получить что то от их серверов нужно обладать степенью магистра по криптографии... И, конечно, обычные http запросы - это не для них, только низкоуровневые socket, отдающие чистые байты, только хардкор. Вообщем без сторонней помощи задача была нерешаемая.


Несколько дней поиска привели меня к решению: использовать на сервере opensource php телеграм клиент. Дада! Можно использовать телеграм под php, и там даже есть поддержка звонков! Это чудо называется madelineProto и исходники доступны на гитхабе.


В итоге, через 3 дня настройки и две блокировки моего аккаунта из-за чрезмерного количества попыток авторизации я настроил клиент и решил задачу. Теперь у меня есть свой шлюз из telegram в web! А пользователи могут читать любые публичные телеграмм каналы у меня на сайте без регистрации и смс.


2. Парсинг youtube каналов.


С API youtube'a вообще вышло забавно. Их справка предлагает использовать php плагин от гугла для доступа к API.  От их API мне нужно было не много: список видео на канале с метаданными, название канала и его логотип. У vk или fb такой запрос создается парой строчек кода и разобраться можно за пол часа.


Но у гугла свой путь разработки :)

Я смирился с тем, что плагин для доступа к API весит более 30 мегабайт. Но я еще и не смог настроить его за 3 часа!

В итоге, кликая на все подряд в справке гугла, оказалось, что плагин можно вообще не использовать, а для получения всей информации - воспользоваться стандартным get запросом, как везде. На формирование запроса мне понадобилось ровно 10 строк кода и 15 минут, вместо 30 мегабайтного плагина.

А потом люди удивляются: "а почему андройд притормаживает на 8-миядерных процессорах и требует 4 гигабайта оперативы?" ;)


3. Что сейчас с агрегатором?


Я запустил вторую версию пару недель назад, и уже выловил все критичные баги. Сейчас все работает стабильно и быстро. Сейчас надеюсь получить отклик от армии пикабу (хотя бы от небольшой ее части), узнать чего им не хватает и что нужно поправить.


4. Планы


- Добавить прямые ссылки на отдельные источники

- Расширять список источников: imgur, rutube, reddit, новостные сайты.

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

- Добавить в ленту вывод видео и гифок, что бы сократить число внешних переходов;

- Е-маил рассылки с лучшими постами за день/неделю (естественно при желании пользователя);

- Сотрудничество с создателями контента для совместного продвижения.



5. Техническая часть.


Для тех кому интересно то под капотом следующий стек технологий:


Backend: самописный, доставшийся мне в наследство на одном из проектов и переписаный мной под свои нужды. Используется шаблонизатор smarty.

БД: Mysql

Fron-end: HTML + Angular JS 1, так же используется Jquery 2 (в 3-й версии scroll события в firefox не работают периодически) для анимаций.


Парсинг осуществляю с помощью библиотеки php-query или через API раз в 5 минут по CRON'у в порядке живой очереди с приоритетом на публичные источники. Т.е. если за 4 минуты сайт не успел пройтись по всем источникам, то скрипт останавливается. А в следующий раз в начале очереди находятся те источники, которые дольше всего не обновлялись. Очереди для публичных и персональных источников разные - по 2 минуты и на те и на другие.


Если вас заинтересовал проект, то буду очень признателен за любые отзывы и комментарии. Ссылка (на пикабу, вроде, разрешено в конце поста давать ссылку): https://i-c-a.su/

Правила сообщества

- запрещено добавлять посты отличной от мира программирования тематики (так как пикабу - это в первую очередь развлекательный ресурс, то посты с юмором, историями, изображениями и всем, что связано с php - разрешены);

- запрещено добавлять посты с содержанием в виде вопроса, или просьбы о помощи, для этого есть тематические ресурсы;

- запрещено добавлять посты провакационной тематики, нацеленные на бессмысленные споры и оскарбления;

- в копипастах и переводах указывайте источники;

Вы смотрите срез комментариев. Показать все
1
Автор поста оценил этот комментарий

Вроде неплохой сервис. Из пожеланий-советов: превью изображения к гифкам не подтягиваются. Удобен был бы переключатель для выбора всех источников из категории (или вообще всех источников). Можно добавить hover-эффект для кнопок (вроде входа, регистрации).

раскрыть ветку (13)
0
Автор поста оценил этот комментарий

Спасибо за замечания, со всеми пунктами согласен!

0
Автор поста оценил этот комментарий

Сейчас перечитал ваш комент, и возник вопрос: к гифкам не подтягивается вообще ничего, или просто статичная картинка? Если вообще ничего, то это скорее всего баг и тогда мне хотелось бы узнать, что за источник.

раскрыть ветку (11)
1
Автор поста оценил этот комментарий

Превью-изображения к гифкам не подтягивается.

Сейчас проверил, не подтягиваются в Firefox. В хроме всё в порядке. Возможно, только у меня. Желательны более тщательные тесты)

Update: Проверил через мобильный Firefox, подтягиваются. Скорее всего, ложная тревога. Гифки должны проигрываться, или только переход к источнику?

Иллюстрация к комментарию
раскрыть ветку (10)
0
Автор поста оценил этот комментарий

Спасибо за скриншот! Но это какой то полтергейст :) Проверил в FF 58 на маке конкретно эта картинка загрузилась.

Иллюстрация к комментарию
0
Автор поста оценил этот комментарий

Пока писал сообщение появился UPDATE :)

Вероятно vk лаганул.

Гифки и видео, к сожалению, пока не проигрываются. Цель была запустить проект максимально быстро с базовым функционалом. Добавить проигрывание видео и гиф, как минимум из VK, не очень сложно.


Но пока основная цель - это привлечение пользователей. Если ядро постоянных пользователей наберется, то тогда и мотивация будет развивать ресурс активнее :) Делитесь ссылкой с родственниками и друзьями ;)

раскрыть ветку (8)
0
Автор поста оценил этот комментарий

Как вы хотите подтягивать проигрывание gif и видео из ВК для не авторизированных пользователей? VK требует ключ пользователя для этих целей (доки: https://vk.com/dev/docs.get).


Была схожая задача, тех поддержка ВК сказала что сделать без авторизации пользователя это невозможно.

раскрыть ветку (7)
0
Автор поста оценил этот комментарий

Да, вы правы, для получения ссылки на видео или плеер требуется ключ доступа пользователя https://vk.com/dev/video.get . Ссылка на gif отдается вроде бы в рамках wall.get, но это особой роли не играет.


Тех поддержка права, пользователя надо авторизовать, но нигде же не сказано что это должны быть разные пользователи :) У меня же в бэкэнде зашиты мои сервисные ключ доступа к различным API, не сложно добавить и личный для доступа к видео. Т.е. ссылки на видео будут запрашиваться от моего имени и сохраняться в базу, а потом - выводиться внутри поста в виде iframe с плеером vk.


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


Существенных рисков с точки зрения безопасности так же нет, так как запросы к vk API отправляются по расписанию и только backend формирует запросы к vk API для получения фиксированного набора данных. Т.е. пользователи не могут отправлять запросы к vk api через мой backend.

раскрыть ветку (6)
1
Автор поста оценил этот комментарий

Проблема в том, пользовательский ключ доступа получается через ваш браузер путём oAuth2 авторизации, и если вы попробуете сделать запрос с другого ip (не с того, с которого авторизовались), то ВК вам отдаст 403 ошибку и удалит ключ.


Запросы с сервера ВК тоже отклоняет. Я как-то пробовал сделать так: ставил прокси на сервер и авторизовывался через ip сервера,  а потом с нег же отправлял запросы. Но ВК всё равно понимал, что запросы идут не из браузера и блокировал их.


Если вы хотите получать видео и фото вам необходимо будет заставлять пользователя авторизоваться, так как запросы нужно будет отправлять с его ip и ВК требует чтобы все запросы с ключом пользователя были отправлены именно из браузера, серверные запросы блокируются.


Если вы знаете как побороть эту проблему, буду очень рад узнать. У меня к сожалению так и не вышло это сделать.

раскрыть ветку (5)
0
Автор поста оценил этот комментарий

Интересно! Тянет на целый пост :)


В ближайшее время не планировал обновлений, но через пару месяцев попробую.


UPDATE:

У вк есть 2 способа использования ключа: для фронта через js, и там есть привязка к ip и для бэкэнда через php, например, и там привязки нет, но есть какие то ограничения: https://vk.com/dev/authcode_flow_user


Я начну со второго способа...

раскрыть ветку (4)
1
Автор поста оценил этот комментарий

Ещё интересный вопрос, как будете в будущем бороться с ограничением ВК в 10000 запросов в сутки на получение постов из групп?

раскрыть ветку (3)
0
Автор поста оценил этот комментарий

Пообщался тут с агентами техподдержки. Лимиты у них увеличить нельзя, даже за деньги.

Но я зарегестрировал еще одно приложение, даже ссылку указал на сайт такую же как в первом приложении. Добавилось без проблем. В ближайшие недели попробую использовать два сервисных ключа, в запросах к апи. Тоесть рандомно буду выбирать ключ из своего списка и использовать. Тем самым лимит будет n*10000, где n -  количество ключей...


Но не знаю есть ли запрет на такие действия...

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

я рассматривал такой вариант, но если спалят будут банить аккаунты 100%. придётся время от времени регистрировать приложение заново.

Поддержка ВК в принципе на контакт не очень идёт. В прошлый раз мне отказались дать доступ для автопостинга в мой же паблик. Хотя раньше такая возможность была.

Отпишусь сюда, если найду какое-либо решение.

0
Автор поста оценил этот комментарий

Пока у меня 32 источника из ВК, они обновляются раз в 5 минут, следовательно в сутки набегает 9000 запросов. Когда начнутся проблемы, буду увеличивать интервал обновления. раз в 10 минут поставлю, например.


Так же у меня сделано разделение: публичные и личные источники обновляются независимо, так что в будущем когда личных источников станет много,  они будут обновляться с меньшей частотой, например раз в час. Ну так же можно перейти на какие нибудь платные подписки...  

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку