تُعدّ Apify منصة لاستخراج بيانات الويب والأتمتة. يمكنك إنشاء برامج سحابية بلا خوادم تُسمّى Actors، ثم تشغيلها وتوسيع نطاقها. تتولى Actors استخراج البيانات من مواقع الويب، والزحف على الويب، ومعالجة البيانات، أو أتمتة سير العمل. وينتج عن كل تشغيل لـ Actor مخرجات منظَّمة تُخزَّن في Datasets (مجموعات من كائنات JSON).
حمّل البيانات المستخرَجة أو المُعالجة إلى ClickHouse لاستخدامها في التحليلات أو المراقبة أو مسارات الإثراء.
المفاهيم الأساسية
| مفهوم Apify | ماهيته |
|---|---|
| Actor | برنامج سحابي بدون خوادم يعمل على منصة Apify. تتوفر آلاف وحدات Actor الجاهزة في Apify Store. |
| Dataset | ناتج تشغيل Actor. وهي مجموعة من كائنات JSON منظَّمة على هيئة جدول، ويمكن استرجاعها بتنسيقات JSON أو CSV أو XML أو غيرها عبر واجهة برمجة تطبيقات Apify. |
| Webhook | استدعاء HTTP قائم على الأحداث يُفعَّل عند نجاح تشغيل Actor أو فشله أو عند وقوع أحداث أخرى في دورة حياته. استخدم webhooks لأتمتة مسار نقل البيانات من Apify إلى ClickHouse. |
دليل الإعداد
اجمع تفاصيل الاتصال بـ ClickHouse
للاتصال بـ ClickHouse باستخدام HTTP(S)، تحتاج إلى المعلومات التالية:
| المعلمات | الوصف |
|---|---|
HOST and PORT |
عادةً ما يكون المنفذ 8443 عند استخدام TLS، أو 8123 عند عدم استخدام TLS. |
DATABASE NAME |
افتراضيًا، توجد قاعدة بيانات باسم default. استخدم اسم قاعدة البيانات التي تريد الاتصال بها. |
USERNAME and PASSWORD |
افتراضيًا، يكون اسم المستخدم default. استخدم اسم المستخدم المناسب لحالة الاستخدام لديك. |
تتوفر تفاصيل خدمة ClickHouse Cloud الخاصة بك في ClickHouse Cloud console. حدِّد خدمة ثم انقر على Connect:

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

إذا كنت تستخدم ClickHouse مُدارًا ذاتيًا، فسيُحدِّد مسؤول ClickHouse لديك تفاصيل الاتصال.
المتطلبات الأساسية لـ Apify
ستحتاج أيضًا إلى:
- حساب Apify (تتوفر فئة مجانية).
- رمز واجهة برمجة تطبيقات لـ Apify، ويمكن العثور عليه في Settings > Integrations ضمن Apify Console.
- تثبيت Node.js 18+ محليًا (لأمثلة JavaScript).
ثبّت التبعيات
ثبّت عميل JavaScript من Apify وعميل JavaScript من ClickHouse:
npm install apify-client @clickhouse/clientأنشئ جدولًا مستهدفًا في ClickHouse
أنشئ جدولًا لتخزين البيانات المستخرجة. يعتمد المخطط على الـ Actor الذي تستخدمه. يستخدم هذا المثال MergeTree مع Actor لاستخراج بيانات المنتجات:
CREATE TABLE apify_products
(
url String,
title String,
price Float64,
currency String,
scraped_at DateTime DEFAULT now()
)
ENGINE = MergeTree()
ORDER BY (scraped_at, url);اجلب Dataset لـ Apify وحمّلها إلى ClickHouse
يجلب البرنامج النصي التالي نتائج تشغيل Actor في Apify ويدرجها في ClickHouse:
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();أتمتة العملية باستخدام webhooks
بدلًا من تشغيل البرنامج النصي يدويًا، أتمت مسار المعالجة بحيث تُحمَّل البيانات إلى ClickHouse في كل مرة ينتهي فيها Actor:
- في Apify Console، انتقل إلى Actor الخاص بك وافتح علامة التبويب Integrations.
- أضف webhook جديدًا بالإعدادات التالية:
- نوع الحدث:
ACTOR.RUN.SUCCEEDED - الإجراء: طلب HTTP POST إلى نقطة نهاية أداة التحميل لديك، أو تشغيل Actor آخر يتولى الإدراج في ClickHouse.
- نوع الحدث:
- تتضمن حمولة webhook القيمة
defaultDatasetId، والتي يمكنك استخدامها لجلب نتائج التشغيل.
راجع توثيق webhooks في Apify للاطلاع على تفاصيل الحمولة وخيارات الإعداد.
ويمكنك أيضًا استخدام Apify Schedules لتشغيل Actors وفق جدول زمني شبيه بـ cron، مع استخدام webhooks لخطوة التحميل.
أفضل الممارسات
جلب البيانات من Apify
استخدم مكتبة العميل لـ Apify (apify-client لـ JavaScript أو بايثون) بدلًا من استدعاءات HTTP المباشرة. فهي تتولى تقسيم النتائج إلى صفحات، وإعادة المحاولة، والمصادقة نيابةً عنك. وبالنسبة إلى مجموعات البيانات الكبيرة، صفِّح النتائج باستخدام المعلَمتين limit وoffset في نقطة النهاية List dataset items.
تحميل البيانات إلى ClickHouse
استخدم التنسيق JSONEachRow عند الإدراج في ClickHouse. فهو يتوافق مباشرةً مع مخرجات JSON من Apify من دون الحاجة إلى أي تحويل.
احرص على أن يطابق مخطط جدول ClickHouse لديك حقول المخرجات الخاصة بـ Actor. تحقّق من مخطط المخرجات الخاص بـ Actor في صفحته على Apify Store أو في علامة التبويب Dataset بعد التشغيل.
الأداء
لعمليات الإدراج عالية الإنتاجية من عميل JavaScript، اتبع نصائح لتحسين الأداء. اجمع الصفوف في دفعات إدراج أكبر بدلًا من إدراج صف واحد في كل مرة، وفكّر في استخدام عمليات الإدراج غير المتزامنة عندما لا يكون التجميع من جهة العميل عمليًا.
الأمان
تستخدم الأمثلة في هذه الصفحة المستخدم default وقاعدة البيانات الافتراضية لتبسيط الأمور. في بيئة production، أنشئ مستخدمًا مخصصًا يتمتع بالحد الأدنى من الامتيازات اللازمة للإدراج في الجدول المستهدف، وخزّن بيانات الاعتماد بأمان (على سبيل المثال، في متغيرات البيئة أو في مدير الأسرار بدلًا من تضمينها في الشيفرة المصدرية). راجع Cloud access management للحصول على إرشادات.