1. الرئيسية
  2. الأدلة
  3. API تلخيص PDF باستخدام JavaScript

تلخيص ملفات PDF باستخدام JavaScript وNode.js — دليل واجهة برمجة التطبيقات (API)

استدعِ واجهة برمجة التطبيقات (API) الخاصة بـ PDF Summarizer من Node.js (أو أي بيئة تشغيل JavaScript جانب الخادم) باستخدام fetch وFormData فقط. يغطي هذا الدليل الطلب الأول، والتدفق، ونقطة نهاية Express مصغرة لتطبيقك، ومعالجة الأخطاء.

حقائق أساسية
  • يعمل مع Node.js 18+ (دوال fetch وFormData وBlob المدمجة) — لا حاجة لأي حزمة SDK.
  • POST https://pdf-summarize.com/api/summarize.php، بصيغة multipart/form-data، حقل file، وترويسة Authorization: Bearer sk_....
  • الخيارات: length وformat وoutputLang وincludeKeywords.
  • أضف ?stream=1 واقرأ محتوى الاستجابة على شكل أحداث مرسلة من الخادم (Server-Sent Events).
  • لا تكشف مفتاحك أبدًا في كود المتصفح — قم بتوجيه الطلبات عبر الخادم الخاص بك.
تم التحديث قراءة في 2 دقيقة بواسطة فريق PDF Summarizer

طلبك الأول في Node.js

  1. احصل على مفتاح API مجانيسجل حساباً جديداً وانسخه من لوحة التحكم الخاصة بك.
  2. قم بتخزينه في متغيّر بيئيPDF_SUMMARIZE_KEY.
  3. أنشئ نموذج بيانات (FormData)أضف ملف PDF كـ Blob تحت الحقل file.
  4. أرسل الطلب عبر POST واقرأ بصيغة JSON.
// summarize.mjs — node summarize.mjs report.pdf
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';

const API_URL = 'https://pdf-summarize.com/api/summarize.php';
const KEY = process.env.PDF_SUMMARIZE_KEY;

export async function summarizePdf(path, { length = 'medium', format = 'bullets', outputLang = 'auto' } = {}) {
  const form = new FormData();
  form.append('file', new Blob([await readFile(path)], { type: 'application/pdf' }), basename(path));
  form.append('length', length);
  form.append('format', format);
  form.append('outputLang', outputLang);

  const res = await fetch(API_URL, {
    method: 'POST',
    headers: { Authorization: `Bearer ${KEY}` },
    body: form,
    signal: AbortSignal.timeout(180_000),
  });
  const data = await res.json();
  if (!res.ok || !data.success) throw new Error(`${res.status}: ${data.error ?? JSON.stringify(data)}`);
  return data;
}

const result = await summarizePdf(process.argv[2]);
console.log(result.summary);
console.log(`${result.page_count} pages, ${result.processing_time}s, ${result.requests_remaining} requests left`);

تدفق الملخص (Streaming)

export async function streamSummary(path, onText) {
  const form = new FormData();
  form.append('file', new Blob([await readFile(path)], { type: 'application/pdf' }), basename(path));
  form.append('length', 'long');

  const res = await fetch(API_URL + '?stream=1', { method: 'POST', headers: { Authorization: `Bearer ${KEY}` }, body: form });
  if (!res.ok) throw new Error(`HTTP ${res.status}`);

  const decoder = new TextDecoder();
  let buffer = '';
  for await (const chunk of res.body) {
    buffer += decoder.decode(chunk, { stream: true });
    const lines = buffer.split('\n');
    buffer = lines.pop();
    for (const line of lines) {
      if (!line.startsWith('data: ')) continue;
      const payload = line.slice(6);
      if (payload === '[DONE]') return;
      const event = JSON.parse(payload);
      if (event.error) throw new Error(event.error);
      if (event.type === 'summary') onText(event.content);
    }
  }
}

await streamSummary('paper.pdf', (t) => process.stdout.write(t));

نقطة نهاية Express لتطبيقك الخاص

تقوم الواجهة الأمامية لديك برفع الملف إلى خادمك، والذي يضيف بدوره المفتاح ويرسل الملف:

import express from 'express';
import multer from 'multer';

const app = express();
const upload = multer({ limits: { fileSize: 20 * 1024 * 1024 } });

app.post('/summarize', upload.single('file'), async (req, res) => {
  if (!req.file) return res.status(400).json({ error: 'No file' });
  const form = new FormData();
  form.append('file', new Blob([req.file.buffer], { type: 'application/pdf' }), req.file.originalname);
  form.append('length', req.body.length ?? 'medium');
  const r = await fetch('https://pdf-summarize.com/api/summarize.php', {
    method: 'POST', headers: { Authorization: `Bearer ${process.env.PDF_SUMMARIZE_KEY}` }, body: form,
  });
  res.status(r.status).json(await r.json());
});

app.listen(3000);

معالجة الأخطاء

الحالة المعنى
400 ملف مفقود، أو ليس ملف PDF، أو تم تجاوز حد الصفحات
401 مفتاح مفقود أو غير صالح
413 حجم الملف كبير جداً
422 لا يوجد نص قابل للقراءة في ملف PDF
429 تم بلوغ حد الاستخدام أو الحصة المسموح بها — أعد المحاولة لاحقاً مع تباعد الطلبات
500 خطأ مؤقت في التلخيص — أعد المحاولة
شاهد محرك التلخيص قيد العمل أولاًجرب الأداة المجانية على الويب باستخدام أحد ملفات PDF الخاصة بك.
جرب الأداة →

الأسئلة الشائعة

هل يمكنني استدعاء واجهة برمجة التطبيقات (API) مباشرة من المتصفح؟

من الناحية التقنية نعم، ولكن سيكون مفتاحك مرئيًا لأي شخص. قم بتوجيه الطلبات عبر الواجهة الخلفية (Backend) كما في مثال Express.

هل تعمل مع Deno أو Bun أو Cloudflare Workers؟

نعم — أي بيئة تشغيل تدعم fetch وFormData القياسية ستعمل بنفس الطريقة تمامًا.

هل توجد حزمة SDK خاصة بلغة TypeScript؟

ليس بعد. واجهة برمجة التطبيقات عبارة عن نقطة نهاية واحدة بصيغة multipart، لذا فإن غلافاً برمجياً بسيطاً ومكتوباً (Typed wrapper) حول fetch يكفي تمامًا.

أين أجد الوثائق والمراجع الكاملة؟

في توثيق واجهة برمجة التطبيقات (API)، والذي يضم كافة المعلمات والأمثلة بعدة لغات.

كتبه فريق PDF Summarizer، الذين يقومون بتطوير وتشغيل آلية الاستخراج والتلخيص وراء هذا الموقع. نختبر كل طريقة موصوفة هنا على مستندات حقيقية. آخر مراجعة في ١٩ أكتوبر ٢٠٢٦. هل وجدت خطأ؟ أخبرنا بذلك.