Exemples
Disponible avecProResearch
Quatre petits exemples qui utilisent de vraies routes. Ils utilisent curl et Node 18 ou plus
récent, qui intègre fetch, sans aucun paquet. Chacun indique les portées dont la clé a besoin :
créez donc une clé avec celles-là uniquement. Voir
Authentification et clés d'API.
Définissez votre clé une fois dans le shell :
export READSIRA_KEY="pk_..."
Enregistrer un lien
Portées : read:collections, write:bookmarks.
Un marque-page a besoin d'un title et du collectionId de la collection dans laquelle il va.
Listez d'abord vos collections et choisissez-en une :
curl "https://api.readsira.com/api/v1/collections" \
-H "Authorization: Bearer $READSIRA_KEY"
La réponse contient vos collections dans data. Copiez l'id de l'une d'elles, puis enregistrez le
lien :
curl -X POST "https://api.readsira.com/api/v1/bookmarks" \
-H "Authorization: Bearer $READSIRA_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/grid-lab",
"title": "Grid Lab: long-duration storage",
"collectionId": "PUT-A-COLLECTION-ID-HERE",
"tags": ["energy"]
}'
La réponse contient le nouveau marque-page dans data, avec son id. tags est facultatif, avec
20 étiquettes au maximum. Enregistrer un lien compte comme une requête dans votre limite
quotidienne.
Lire les surlignages d'un élément enregistré
Portée : read:library.
La recherche trouve l'élément et donne son documentId. Lire le document renvoie vos highlights,
tags et notes à côté du texte.
const headers = { Authorization: `Bearer ${process.env.READSIRA_KEY}` };
const search = await fetch(
'https://api.readsira.com/rest/v2/search?' + new URLSearchParams({ q: 'long-duration storage', limit: '1' }),
{ headers },
).then((r) => r.json());
const hit = search.data.results[0];
if (!hit) throw new Error('Nothing found');
const doc = await fetch(
`https://api.readsira.com/rest/v2/documents/${hit.documentId}?maxChars=1`,
{ headers },
).then((r) => r.json());
console.log(doc.data.title);
for (const h of doc.data.highlights) console.log('-', h.text, h.note ? `(${h.note})` : '');
maxChars=1 demande un seul caractère de texte, car ici seuls les surlignages vous intéressent. Les
surlignages sont fournis avec chaque réponse. Pour lire tout le texte, voir
Pagination.
Poser une question avec citations
Portée : ask:library. Cela utilise votre budget d'IA et compte dans les réponses dont vous
disposez chaque mois.
curl -X POST "https://api.readsira.com/rest/v2/ask" \
-H "Authorization: Bearer $READSIRA_KEY" \
-H "Content-Type: application/json" \
-d '{ "question": "What did I save about iron-air batteries?" }'
La réponse dans data contient answer, avec des repères comme [1], et citations. Le repère
[n] renvoie à citations[n-1], qui contient le title, l'url et la quote sur laquelle il
s'appuie. verified vaut true quand la citation a été retrouvée dans le passage cité.
Synchroniser votre bibliothèque vers un fichier
Portée : read:bookmarks.
Ce script lit chaque marque-page, une page à la fois, et les écrit dans readsira-library.json. Il
attend quand l'API demande de ralentir. Lancez-le avec node sync.mjs.
import { writeFile } from 'node:fs/promises';
const BASE = 'https://api.readsira.com';
const headers = { Authorization: `Bearer ${process.env.READSIRA_KEY}` };
async function get(path) {
for (;;) {
const res = await fetch(BASE + path, { headers });
if (res.status === 429) {
const wait = Number(res.headers.get('retry-after') ?? 60);
console.log(`Rate limited, waiting ${wait} seconds`);
await new Promise((resolve) => setTimeout(resolve, wait * 1000));
continue;
}
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
return (await res.json()).data;
}
}
const bookmarks = [];
for (let page = 1; ; page++) {
const data = await get(`/api/v1/bookmarks?page=${page}&limit=100`);
bookmarks.push(...data.bookmarks);
console.log(`Page ${page}: ${bookmarks.length} of ${data.total}`);
if (!data.hasMore) break;
}
await writeFile('readsira-library.json', JSON.stringify(bookmarks, null, 2));
console.log(`Wrote ${bookmarks.length} bookmarks`);
Chaque exécution lit toute la bibliothèque : lancez-la aussi souvent que nécessaire, pas plus. Pour une copie de tout, notes et surlignages compris, dans un seul fichier, utilisez l'exportation de Confidentialité et vos données.
Conseils
- Vérifiez une route dans la référence avant de bâtir dessus.
- Gérez
429comme dans le script de synchronisation, et arrêtez-vous sur les autres erreurs. Voir Limites de débit et erreurs. - Gardez les clés hors des scripts que vous partagez. Lisez-les depuis l'environnement.