Что такое Viz-Links — @on1x предложил мне создать приложение, которое будет работать, как поисковик и линковщик, на подобие блокчейна Cyber.
Суть реализации
- Получение данных из БЧ. Операция receive_award (полученная награда) аккаунтом committee. Формат memo:
запрос,ссылка1,ссылка2
ссылка1 — это ссылка, которая будет выводиться по запросу, ссылка2 — ссылка, к которой относится ссылка1.
Например, если ссылка1 — это музыка, ссылка2 — может быть видео, где эта музыка есть.
Указываются без указания протокола.
протокол обозначается в custom_sequence:
0 — viz://, 1 — https://, 2 — ftp://, 3 — magnet - Добавление ссылок в БД с суммами наград.
keyword — запрос, link — ссылка1, in_link — ссылка2, shares — полученные награды с указанием данных из БД.
Адреса указываются с протоколами, т.е. не так, как в memo наград. - API, выводящий данные
Перед тем, как перейти к примерам, скажу кое что важное:
В базе данных указывается in_link — ссылка, к которой относится link (ссылка1). Но в результатах поиска отображается inlinks, т.к. анкоры и link могут совпадать при разных in_link, и тогда будет дублирование. В связи с этим сделано объединение дублей с передачей разных in_link в inlinks.
3.1. full_search — полный поиск (запрос = keyword).
Пример: 138.201.91.11:7000/viz-links/?type=full_search&query=денис скрипник&page=1
Поскольку keyword одинаковые, выводятся только ссылки.Покажу на случай недоступности URL выше пример в виде кода.
Представим, что запрос «Денис Скрипник». Тогда ответ будет примерно таким:
[{«link»: «https://control.viz.world/media/@denis-skripnik», in_links: [«https://denis-skripnik.name»;, «https://dpos.space»]},
{«link»: «ipfs://hash», in_links: [«ipfs_hash2», «ipfs_hash3»]}] 3.2. Поиск запроса в keyword (неточное совпадение). Например, если в случае с full_search ввести «денис», ничего не будет выведено, т.к. ссылок с таким keyword нет; если же ввести этот запрос в unfull_search, появятся результаты, содержащие денис.
Пример: https://138.201.91.11:7000/viz-links/?type=unfull_search&query=денис&page=1Результаты будут почти такие-же, как в 3.1, но помимо link и inlinks будет ещё keyword, т.е. точное словосочетание, обозначенное для конкретной ссылки.
- Если номер блока делится на 28800 без остатка, производится уменьшение shares всех элементов в базе данных на 1%.
Подписка для повышения количества запросов
- Без авторизации можно отправить максимум 2 одновременных запроса;
- С авторизацией — 30.
Авторизация — проверка подписки на аккаунт из config.json (поле provider_account).
Я не стал делать проверку суммы подписки, т.к. это неважно (уровень один). Поэтому проверяется лишь статус (активна подписка или нет). В работающем примере используется подписка на аккаунт denis-skripnik.
Авторизация — это отправка к api помимо указанных ранее GET параметров ещё и auth. В значении указывается login:VIZpubkey:unixtime:подпись
login — логин Viz, VIZpubkey — его публичный ключ, unixtime — время, не должно отличаться больше и меньше, чем на 10 секунд.
подпись — это подпись указанных ранее данных (логина, ключа и unixtime).
Это необходимо, чтоб скрипт знал о пользователе.
Всё
Код опубликован в Github: https://github.com/denis-skripnik/viz-links
Также есть интерфейс на dpos.space/viz/search и реализация в репозитории denis-skripnik/dpos.space
Благодарю за внимание.
Наградить автора поста