graymore2
@graymore2

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

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

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

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

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

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

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

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

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

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

Войти через центр авторизации
Похожие вопросы