Я создал простое приложение, в которое вставляю данные в приложение Nextcloud под названием «Таблицы». У этого приложения есть API, поэтому я вставляю данные через него.
Это работало, пока я не изменил тип трех столбцов с «текста» на «ссылку». Это столбцы «Резервная ссылка», «Восстановить ссылку» и «Доказательная ссылка». Каждый столбец должен содержать ссылку на файл внутри моего Nextcloud. Я изменил тип, потому что хочу щелкнуть текст, чтобы перейти в браузер и отобразить содержимое файла.
Код в основном создан искусственным интеллектом.
Подводя итог, если мой URL-адрес — https://nextcloud.example.com/1/asjklDHBkauBS, в столбце отображается только https://nextcloud.example.c. Я добавил несколько трассировок, чтобы проверить содержимое отправляемого URL-адреса, и оно кажется правильным, но когда я смотрю на него в Nextcloud, URL-адрес обрезается.
Упрощенная версия кода:
import requests
import json
import datetime
import logging
NC_BASE_URL = "https://nextcloud.example.com"
TABLES_API_BASE = f"{NC_BASE_URL}/apps/tables/api/1/tables"
def get_column_mapping(table_id, auth_config):
"""Retrieve the mapping between column names and their IDs."""
try:
auth = auth_config['auth']
headers = auth_config['headers']
response = requests.get(f"{TABLES_API_BASE}/{table_id}/columns", headers=headers, auth=auth,
verify=auth_config['verify'], timeout=auth_config['timeout'])
if response.status_code == 200:
columns = response.json()
mapping = {col['title'].strip(): str(col['id']) for col in columns}
return mapping
else:
print(f"Error retrieving columns: {response.status_code} - {response.text}")
return None
except Exception as e:
logging.error(f"Error connecting to Nextcloud: {e}")
return None
def register_backup(nc_user, nc_credential, auth_config, table_id, link_backup, link_restore, link_evidence, file_name):
"""Insert a new row into a Nextcloud Tables table."""
mapping = get_column_mapping(table_id, auth_config)
if not mapping:
return False
current_date = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
payload_data = {
mapping.get("Date"): current_date,
mapping.get("Backup Link"): link_backup,
mapping.get("Restore Link"): link_restore,
mapping.get("Evidence Link"): link_evidence,
mapping.get("FileName"): file_name,
}
payload_data_clean = {k: v for k, v in payload_data.items() if k and v is not None and v != ""}
payload = {"data": payload_data_clean}
print(json.dumps(payload, indent=2, ensure_ascii=False))
try:
response = requests.post(f"{TABLES_API_BASE}/{table_id}/rows", json=payload, **auth_config)
if response.status_code in [200, 201]:
logging.info(f"Backup successfully registered: {file_name}")
return True
else:
logging.error(f"Error registering backup ({response.status_code}): {response.text}")
return False
except Exception as e:
logging.error(f"Connection error: {e}")
return False