דלג לתוכן הראשי

דוגמאות

זמין בתוכניותProResearch

ארבע דוגמאות קטנות שמשתמשות בנתיבים אמיתיים. הן משתמשות ב-curl וב-Node 18 ומעלה, שבו fetch מובנה, וללא חבילות. כל אחת אומרת אילו הרשאות המפתח צריך, ולכן צרו מפתח עם אלה בלבד. ראו אימות ומפתחות API.

הגדירו את המפתח פעם אחת במעטפת:

export READSIRA_KEY="pk_..."

הרשאות: read:collections, write:bookmarks.

סימנייה צריכה title ואת ה-collectionId של האוסף שהיא נכנסת אליו. קודם רשמו את האוספים שלכם ובחרו אחד:

curl "https://api.readsira.com/api/v1/collections" \
-H "Authorization: Bearer $READSIRA_KEY"

התשובה מכילה את האוספים שלכם ב-data. העתיקו את ה-id של אחד, ואז שמרו את הקישור:

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"]
}'

התשובה מכילה את הסימנייה החדשה ב-data, כולל ה-id שלה. tags הוא אופציונלי, עד 20 תגיות. שמירת קישור נספרת כבקשה במגבלה היומית שלכם.

קריאת ההדגשות של פריט שמור​

הרשאה: read:library.

החיפוש מוצא את הפריט ונותן את ה-documentId שלו. קריאת המסמך מחזירה את ה-highlights, ה-tags וה-notes שלכם לצד הטקסט.

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 מבקש תו אחד של טקסט, כי כאן אתם רוצים רק את ההדגשות. הדגשות מגיעות בכל תשובה. כדי לקרוא את כל הטקסט, ראו עימוד.

שאילת שאלה עם ציטוטים​

הרשאה: ask:library. זה משתמש בתקציב ה-AI שלכם ונספר בתשובות שאתם מקבלים בכל חודש.

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?" }'

התשובה ב-data מכילה answer, עם סימונים כמו [1], ואת citations. הסימון [n] מצביע על citations[n-1], שיש בו את ה-title, ה-url וה-quote שעליו היא מבוססת. verified הוא true כשהציטוט נמצא בקטע המצוטט.

סנכרון הספרייה לקובץ​

הרשאה: read:bookmarks.

הסקריפט הזה קורא כל סימנייה, עמוד אחר עמוד, וכותב אותן ל-readsira-library.json. הוא ממתין כשה-API אומר להאט. הריצו אותו עם 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`);

כל הרצה קוראת את כל הספרייה, לכן הריצו אותו לעיתים קרובות כמה שצריך ולא יותר. לעותק של הכול, כולל הערות והדגשות, בקובץ אחד, השתמשו בייצוא בפרטיות והנתונים שלכם.

טיפים​

  • בדקו נתיב במדריך העזר לפני שאתם בונים עליו.
  • טפלו ב-429 כמו בסקריפט הסנכרון, ועצרו בשגיאות אחרות. ראו מגבלות קצב ושגיאות.
  • הרחיקו מפתחות מסקריפטים שאתם משתפים. קראו אותם מהסביבה.