> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> حمّل بيانات استخراج الويب والأتمتة من Apify إلى ClickHouse

# صِل Apify بـ ClickHouse

export const CommunityMaintainedBadge = () => {
  return <div className="CommunityMaintainedBadge">
            <div className="CommunityMaintainedIcon">
            <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 256 256">
                <path d="M244.8,150.4a8,8,0,0,1-11.2-1.6A51.6,51.6,0,0,0,192,128a8,8,0,0,1-7.37-4.89,8,8,0,0,1,0-6.22A8,8,0,0,1,192,112a24,24,0,1,0-23.24-30,8,8,0,1,1-15.5-4A40,40,0,1,1,219,117.51a67.94,67.94,0,0,1,27.43,21.68A8,8,0,0,1,244.8,150.4ZM190.92,212a8,8,0,1,1-13.84,8,57,57,0,0,0-98.16,0,8,8,0,1,1-13.84-8,72.06,72.06,0,0,1,33.74-29.92,48,48,0,1,1,58.36,0A72.06,72.06,0,0,1,190.92,212ZM128,176a32,32,0,1,0-32-32A32,32,0,0,0,128,176ZM72,120a8,8,0,0,0-8-8A24,24,0,1,1,87.24,82a8,8,0,1,0,15.5-4A40,40,0,1,0,37,117.51,67.94,67.94,0,0,0,9.6,139.19a8,8,0,1,0,12.8,9.61A51.6,51.6,0,0,1,64,128,8,8,0,0,0,72,120Z"></path>
            </svg>
        </div>
            تتم صيانته من قِبل المجتمع
        </div>;
};

<CommunityMaintainedBadge />

تُعدّ [Apify](https://apify.com/) منصة لاستخراج بيانات الويب والأتمتة. يمكنك إنشاء برامج سحابية بلا خوادم تُسمّى [**Actors**](https://docs.apify.com/platform/actors)، ثم تشغيلها وتوسيع نطاقها. تتولى Actors استخراج البيانات من مواقع الويب، والزحف على الويب، ومعالجة البيانات، أو أتمتة سير العمل. وينتج عن كل تشغيل لـ Actor مخرجات منظَّمة تُخزَّن في [**Datasets**](https://docs.apify.com/platform/storage/dataset) (مجموعات من كائنات JSON).

حمّل البيانات المستخرَجة أو المُعالجة إلى ClickHouse لاستخدامها في التحليلات أو المراقبة أو مسارات الإثراء.

<div id="key-concepts">
  ## المفاهيم الأساسية
</div>

| مفهوم Apify                                                          | ماهيته                                                                                                                                                                                  |
| -------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **[Actor](https://docs.apify.com/platform/actors)**                  | برنامج سحابي بدون خوادم يعمل على منصة Apify. تتوفر آلاف وحدات Actor الجاهزة في [Apify Store](https://apify.com/store).                                                                  |
| **[Dataset](https://docs.apify.com/platform/storage/dataset)**       | ناتج تشغيل Actor. وهي مجموعة من كائنات JSON منظَّمة على هيئة جدول، ويمكن استرجاعها بتنسيقات JSON أو CSV أو XML أو غيرها عبر [واجهة برمجة تطبيقات Apify](https://docs.apify.com/api/v2). |
| **[Webhook](https://docs.apify.com/platform/integrations/webhooks)** | استدعاء HTTP قائم على الأحداث يُفعَّل عند نجاح تشغيل Actor أو فشله أو عند وقوع أحداث أخرى في دورة حياته. استخدم webhooks لأتمتة مسار نقل البيانات من Apify إلى ClickHouse.              |

<div id="setup-guide">
  ## دليل الإعداد
</div>

<Steps>
  <Step title="اجمع تفاصيل الاتصال بـ ClickHouse" id="1-gather-your-connection-details">
    للاتصال بـ ClickHouse باستخدام HTTP(S)، تحتاج إلى المعلومات التالية:

    | المعلمات                  | الوصف                                                                                         |
    | ------------------------- | --------------------------------------------------------------------------------------------- |
    | `HOST` and `PORT`         | عادةً ما يكون المنفذ 8443 عند استخدام TLS، أو 8123 عند عدم استخدام TLS.                       |
    | `DATABASE NAME`           | افتراضيًا، توجد قاعدة بيانات باسم `default`. استخدم اسم قاعدة البيانات التي تريد الاتصال بها. |
    | `USERNAME` and `PASSWORD` | افتراضيًا، يكون اسم المستخدم `default`. استخدم اسم المستخدم المناسب لحالة الاستخدام لديك.     |

    تتوفر تفاصيل خدمة ClickHouse Cloud الخاصة بك في ClickHouse Cloud console.
    حدِّد خدمة ثم انقر على **Connect**:

    <div className="ch-image-md">
      <Frame>
        <img src="https://mintcdn.com/private-7c7dfe99/CFFsa2agBPbviR4r/images/_snippets/cloud-connect-button.webp?fit=max&auto=format&n=CFFsa2agBPbviR4r&q=85&s=ec0a298a33ca841e947fa5e8bae47362" alt="زر Connect لخدمة ClickHouse Cloud" width="998" height="932" data-path="images/_snippets/cloud-connect-button.webp" />
      </Frame>
    </div>

    اختر **HTTPS**. ستظهر تفاصيل الاتصال في مثال لأمر `curl`.

    <div className="ch-image-md">
      <Frame>
        <img src="https://mintcdn.com/private-7c7dfe99/CFFsa2agBPbviR4r/images/_snippets/connection-details-https.webp?fit=max&auto=format&n=CFFsa2agBPbviR4r&q=85&s=cb0fbd98aa2b5b7ca484c9f53395ee07" alt="تفاصيل اتصال HTTPS لخدمة ClickHouse Cloud" width="1320" height="1184" data-path="images/_snippets/connection-details-https.webp" />
      </Frame>
    </div>

    إذا كنت تستخدم ClickHouse مُدارًا ذاتيًا، فسيُحدِّد مسؤول ClickHouse لديك تفاصيل الاتصال.
  </Step>

  <Step title="المتطلبات الأساسية لـ Apify" id="2-apify-prerequisites">
    ستحتاج أيضًا إلى:

    * [حساب Apify](https://console.apify.com/sign-up) (تتوفر فئة مجانية).
    * [رمز واجهة برمجة تطبيقات لـ Apify](https://docs.apify.com/platform/integrations/api#api-token)، ويمكن العثور عليه في **Settings > Integrations** ضمن [Apify Console](https://console.apify.com/).
    * تثبيت Node.js 18+ محليًا (لأمثلة JavaScript).
  </Step>

  <Step title="ثبّت التبعيات" id="3-install-dependencies">
    ثبّت عميل JavaScript من Apify وعميل JavaScript من ClickHouse:

    ```bash theme={null}
    npm install apify-client @clickhouse/client
    ```

    <Note>
      يوفر Apify أيضًا [عميل بايثون](https://docs.apify.com/api/client/python). إذا كنت تفضل بايثون، فثبّت `apify-client` باستخدام pip، واستخدم [clickhouse-connect](/docs/ar/integrations/language-clients/python/index) مع ClickHouse.
    </Note>
  </Step>

  <Step title="أنشئ جدولًا مستهدفًا في ClickHouse" id="4-create-a-target-table">
    أنشئ جدولًا لتخزين البيانات المستخرجة. يعتمد المخطط على الـ Actor الذي تستخدمه. يستخدم هذا المثال [MergeTree](/docs/ar/reference/engines/table-engines/mergetree-family/mergetree) مع Actor لاستخراج بيانات المنتجات:

    ```sql theme={null}
    CREATE TABLE apify_products
    (
        url        String,
        title      String,
        price      Float64,
        currency   String,
        scraped_at DateTime DEFAULT now()
    )
    ENGINE = MergeTree()
    ORDER BY (scraped_at, url);
    ```
  </Step>

  <Step title="اجلب Dataset لـ Apify وحمّلها إلى ClickHouse" id="5-fetch-and-load">
    يجلب البرنامج النصي التالي نتائج تشغيل Actor في Apify ويدرجها في ClickHouse:

    ```javascript theme={null}
    import { ApifyClient } from 'apify-client';
    import { createClient } from '@clickhouse/client';

    // تهيئة العملاء
    const apify = new ApifyClient({ token: 'YOUR_APIFY_API_TOKEN' });
    const clickhouse = createClient({
        url: 'https://YOUR_CLICKHOUSE_HOST:8443',
        username: 'default',
        password: 'YOUR_CLICKHOUSE_PASSWORD',
        database: 'default',
    });

    // جلب عناصر Dataset من آخر تشغيل لـ Actor
    const run = await apify.actor('YOUR_ACTOR_ID').call();
    const { items } = await apify.dataset(run.defaultDatasetId).listItems();

    console.log(`Fetched ${items.length} items from Apify dataset.`);

    // الإدراج في ClickHouse
    await clickhouse.insert({
        table: 'apify_products',
        values: items,
        format: 'JSONEachRow',
    });

    console.log(`Inserted ${items.length} rows into ClickHouse.`);
    await clickhouse.close();
    ```

    <Tip>
      بالنسبة إلى Dataset الكبيرة، استخدم تقسيم النتائج إلى صفحات عبر معاملي `limit` و`offset` في نقطة النهاية [List dataset items](https://docs.apify.com/api/v2#/reference/datasets/item-collection/list-items). يمكنك أيضًا تمرير `clean=true` لاسترجاع العناصر غير الفارغة فقط بعد إزالة التكرارات.
    </Tip>
  </Step>

  <Step title="أتمتة العملية باستخدام webhooks" id="6-automate-with-webhooks">
    بدلًا من تشغيل البرنامج النصي يدويًا، أتمت مسار المعالجة بحيث تُحمَّل البيانات إلى ClickHouse في كل مرة ينتهي فيها Actor:

    1. في [Apify Console](https://console.apify.com/)، انتقل إلى Actor الخاص بك وافتح علامة التبويب **Integrations**.
    2. أضف webhook جديدًا بالإعدادات التالية:
       * **نوع الحدث:** `ACTOR.RUN.SUCCEEDED`
       * **الإجراء:** طلب HTTP POST إلى نقطة نهاية أداة التحميل لديك، أو تشغيل Actor آخر يتولى الإدراج في ClickHouse.
    3. تتضمن حمولة webhook القيمة `defaultDatasetId`، والتي يمكنك استخدامها لجلب نتائج التشغيل.

    راجع [توثيق webhooks في Apify](https://docs.apify.com/platform/integrations/webhooks) للاطلاع على تفاصيل الحمولة وخيارات الإعداد.

    ويمكنك أيضًا استخدام [Apify Schedules](https://docs.apify.com/platform/schedules) لتشغيل Actors وفق جدول زمني شبيه بـ cron، مع استخدام webhooks لخطوة التحميل.
  </Step>
</Steps>

<div id="best-practices">
  ## أفضل الممارسات
</div>

<div id="fetching-data-from-apify">
  ### جلب البيانات من Apify
</div>

استخدم مكتبة العميل لـ Apify (`apify-client` لـ [JavaScript](https://docs.apify.com/api/client/js) أو [بايثون](https://docs.apify.com/api/client/python)) بدلًا من استدعاءات HTTP المباشرة. فهي تتولى تقسيم النتائج إلى صفحات، وإعادة المحاولة، والمصادقة نيابةً عنك. وبالنسبة إلى مجموعات البيانات الكبيرة، صفِّح النتائج باستخدام المعلَمتين `limit` و`offset` في نقطة النهاية [List dataset items](https://docs.apify.com/api/v2#/reference/datasets/item-collection/list-items).

<div id="loading-into-clickhouse">
  ### تحميل البيانات إلى ClickHouse
</div>

استخدم التنسيق [`JSONEachRow`](/docs/ar/reference/formats/JSON/JSONEachRow) عند الإدراج في ClickHouse. فهو يتوافق مباشرةً مع مخرجات JSON من Apify من دون الحاجة إلى أي تحويل.

احرص على أن يطابق مخطط جدول ClickHouse لديك حقول المخرجات الخاصة بـ Actor. تحقّق من مخطط المخرجات الخاص بـ Actor في صفحته على [Apify Store](https://apify.com/store) أو في علامة التبويب **Dataset** بعد التشغيل.

<div id="performance">
  ### الأداء
</div>

لعمليات الإدراج عالية الإنتاجية من عميل JavaScript، اتبع [نصائح لتحسين الأداء](/docs/ar/integrations/language-clients/js/index#tips-for-performance-optimizations). اجمع الصفوف في دفعات إدراج أكبر بدلًا من إدراج صف واحد في كل مرة، وفكّر في استخدام [عمليات الإدراج غير المتزامنة](/docs/ar/concepts/features/operations/insert/asyncinserts) عندما لا يكون التجميع من جهة العميل عمليًا.

<div id="security">
  ### الأمان
</div>

تستخدم الأمثلة في هذه الصفحة المستخدم `default` وقاعدة البيانات الافتراضية لتبسيط الأمور. في بيئة production، أنشئ مستخدمًا مخصصًا يتمتع بالحد الأدنى من الامتيازات اللازمة للإدراج في الجدول المستهدف، وخزّن بيانات الاعتماد بأمان (على سبيل المثال، في متغيرات البيئة أو في مدير الأسرار بدلًا من تضمينها في الشيفرة المصدرية). راجع [Cloud access management](/docs/ar/products/cloud/guides/security/cloud-access-management/index) للحصول على إرشادات.

<div id="related-resources">
  ## الموارد ذات الصلة
</div>

* [وثائق منصة Apify](https://docs.apify.com)
* [مرجع واجهة برمجة تطبيقات Apify](https://docs.apify.com/api/v2)
* [عميل JavaScript الخاص بـ Apify](https://docs.apify.com/api/client/js)
* [عميل بايثون الخاص بـ Apify](https://docs.apify.com/api/client/python)
* [متجر Apify (Actors جاهزة للاستخدام)](https://apify.com/store)
* [نظرة عامة على تكاملات Apify](https://docs.apify.com/platform/integrations)
* [عميل JavaScript الخاص بـ ClickHouse](/docs/ar/integrations/language-clients/js/index)
