API - Hinzufügen/Löschen von Song-Links funktioniert nicht?
-
Hallo zusammen,
ich generiere automatisch Audioübungsdateien und speichere sie in Nextcloud. Anschließend erstelle ich einen Link zu diesen Audiodateien, der über die ChurchTools API zu einem Song hinzugefügt werden soll. Leider funktioniert dieser letzte Schritt nicht.
Ich habe ein einfaches Testskript geschrieben (siehe Code), das einen neuen Link im ersten Arrangement für den Song "Test-Song" hinzufügen soll. Hat jemand eine Idee, warum es nicht funktioniert? Response ist immer in Ordnung, aber online befindet sich kein neuer Link. Wie lösche ich Links?#!/usr/bin/env python3 """ Minimal ChurchTools API test script for adding links to song arrangements This script demonstrates the issue with adding links via REST API """ import requests import json # 🔧 Configuration - UPDATE THESE VALUES CHURCH_TOOLS_URL = "https://myChurch.church.tools" CHURCH_TOOLS_USERNAME = "myEmail" CHURCH_TOOLS_PASSWORD = "password" # Change to your password TEST_SONG_NAME = "Test-Song" # Change to existing song name class ChurchToolsAPITest: def __init__(self): self.base_url = CHURCH_TOOLS_URL self.username = CHURCH_TOOLS_USERNAME self.password = CHURCH_TOOLS_PASSWORD self.session = requests.Session() self.logged_in = False def login(self): """Login to ChurchTools API""" login_url = f"{self.base_url}/api/login" login_data = { "username": self.username, "password": self.password } try: response = self.session.post(login_url, json=login_data) if response.status_code == 200: self.logged_in = True print("✅ Login successful") return True else: print(f"❌ Login failed: {response.status_code} - {response.text}") return False except Exception as e: print(f"❌ Login error: {e}") return False def get_song_by_name(self, song_name): """Get song data by name""" if not self.logged_in: if not self.login(): return None url = f"{self.base_url}/api/songs" params = {"name": song_name, "page": 1, "limit": 1} try: response = self.session.get(url, params=params) if response.status_code == 200: data = response.json() if data.get('data') and len(data['data']) > 0: return data['data'][0] return None except Exception as e: print(f"❌ Error getting song: {e}") return None def add_link_to_arrangement(self, song_name, link_name, link_url): """Attempt to add a link to song arrangement""" print(f"\n🎵 Testing add link for song: '{song_name}'") # Get song data song = self.get_song_by_name(song_name) if not song: print(f"❌ Song '{song_name}' not found") return False song_id = song['id'] arrangement = song['arrangements'][0] # Get first arrangement arrangement_id = arrangement['id'] print(f"📊 Song ID: {song_id}, Arrangement ID: {arrangement_id}") print(f"🔗 Current links count: {len(arrangement.get('links', []))}") # Create new link object new_link = { "name": link_name, "filename": link_url, "fileUrl": link_url, "domainType": "arrangement", "domainId": str(arrangement_id) } # Add new link to existing links existing_links = arrangement.get('links', []) updated_links = existing_links + [new_link] # Prepare payload for arrangement update payload = { "id": arrangement_id, "name": arrangement["name"], "key": arrangement.get("key", ""), "tempo": arrangement.get("tempo", arrangement.get("bpm", 0)), "songId": song_id, "arrangementId": arrangement_id, "links": updated_links, "description": arrangement.get("description", arrangement.get("note", "")) } # Try to update arrangement with new link url = f"{self.base_url}/api/songs/{song_id}/arrangements/{arrangement_id}" print(f"🚀 Making PUT request to: {url}") print(f"📦 Payload: {json.dumps(payload, indent=2)}") try: response = self.session.put(url, json=payload) print(f"📋 Response Status: {response.status_code}") print(f"📄 Response Body: {response.text}") if response.status_code == 200: print(f"✅ Successfully added link '{link_name}'") return True else: print(f"❌ Failed to add link. Status: {response.status_code}") return False except Exception as e: print(f"❌ Error during request: {e}") return False def main(): """Main test function""" print("🔧 ChurchTools API - Add Link Test Script") print("=" * 50) # Initialize API client api = ChurchToolsAPITest() # Test adding a link test_link_name = "Test Link" test_link_url = "https://www.youtube.com/watch?v=4GthZbt1lPo" success = api.add_link_to_arrangement(TEST_SONG_NAME, test_link_name, test_link_url) if success: print("\n✅ Test completed successfully!") else: print("\n❌ Test failed - please check the output above") print("\n🆘 Questions for ChurchTools forum:") print("1. Is it possible to add links to arrangements via REST API?") print("2. What is the correct API endpoint and payload structure?") print("3. Are there any special permissions required?") if __name__ == "__main__": main() # Requirements for this script: # pip install requests # # Update the configuration variables at the top of this file: # - CHURCH_TOOLS_URL # - CHURCH_TOOLS_USERNAME # - CHURCH_TOOLS_PASSWORD # - TEST_SONG_NAME
Vielen Dank im Voraus!
-
@Escabix Die Links werden zwar als Teil des Arrangements zurückgegeben (weil es nützlich ist), aber gesetzt können sie darüber nicht werden.
Schau mal unter "POST /api/files/song_arrangement/<arrangement_Id>/link". Dort findest du, was du suchst.