Hey there, fellow developer! Ready to dive into the world of Qwilr API integration? You're in for a treat. Qwilr's API is a powerful tool that lets you create, update, and manage beautiful, interactive documents programmatically. In this guide, we'll walk through building a Python integration that'll have you wielding Qwilr's capabilities like a pro.
Before we jump in, make sure you've got:
requests
library (pip install requests
)First things first, let's get you authenticated:
import requests API_KEY = 'your_api_key_here' BASE_URL = 'https://api.qwilr.com/v1' headers = { 'Authorization': f'Bearer {API_KEY}', 'Content-Type': 'application/json' }
Pro tip: Keep your API key secret! Consider using environment variables for added security.
Let's start with a simple GET request to test the waters:
response = requests.get(f'{BASE_URL}/user', headers=headers) if response.status_code == 200: print("Connection successful!") print(response.json()) else: print(f"Oops! Something went wrong: {response.status_code}")
Now for the fun part - creating pages:
payload = { "name": "My Awesome Qwilr Page", "sections": [ { "type": "text", "content": "Hello, Qwilr!" } ] } response = requests.post(f'{BASE_URL}/pages', json=payload, headers=headers) if response.status_code == 201: print("Page created successfully!") print(response.json()) else: print(f"Page creation failed: {response.status_code}")
Made a typo? No worries, let's update that page:
page_id = 'your_page_id_here' update_payload = { "name": "My Even More Awesome Qwilr Page", "sections": [ { "type": "text", "content": "Hello again, Qwilr!" } ] } response = requests.put(f'{BASE_URL}/pages/{page_id}', json=update_payload, headers=headers) if response.status_code == 200: print("Page updated successfully!") else: print(f"Update failed: {response.status_code}")
Let's fetch some data about our newly created masterpiece:
response = requests.get(f'{BASE_URL}/pages/{page_id}', headers=headers) if response.status_code == 200: page_data = response.json() print(f"Page Name: {page_data['name']}") print(f"Created At: {page_data['created_at']}") else: print(f"Failed to retrieve page data: {response.status_code}")
Always be prepared for the unexpected:
try: response = requests.get(f'{BASE_URL}/nonexistent-endpoint', headers=headers) response.raise_for_status() except requests.exceptions.HTTPError as err: print(f"HTTP error occurred: {err}") except Exception as err: print(f"An error occurred: {err}")
When dealing with lots of data, remember to paginate and respect rate limits:
def get_all_pages(): pages = [] page = 1 while True: response = requests.get(f'{BASE_URL}/pages?page={page}', headers=headers) if response.status_code == 200: data = response.json() pages.extend(data['pages']) if not data['has_more']: break page += 1 else: print(f"Failed to retrieve page {page}") break return pages all_pages = get_all_pages() print(f"Total pages retrieved: {len(all_pages)}")
Want to get notified when things change? Set up a webhook:
webhook_payload = { "url": "https://your-webhook-url.com", "events": ["page.published", "page.updated"] } response = requests.post(f'{BASE_URL}/webhooks', json=webhook_payload, headers=headers) if response.status_code == 201: print("Webhook created successfully!") else: print(f"Webhook creation failed: {response.status_code}")
Always test your integration thoroughly. Here's a simple unit test to get you started:
import unittest class TestQwilrAPI(unittest.TestCase): def test_get_user(self): response = requests.get(f'{BASE_URL}/user', headers=headers) self.assertEqual(response.status_code, 200) self.assertIn('id', response.json()) if __name__ == '__main__': unittest.main()
And there you have it! You've just built a solid foundation for your Qwilr API integration. Remember, this is just the beginning - there's so much more you can do with Qwilr's API. Keep exploring, keep coding, and most importantly, keep creating awesome Qwilr pages!
Happy coding, and may your API calls always return 200 OK! 🚀