Задать вопрос
graymore2
@graymore2

Как соцсети формируют ленту новостей?

Необходимо реализовать алгоритм выдачи новостей на сайте. Дело в том, что сейчас они в тупую выдаются следующим образом: Выбираются новости от НОВЫХ к СТАРЫМ, то есть фильтруются по дате.
Возникла необходимость добавлять в новостную ленту рекламные посты, какие то слайдеры и т.д (как в vk.com, раздел Новости). Еще необходимо предоставлять некоторым постам некий "Приоритет выдачи", чтобы эти новости например, точно попадали в первые 10 постов.
Не могу понять как реализовать подобный алгоритм. Есть ли у кого-то примеры, может кто сталкивался с подобным.
  • Вопрос задан
  • 116 просмотров
Подписаться 1 Средний 1 комментарий
Решения вопроса 2
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Просто формализируйте задачу:
1. лента новостей содержит максимум 30 элементов
2. есть функция для выдергивания платных постов (видимо их нужно в топе держать, соответственно у вас есть таблица их приоритетов и таблица показав, что бы показывались только четко уплаченное количество раз

Теперь по реализации.
1 реализуется тупо в лоб.
2 это ваша бизнеслогика, но есть ньюанс у вашего обекта есть поле важность.
3 вы получили допустим 30 новостей + 2 заказных. , отбрасываете 2 обычные новости и выводите этот список. Например проплаченная новость идет 1, потом 3 нормальных и 2 проплаченная
Ответ написан
@romazhan
Алгоритм выдачи новостей, который может учитывать рекламные посты, слайдеры и приоритеты выдачи, состоит в том, чтобы дать каждому посту некую "весовую" оценку, а затем отсортировать новости по этой оценке.

Например, вы можете присваивать некий базовый "вес" каждому посту в зависимости от его типа (рекламный пост, слайдер, обычный пост и т.д.). Затем вы можете учитывать дату публикации и присваивать больший вес более свежим постам. Также вы можете учитывать приоритет выдачи и присваивать больший вес постам с большим приоритетом.

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

При использовании БД для хранения новостей, вам нужно будет придумать способ присваивания "весовой" оценки новостям. Это может быть сделано, например, через добавление дополнительного столбца в таблице с новостями, где будет храниться "весовая" оценка каждой новости. В зависимости от вашей реализации, эта оценка может быть целым числом, дробным числом или строкой. Например, вы можете создать столбец "priority" типа integer и хранить там целочисленный "вес" каждой новости. Чем больше это число, тем больший приоритет у новости.

Что на счет алгоритма выдачи "веса"? Это довольно таки трудоемкая задача. Можно использовать разные подходы для формирования приоритета постов. Один из таких подходов - использование алгоритма баллов, который учитывает несколько факторов, таких как:
  • Время публикации: чем новее пост, тем выше его приоритет.
  • Количество лайков, репостов, комментариев: чем больше активности вокруг поста, тем выше его приоритет.
  • Пользователь, опубликовавший пост: если это популярный пользователь, то его посты могут иметь более высокий приоритет.

Учитывайте эти и другие факторы при расчете баллов для каждого поста. Например, вы можете присвоить баллы следующим образом:
  • Новый пост: +10 баллов
  • Каждый лайк: +1 балл
  • Каждый репост: +3 балла
  • Каждый комментарий: +5 баллов

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

Войдите, чтобы написать ответ

Похожие вопросы