zotero-ts-api
Version:
A TypeScript API wrapper for Zotero
167 lines (133 loc) • 4.66 kB
Markdown
# Zotero-TS-API
## Introduction
Zotero-TS-API is a TypeScript library that provides an intuitive interface for interacting with the Zotero API. Zotero is a reference management platform used by researchers, students, and professionals to organize their sources. This library allows you to manage libraries, collections, items, tags, and creators directly via API calls.
### Key Features:
Connect to a Zotero library (user or group).
Manage collections: create, update, delete, and retrieve.
Manage items: create, update, delete, and retrieve.
Manipulate metadata: creators and tags.
Quick Start
## Installation
Ensure you have Node.js installed, then install the library via npm:
```bash
npm install zotero-ts-api
```
## Configuration
Create a `.env` file at the root of your project to store your Zotero credentials:
```bash
ZOTERO_API_KEY=your_api_key
ZOTERO_GROUP_ID=your_group_id
```
## Example Usage
Here is a simple example to connect to a Zotero library and retrieve collections and items:
```typescript
import { config } from 'dotenv';
import { Library } from 'zotero-ts-api';
// Load environment variables
config();
const apiKey = process.env.ZOTERO_API_KEY;
const groupId = process.env.ZOTERO_GROUP_ID;
const libraryType = 'groups'; // or 'users', then use a user API Key
(async () => {
const library = new Library(apiKey, id, type);
await library.connect();
console.log(`Connected to library: ${library.name}`);
const collections = await library.getCollections();
console.log(`Found ${collections.length} collections`);
const items = await library.getAllItems();
console.log(`Found ${items.length} items`);
items.forEach(item => {
console.log(`Item Key: ${item.key}`);
console.log(`Title: ${item.title}`);
console.log(`Item Type: ${item.itemType}`);
// item.delete(); // Suppression de l'élément
});
})();
```
## References
### Main Classes
`Library`
Represents a Zotero library.
- Constructor :
```typescript
constructor(apiKey: string, libId: string, libraryType: 'users' | 'groups')
```
- Methods:
- connect(): Promise<void>: Connect to the library.
- getCollections(): Promise<ZCollection[]>: Retrieve all collections.
- getAllItems(): Promise<Item[]>: Retrieve all items.
- createCollection(name: string, parentCollection?: string): Promise<ZCollection>: - Create a new collection.
- createItem(itemData: Partial<IItemData>): Promise<Item>: Create a new item.
`ZCollection`
Represents a collection in Zotero.
- Constructor
```typescript
constructor(data: ICollectionData, apiKey: string, id: string, type: 'users' | 'groups')
```
- Methods:
- getItems(): Promise<Item[]>: Retrieve items in the collection.
- update(): Promise<void>: Update the collection.
- delete(): Promise<void>: Delete the collection.
`Item`
Represents an item (bibliographic reference).
- Constructor
```typescript
constructor(data: IItemData, apiKey: string, id: string, type: 'users' | 'groups')
```
- Methods:
- update(): Promise<void>: Update the item.
- delete(): Promise<void>: Delete the item.
- addCreator(creator: ZCreator): void: Add a creator.
- addTag(tag: ZTag): void: Add a tag.
`ZCreator`
Represents a creator (author, editor, etc.).
- Constructor :
```typescript
constructor(data: ICreatorData)
```
`ZTag`
Represents a tag associated with an item.
- Constructor :
```typescript
constructor(data: ITagData)
```
Below is a diagram illustrating the relationships between the main entities:
```mermaid
classDiagram
class Library {
+connect(): Promise<void>
+getCollections(): Promise<ZCollection[]>
+getAllItems(): Promise<Item[]>
+createCollection(name: string, parentCollection?: string): Promise<ZCollection>
+createItem(itemData: Partial<IItemData>): Promise<Item>
}
class ZCollection {
+getItems(): Promise<Item[]>
+update(): Promise<void>
+delete(): Promise<void>
}
class Item {
+update(): Promise<void>
+delete(): Promise<void>
+addCreator(creator: ZCreator): void
+addTag(tag: ZTag): void
}
class ZCreator {
+creatorType: string
+firstName: string
+lastName: string
}
class ZTag {
+tag: string
+type: number
}
Library --> ZCollection : "has many"
ZCollection --> Item : "contains"
Item --> ZCreator : "has many"
Item --> ZTag : "has many"
```