HyperLEDA / db-app

Backend for HyperLeda astronomical database of extragalactic objects
https://hyperleda.github.io/db-app/
MIT License
0 stars 0 forks source link

Интеграция с NASA ADS #87

Closed Kraysent closed 2 months ago

Kraysent commented 4 months ago

Нам нужно при загрузке таблиц на нулевой уровень (пока что это делается в рамках #83 и #61) уметь определять библиографию, к которой относится таблица. В astroquery есть API для этого, можно воспользоваться им: https://astroquery.readthedocs.io/en/latest/nasa_ads/nasa_ads.html

ADS - астрономическая база данных с информацией о статьях, авторах и прочем. Потыкаться можно вот тут: https://ui.adsabs.harvard.edu/ - у них очень мощный поиск по большому количеству полей, но начать можно, просто введя в поисковую строку заголовок статьи.

Каждой статье/книге/заметке, попавшей в ADS, присваивается уникальный идентификатор - bibcode, имеющий формат 2024A&A...684A..52K. Формируется он по правилам, которые описаны тут: https://ui.adsabs.harvard.edu/help/actions/bibcode (это для общего развития, для задачи не так важно).

Сейчас мы при загрузке на нулевой уровень хотим получать помимо самих данных ещё и источник этих данных - библиографию, откуда пришли данные. Для этого мы хотим запрашивать у пользователя bibcode, а потом идти в ADS и получить более подробную информацию об источнике - заголовок, список авторов и год печати статьи.

Для этих и большого числа других целей у ADS есть сетевое API: https://ui.adsabs.harvard.edu/help/api/. Им можно пользоваться напрямую, а можно при помощи модуля astroquery: https://astroquery.readthedocs.io/en/latest/nasa_ads/nasa_ads.html. Туда нужно сделать запрос, получить ответ и записать его в базу, вызвав метод репозитория: https://github.com/HyperLEDA/db-app/blob/master/app/data/repositories/common_repository.py#L22

Начать стоит с метода создания библиографии: https://github.com/HyperLEDA/db-app/blob/master/app/presentation/server/handlers/create_source.py. Сейчас он принимает на вход четыре параметра - bibcode, title, authors и year. Хочется, чтобы, если в запросе пришёл bibcode, то метод сам сходил в ADS, подтянул оттуда title, authors и year и записал в базу их, проигнорировав те параметры, что прислал пользователь. Если bibcode нет, но есть что-либо другое, нужно записать в БД присланные данные с bibcode = NULL.

Для походов в ADS нужно будет сгенерировать себе токен (нужно будет зарегистрироваться): https://ui.adsabs.harvard.edu/user/settings/token. Его нужно будет положить в переменную окружения ADS_TOKEN и пользоваться ей, токены в репозиторий коммитить не стоит, они у каждого свои и должны держаться приватно.