Skip to content

Структура ответа

Poloz Alexey edited this page Dec 21, 2018 · 5 revisions

Существующая XML-структура

<Root>
	<Item>
		<ID>IkLgI550LAc</ID>

		<Header>Лига наций. Обзор матчей от 15.10.2018</Header>
		<Body>Статистика турнира: https://news.sportbox.ru/Vid .....</Body>

		<Username>Матч ТВ</Username>
		<Userlink>UCtetJiD_llxdGL4Uh5-Oe2w</Userlink>

		<Hashtags>
			<Tag>#Football</Tag>
			<Tag>#Sport</Tag>
			<Tag>#BreakingNews</Tag>
		</Hashtags>

		<Date>1539561600</Date>

		<Keyword>#sport</Keyword>
        
		<Details>
			<Emotions>
				<Likes>203</Like>
				<Dislike>89</Dislike>
			</Emotions>

			<Reposted></Reposted>
			<UsersReposted>
				<Userlink></Userlink>
				<Userlink></Userlink>
			</UsersReposted>

			<Comments></Comment>
		</Details>
	</Item>
</Root>

Предложенная JSON-структура

{
	"id": "IkLgI550LAc",

	"head": "Лига наций. Обзор матчей от 15.10.2018",
	"body": "",

	// Автор поста в источнике
	"author": {
		"id": 48197213,
		"login": "matchtv",
		"name": "Матч ТВ",
		"link": "UCtetJiD_llxdGL4Uh5-Oe2w",
	},

	// Источник
	"source": {
		"type": ..., // Канал, группа, чат, бот, личные сообщения
		"id": 53993345,
		"login": "matchtv",
		"name": "Матч ТВ",
		"link": "UCtetJiD_llxdGL4Uh5-Oe2w",
	},

	"hashtags": [
		"Football",
		"Sport",
	],
	"keyword": "#sport",

	"time": 1539561600.00,

	"reactions": {
		"likes": {
			"count": 12,
			"all": [
			{
				"user": 2415321,
				"time": 325673356.00,
			}, {
				"user": 3452463,
				"time": 643543536.00,
			},
			...
			]
		},

		// Другие реакции, обозначающиеся смайликами
		"fire": {
			"count": 8,
			"all": [
				...
			]
		},

		"reposts": {
			"count": 2,
			"all": [
				...
			]
		},

		"comments": {
			"count": 3,
			"all": [
				// комментарии
			]
		}
	}
}

Обоснование:

  1. Вынесение информации о пользователе в подструктуру, чтобы не засорять общее пространство (тем более, что в зависимости от сети - набор полей будет отличаться)
  2. Разделение автора и источника (Users -> Author & Source). Для унификации, так как во многих сетях в одном паблике могут постить множество пользователей.
  3. Details -> Reactions: Так как любое взаимодействие является реакцией / эмоцией и в разных сетях они имеют разный набор и функционал, то можно создать общий формат, где перечислены лайки, дизлайки, реакции, репосты, комментарии, просмотры, ... Каждый элемент имеет количество (на случай если сеть не предоставляет список людей на соответствующую реакцию) и перечисление с содержанием (кто, в какое время, содержимое - если комментарий).
  4. Время в float формате (в некоторых каналах помогает отслеживать копирование постов с помощью ботов)
  5. Перечисление тегов без #, излишняя информация, также по ним осуществляется поиск, не всегда теги обозначаются с #