Person Search API. University project.
Профиль - некоторый набор данных, пренадлежащих наверняка одному человеку (то, что данные принадлежат одному человеку, можно говорить тогда и только тогда, когда мы взяли их с одного условного аккаунта на каком-либо ресурсе).
Изначально пользователь имеет, положим, имя и фамилию и отдает их программе. Итак, программа совершает итерацию поиска по ресурсу, который позволяет результативно искать по имени и фамилии, положим, ВКонтакте. ВКонтакте, очевидно, выдаст больше, чем одну страницу с данными именем и фамилией. На странице может быть найден некоторый никнейм, вписываем его в профиль с теми именем и фамилией. Получаем некоторое множество профилей, уже имеющих при себе имя, фамилию, никнейм. На следующей итерации мы можем найти для некоторых таких профилей соответствие, положим, в телеграме, и, положим, что по никнейму. Но мы не можем утверждать, что человек один и тот же. Поэтому мы строим некоторый граф соответствий, вершины его - профили, ребра имеют пометки, а именно критерий соответствия. На каждой следующей итерации граф наполняется новыми профилями. По итогу работы программа проранжирует наиболее богатые соответствиями цепочки профилей из разных ресурсов, ведь можно полагать, что это один человек, если есть достаточно соответствий на разных ресурсах.
Создаем класс в пакете ru.nsu.lupa.res и наследуем его от ru.nsu.lupa.Resource
или же от ru.nsu.lupa.Resource.BaseResource.
Необходимо реализовать следующий метод:
/**
* Search for user info using given match graph,
* found information written in same graph
*/
fun performSearch(matchGraph: MatchGraph)В нем передается параметром граф соответствий. Ваша задача по контракту
- реализовать поиск при помощи API или чего-либо другого,
- обработать результат запроса и сложить его в объект
ru.nsu.lupa.Profile, - добавить все найденные профили в граф, вызвав метод
addProfile
Настройка программы происходит с помощью файла конфигурации, написанном на KotlinScript (*.kts).
Путь до файла указывается первым аргументом в командной строке.
Строка, получаемое из доменного имени, путем удаления всего кроме названия. Примеры:
- домен -
https://api.vk.com/, идентификатор -vk - домен -
https://yandex.ru/, идентификатор -yandex
Доступные контексты:
-
Базовый контекст, доступен в top-level файла.
-
config
-
profileЗадает стартовые данные для поиска.
- Параметры
resourceUrl: String? = nullname: String? = nullsurname: String? = nullusername: String? = nullemail: String? = nullphone: String? = null
- Пример использования
profile( name = "Вадим", surname = "Мостовой" ) - Параметры
-
config
-
parameters
-
set(infix)Устанавливает значения внешнего параметра для ресурса с идентификатором
id.- Параметры
parameterName: Stringvalue
- Пример использования
"userId" set "239105736"
- Параметры
Для поиска ВКонтакте необходимо авторизоваться.
- Переходим по ссылке
- Даем разрешение
- Копируем из строки браузера значения параметров
access_tokenиuser_id..&access_token=<ЗНАЧЕНИЕ>&....&user_id=<ЗНАЧЕНИЕ>&..
- В файле конфигурации для VK указываем эти параметры
config {
profiles {
profile(
name = "Иван",
surname = "Иванов"
)
}
/* ... */
parameters {
resource("vk") {
"accessToken" set "ВАШЕ_ЗНАЧЕНИЕ"
"userId" set "ВАШЕ_ЗНАЧЕНИЕ"
}
}
}