cli + tui to publish to leaflet (wip) & manage tasks, notes & watch/read lists 馃崈
charm leaflet readability golang
29
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 204 lines 4.3 kB view raw view rendered
1--- 2title: Open Library API 3sidebar_label: Open Library 4sidebar_position: 1 5description: Book metadata via Open Library API integration. 6--- 7 8# Open Library API 9 10Noteleaf integrates with [Open Library](https://openlibrary.org) to fetch book metadata, search for books, and enrich your reading list. 11 12## Overview 13 14Open Library provides: 15 16- Book search by title, author, ISBN 17- Work and edition metadata 18- Author information 19- Cover images 20- Subject classifications 21- Publication details 22 23## Configuration 24 25No API key required. Open Library is a free, open API service. 26 27Optional user agent configuration is handled automatically: 28 29```toml 30# .noteleaf.conf.toml 31# No configuration needed for Open Library 32``` 33 34## Rate Limiting 35 36Open Library enforces rate limits: 37 38- 180 requests per minute 39- 3 requests per second 40- Burst limit: 5 requests 41 42Noteleaf automatically manages rate limiting to stay within these boundaries. 43 44## Book Search 45 46Search for books from the command line: 47 48```sh 49noteleaf book search "Design Patterns" 50noteleaf book search "Neal Stephenson" 51``` 52 53Interactive selection shows: 54 55- Title 56- Author(s) 57- First publication year 58- Edition count 59- Publisher information 60 61## Book Metadata 62 63When adding a book, Noteleaf fetches: 64 65- Title 66- Author names 67- Publication year 68- Edition information 69- Subjects/genres 70- Description (when available) 71- Cover ID 72 73## API Endpoints 74 75### Search Endpoint 76 77``` 78GET https://openlibrary.org/search.json 79``` 80 81Parameters: 82 83- `q`: Search query 84- `offset`: Pagination offset 85- `limit`: Results per page 86- `fields`: Requested fields 87 88### Work Endpoint 89 90``` 91GET https://openlibrary.org/works/{work_key}.json 92``` 93 94Returns detailed work information including authors, description, subjects, and covers. 95 96## Data Mapping 97 98Open Library data maps to Noteleaf book fields: 99 100| Open Library | Noteleaf Field | 101|--------------|----------------| 102| title | Title | 103| author_name | Author | 104| first_publish_year | Notes (included) | 105| edition_count | Notes (included) | 106| publisher | Notes (included) | 107| subject | Notes (included) | 108| cover_i | Notes (cover ID) | 109 110## Example API Response 111 112Search result document: 113 114```json 115{ 116 "key": "/works/OL45804W", 117 "title": "Design Patterns", 118 "author_name": ["Erich Gamma", "Richard Helm"], 119 "first_publish_year": 1994, 120 "edition_count": 23, 121 "isbn": ["0201633612", "9780201633610"], 122 "publisher": ["Addison-Wesley"], 123 "subject": ["Software design", "Object-oriented programming"], 124 "cover_i": 8644882 125} 126``` 127 128## Limitations 129 130### No Direct Page Count 131 132Open Library doesn't consistently provide page counts in search results. Use the interactive editor to add page counts manually if needed. 133 134### Author Keys vs Names 135 136Work endpoints return author keys (`/authors/OL123A`) rather than full names. Noteleaf displays available author names from search results. 137 138### Cover Images 139 140Cover IDs are stored but not automatically downloaded. Future versions may support local cover image caching. 141 142## Error Handling 143 144### Network Issues 145 146```sh 147noteleaf book search "query" 148# Error: failed to connect to Open Library 149``` 150 151Check internet connection and Open Library status. 152 153### Rate Limit Exceeded 154 155Noteleaf automatically waits when approaching rate limits. If you see delays, this is normal behavior. 156 157### No Results 158 159```sh 160noteleaf book search "very obscure title" 161# No results found 162``` 163 164Try: 165 166- Different search terms 167- Author names instead of titles 168- ISBNs for specific editions 169 170## API Service Architecture 171 172Implementation in `internal/services/services.go`: 173 174```go 175type BookService struct { 176 client *http.Client 177 limiter *rate.Limiter 178 baseURL string 179} 180``` 181 182Features: 183 184- Automatic rate limiting 185- Context-aware requests 186- Proper error handling 187- Timeout management (30s) 188 189## Custom User Agent 190 191Noteleaf identifies itself to Open Library: 192 193``` 194User-Agent: Noteleaf/v{version} (contact: info@stormlightlabs.org) 195``` 196 197This helps Open Library track API usage and contact developers if needed. 198 199## Resources 200 201- [Open Library API Documentation](https://openlibrary.org/dev/docs/api/books) 202- [Open Library Search](https://openlibrary.org/dev/docs/api/search) 203- [Open Library Covers](https://openlibrary.org/dev/docs/api/covers) 204- [Rate Limiting Policy](https://openlibrary.org/developers/api)