Skip to content

lilvadim/lupa

Repository files navigation

lupa

Person Search API. University project.

Дизайн

Imgur

Профиль - некоторый набор данных, пренадлежащих наверняка одному человеку (то, что данные принадлежат одному человеку, можно говорить тогда и только тогда, когда мы взяли их с одного условного аккаунта на каком-либо ресурсе).

Изначально пользователь имеет, положим, имя и фамилию и отдает их программе. Итак, программа совершает итерацию поиска по ресурсу, который позволяет результативно искать по имени и фамилии, положим, ВКонтакте. ВКонтакте, очевидно, выдаст больше, чем одну страницу с данными именем и фамилией. На странице может быть найден некоторый никнейм, вписываем его в профиль с теми именем и фамилией. Получаем некоторое множество профилей, уже имеющих при себе имя, фамилию, никнейм. На следующей итерации мы можем найти для некоторых таких профилей соответствие, положим, в телеграме, и, положим, что по никнейму. Но мы не можем утверждать, что человек один и тот же. Поэтому мы строим некоторый граф соответствий, вершины его - профили, ребра имеют пометки, а именно критерий соответствия. На каждой следующей итерации граф наполняется новыми профилями. По итогу работы программа проранжирует наиболее богатые соответствиями цепочки профилей из разных ресурсов, ведь можно полагать, что это один человек, если есть достаточно соответствий на разных ресурсах.

Добавление ресурса

Создаем класс в пакете 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

Доступные контексты:

  • config

    Базовый контекст, доступен в top-level файла.

  • profiles

    Доступен в контекстах

    • config

    Методы

    • profile

      Задает стартовые данные для поиска.

      • Параметры
        • resourceUrl: String? = null
        • name: String? = null
        • surname: String? = null
        • username: String? = null
        • email: String? = null
        • phone: String? = null
      • Пример использования
      profile(
               name = "Вадим",
               surname = "Мостовой"
           )
  • parameters

    Доступен в контекстах

    • config
  • resource(<id>)

    Доступен в контекстах

    • parameters

    Методы

    • set (infix)

      Устанавливает значения внешнего параметра для ресурса с идентификатором id.

      • Параметры
        • parameterName: String
        • value
      • Пример использования
        "userId" set "239105736"

VK

Для поиска ВКонтакте необходимо авторизоваться.

  1. Переходим по ссылке
  2. Даем разрешение
  3. Копируем из строки браузера значения параметров access_token и user_id
    • ..&access_token=<ЗНАЧЕНИЕ>&..
    • ..&user_id=<ЗНАЧЕНИЕ>&..
  4. В файле конфигурации для VK указываем эти параметры
config {
    profiles {
        profile(
            name = "Иван",
            surname = "Иванов"
        )
    }

    /* ... */

    parameters {
        resource("vk") {
            "accessToken" set "ВАШЕ_ЗНАЧЕНИЕ"
            "userId" set "ВАШЕ_ЗНАЧЕНИЕ"
        }
    }
}

About

Person Search API. University project.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors