> ## 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.

> Importez dans ClickHouse les données de web scraping et d'automatisation d'Apify

# Connecter 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>
            Géré par la communauté
        </div>;
};

<CommunityMaintainedBadge />

[Apify](https://apify.com/) est une plateforme de web scraping et d’automatisation. Vous créez, exécutez et faites évoluer des programmes serverless dans le cloud appelés [**Actors**](https://docs.apify.com/platform/actors). Les Actors extraient des données de sites web, parcourent le web, traitent des données ou automatisent des workflows. Chaque exécution d’un Actor produit une sortie structurée stockée dans des [**Datasets**](https://docs.apify.com/platform/storage/dataset) (collections d’objets JSON).

Chargez les données extraites ou traitées dans ClickHouse pour des pipelines d’analyse, de monitoring ou d’enrichissement.

<div id="key-concepts">
  ## Concepts clés
</div>

| Concept Apify                                                        | Ce que c’est                                                                                                                                                                                                      |
| -------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **[Actor](https://docs.apify.com/platform/actors)**                  | Un programme serverless dans le cloud qui s’exécute sur la plateforme Apify. Des milliers d’Actors prêts à l’emploi sont disponibles dans l’[Apify Store](https://apify.com/store).                               |
| **[Dataset](https://docs.apify.com/platform/storage/dataset)**       | Le résultat d’une exécution d’Actor. Une collection d’objets JSON structurée comme une table, récupérable en JSON, CSV, XML ou dans d’autres formats via l’[API Apify](https://docs.apify.com/api/v2).            |
| **[Webhook](https://docs.apify.com/platform/integrations/webhooks)** | Un appel HTTP déclenché par un événement lorsqu’une exécution d’Actor réussit, échoue ou atteint d’autres étapes de son cycle de vie. Utilisez les webhooks pour automatiser le pipeline d’Apify vers ClickHouse. |

<div id="setup-guide">
  ## Guide de configuration
</div>

<Steps>
  <Step title="Rassemblez vos informations de connexion ClickHouse" id="1-gather-your-connection-details">
    Pour vous connecter à ClickHouse via HTTP(S), vous avez besoin des informations suivantes :

    | Paramètre(s)              | Description                                                                                                                                    |
    | ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
    | `HOST` and `PORT`         | En général, le port est 8443 lors de l’utilisation de TLS, ou 8123 sans TLS.                                                                   |
    | `DATABASE NAME`           | Par défaut, une base de données nommée `default` est disponible ; utilisez le nom de la base de données à laquelle vous voulez vous connecter. |
    | `USERNAME` and `PASSWORD` | Par défaut, le nom d’utilisateur est `default`. Utilisez le nom d’utilisateur adapté à votre cas d’usage.                                      |

    Les informations de votre service ClickHouse Cloud sont disponibles dans la console ClickHouse Cloud.
    Sélectionnez un service, puis cliquez sur **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="Bouton Connect du service ClickHouse Cloud" width="998" height="932" data-path="images/_snippets/cloud-connect-button.webp" />
      </Frame>
    </div>

    Choisissez **HTTPS**. Les détails de connexion s’affichent dans un exemple de commande `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="Détails de connexion HTTPS ClickHouse Cloud" width="1320" height="1184" data-path="images/_snippets/connection-details-https.webp" />
      </Frame>
    </div>

    Si vous utilisez ClickHouse autogéré, les détails de connexion sont définis par votre administrateur ClickHouse.
  </Step>

  <Step title="Prérequis Apify" id="2-apify-prerequisites">
    Vous aurez également besoin de :

    * Un [compte Apify](https://console.apify.com/sign-up) (offre gratuite disponible).
    * Un [jeton API Apify](https://docs.apify.com/platform/integrations/api#api-token), disponible dans **Settings > Integrations** de la [Console Apify](https://console.apify.com/).
    * Node.js 18+ installé localement (pour les exemples JavaScript).
  </Step>

  <Step title="Installer les dépendances" id="3-install-dependencies">
    Installez le client JavaScript Apify et le client JavaScript ClickHouse :

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

    <Note>
      Apify fournit également un [client Python](https://docs.apify.com/api/client/python). Si vous préférez Python, installez `apify-client` via pip et utilisez [clickhouse-connect](/docs/fr/integrations/language-clients/python/index) pour ClickHouse.
    </Note>
  </Step>

  <Step title="Créer une table cible dans ClickHouse" id="4-create-a-target-table">
    Créez une table pour stocker les données extraites. Le schéma dépend de l’Actor que vous utilisez. Cet exemple utilise [MergeTree](/docs/fr/reference/engines/table-engines/mergetree-family/mergetree) pour un Actor de scraping de produits :

    ```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="Récupérer le dataset Apify et le charger dans ClickHouse" id="5-fetch-and-load">
    Le script suivant récupère les résultats d’une exécution d’Actor Apify et les insère dans ClickHouse :

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

    // Initialiser les clients
    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',
    });

    // Récupérer les éléments du dataset de la dernière exécution d'un 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.`);

    // Insérer dans ClickHouse
    await clickhouse.insert({
        table: 'apify_products',
        values: items,
        format: 'JSONEachRow',
    });

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

    <Tip>
      Pour les datasets volumineux, parcourez les résultats par pagination à l’aide des paramètres `limit` et `offset` du point de terminaison [List dataset items](https://docs.apify.com/api/v2#/reference/datasets/item-collection/list-items). Vous pouvez également passer `clean=true` pour ne récupérer que les éléments non vides et dédupliqués.
    </Tip>
  </Step>

  <Step title="Automatiser avec des webhooks" id="6-automate-with-webhooks">
    Au lieu d’exécuter le script manuellement, automatisez le pipeline afin que les données soient chargées dans ClickHouse à chaque fin d’exécution d’un Actor :

    1. Dans la [Console Apify](https://console.apify.com/), accédez à votre Actor et ouvrez l’onglet **Integrations**.
    2. Ajoutez un nouveau webhook avec :
       * **Event type:** `ACTOR.RUN.SUCCEEDED`
       * **Action:** une requête HTTP POST vers votre point de terminaison de chargement, ou le déclenchement d’un autre Actor chargé de l’insertion dans ClickHouse.
    3. Le payload du webhook inclut `defaultDatasetId`, que vous pouvez utiliser pour récupérer les résultats de l’exécution.

    Consultez la [documentation des webhooks Apify](https://docs.apify.com/platform/integrations/webhooks) pour plus de détails sur le payload et les options de configuration.

    Une autre approche consiste à utiliser les [Apify Schedules](https://docs.apify.com/platform/schedules) pour exécuter des Actors selon une planification de type cron, combinée à des webhooks pour l’étape de chargement.
  </Step>
</Steps>

<div id="best-practices">
  ## Bonnes pratiques
</div>

<div id="fetching-data-from-apify">
  ### Récupération de données depuis Apify
</div>

Utilisez la bibliothèque client Apify (`apify-client` pour [JavaScript](https://docs.apify.com/api/client/js) ou [Python](https://docs.apify.com/api/client/python)) plutôt que des appels HTTP directs. Elle gère pour vous la pagination, les tentatives de nouvelle exécution et l'authentification. Pour les datasets volumineux, parcourez les résultats avec pagination à l'aide des paramètres `limit` et `offset` de l'endpoint [List dataset items](https://docs.apify.com/api/v2#/reference/datasets/item-collection/list-items).

<div id="loading-into-clickhouse">
  ### Chargement dans ClickHouse
</div>

Utilisez le format [`JSONEachRow`](/docs/fr/reference/formats/JSON/JSONEachRow) pour insérer des données dans ClickHouse. Il correspond directement à la sortie JSON d'Apify, sans nécessiter de transformation.

Faites correspondre le schéma de votre table ClickHouse aux champs de sortie de l'Actor. Vérifiez le schéma de sortie de l'Actor sur sa page [Apify Store](https://apify.com/store) ou dans l'onglet **Dataset** après l'exécution.

<div id="performance">
  ### Performances
</div>

Pour des insertions à haut débit depuis le client JavaScript, consultez les [conseils d'optimisation des performances](/docs/fr/integrations/language-clients/js/index#tips-for-performance-optimizations). Regroupez les lignes dans des insertions de plus grande taille plutôt que d'insérer une ligne à la fois, et envisagez les [insertions asynchrones](/docs/fr/concepts/features/operations/insert/asyncinserts) lorsque le batching côté client n'est pas pratique.

<div id="security">
  ### Sécurité
</div>

Les exemples de cette page utilisent l’utilisateur et la base de données `default` pour faire simple. En production, créez un utilisateur dédié avec le minimum de privilèges nécessaires pour insérer dans votre table cible, et stockez les identifiants de manière sécurisée (par exemple, dans des variables d’environnement ou un gestionnaire de secrets, plutôt que de les versionner dans le code source). Consultez [la gestion des accès Cloud](/docs/fr/products/cloud/guides/security/cloud-access-management/index) pour plus d’informations.

<div id="related-resources">
  ## Ressources connexes
</div>

* [Documentation de la plateforme Apify](https://docs.apify.com)
* [Référence de l’API Apify](https://docs.apify.com/api/v2)
* [client JavaScript Apify](https://docs.apify.com/api/client/js)
* [Client Python d’Apify](https://docs.apify.com/api/client/python)
* [Apify Store (Actors prêts à l’emploi)](https://apify.com/store)
* [Vue d’ensemble des intégrations Apify](https://docs.apify.com/platform/integrations)
* [Client JavaScript ClickHouse](/docs/fr/integrations/language-clients/js/index)
