Як автоматизувати оновлення даних у Dataverse
Додано: П'ят серпня 01, 2025 8:49 am
Dataverse підтримує повноцінний REST API для інтеграції та автоматизації роботи з наборами даних. Це дозволяє:
• автоматично оновлювати файли у вже опублікованих версіях;
• додавати нові версії наборів;
• змінювати метадані;
• створювати нові набори з CI/CD або наукових серверів.
У цій темі — докладна інструкція, як налаштувати автоматичне оновлення даних у Dataverse за допомогою API та Python.
--------------------------------------------------------------------------------------------------------------
1. Увійдіть у свій обліковий запис Dataverse (наприклад, https://dataverse.harvard.edu або власна інстанція).
2. Перейдіть у “Account Settings” → “API Token”.
3. Згенеруйте або скопіюйте свій токен.
4. Збережіть токен в `.env` файлі або як змінну середовища для безпеки.
Приклад:
Код: Виділити все
export DATAVERSE_TOKEN=abc123xyz456
• Дізнайтесь persistent ID (DOI) або internal ID набору, який ви хочете оновлювати.
• Ви можете отримати список своїх наборів через API або у вебінтерфейсі.
Приклад DOI: `doi:10.5072/FK2/ABCDEFG`
------------------------------------------------------------------------------------------------------------------
Ось простий скрипт для:
• оновлення файлу `data.csv` у вже опублікованому наборі;
• створення нової версії.
Код: Виділити все
import os
import requests
BASE_URL = "https://dataverse.example.org"
API_TOKEN = os.getenv("DATAVERSE_TOKEN")
PERSISTENT_ID = "doi:10.5072/FK2/ABCDEFG"
FILE_PATH = "data.csv"
headers = {
"X-Dataverse-key": API_TOKEN
}
# Крок 1: створити нову версію як чернетку
resp = requests.post(
f"{BASE_URL}/api/datasets/:persistentId/actions/:version?persistentId={PERSISTENT_ID}",
headers=headers
)
# Крок 2: завантажити новий файл
files = {
'file': (os.path.basename(FILE_PATH), open(FILE_PATH, 'rb')),
'jsonData': (None, '{"description":"Оновлений файл даних"}')
}
upload = requests.post(
f"{BASE_URL}/api/datasets/:persistentId/add?persistentId={PERSISTENT_ID}",
headers=headers,
files=files
)
# Крок 3: публікувати нову версію
publish = requests.post(
f"{BASE_URL}/api/datasets/:persistentId/actions/:publish?persistentId={PERSISTENT_ID}&type=major",
headers=headers
)
print("✅ Дані оновлено і опубліковано.")
-------------------------------------------------------------------------------------------------------------------------
Ви також можете:
• оновити поля заголовку, опису, авторів — через PUT-запит до API `/api/datasets/{id}/versions/:draft`
• додати changelog у README-файл або окреме поле опису
Код: Виділити все
PUT /api/datasets/{id}/versions/:draft
Content-Type: application/json
{
"title": "Набір даних - оновлення липень 2025",
"description": "Оновлення включає додані вимірювання, виправлення одиниць виміру..."
}
• Запускайте цей скрипт щоразу, коли файл `data.csv` оновлюється
• Налаштуйте GitHub Actions, GitLab CI, Travis або cron job на сервері лабораторії
Приклад у GitHub Actions:
- `.github/workflows/update.yml`
- дія: `on: push`
- викликає Python-скрипт із оновленням даних
--------------------------------------------------------------------------------------------------------------
• Dataverse API Documentation
• Dataverse Python Client
• PyDataverse (просунутий Python SDK)
• Demo Dataverse (тестове середовище)
-----------------------------------------------------------------------------------------------------------------
Автоматичне оновлення даних у Dataverse:
• полегшує регулярну публікацію нових даних
• підтримує прозорість та відтворюваність
• дозволяє підключити до репозиторію інструменти аналізу, лабораторії, сенсори