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

# Créer une règle

> Découvrez comment créer des règles de flux filtrés à l'aide d'opérateurs

Les endpoints de flux filtrés renvoient des Publications qui correspondent à un ensemble de règles appliquées au flux. Les règles sont composées d'opérateurs qui correspondent à différents attributs de Publication.

Plusieurs règles peuvent être appliquées à l'aide de l'endpoint [POST /tweets/search/stream/rules](/fr/x-api/posts/filtered-stream#post-2-tweets-search-stream-rules). Une fois que vous avez ajouté des règles et établi une connexion via [GET /tweets/search/stream](/fr/x-api/posts/filtered-stream#get-2-tweets-search-stream), seules les Publications correspondant à vos règles seront renvoyées. Il n'est pas nécessaire de vous déconnecter pour ajouter ou supprimer des règles.

***

<div id="rule-limitations">
  ## Limites des règles
</div>

Les limites concernant le nombre de règles dépendent de votre [niveau d'accès](/fr/x-api/getting-started/about-x-api). Consultez l'[introduction au flux filtré](/fr/x-api/posts/filtered-stream/introduction) pour connaître les limites spécifiques.

***

<div id="operator-types-standalone-and-conjunction-required">
  ## Types d'opérateurs : autonomes et nécessitant une conjonction
</div>

Les **opérateurs autonomes** peuvent être utilisés seuls ou avec n'importe quel autre opérateur (y compris ceux qui nécessitent une conjonction).

Par exemple, cette règle fonctionne parce que `#hashtag` est un opérateur autonome :

```
#xapiv2
```

Les **opérateurs nécessitant une conjonction** ne peuvent pas être utilisés seuls dans une règle ; ils ne peuvent être utilisés que lorsqu’au moins un opérateur autonome est inclus. En effet, utiliser uniquement ces opérateurs renverrait un volume extrêmement élevé de Publications.

Par exemple, les règles suivantes ne sont **pas prises en charge** puisqu’elles ne contiennent que des opérateurs nécessitant une conjonction :

```
has:media
```

```
has:links OR is:retweet
```

Si nous ajoutons un opérateur isolé, comme l’expression `"X data"`, la règle fonctionne correctement :

```
"X data" has:mentions (has:media OR has:links)
```

***

<div id="boolean-operators-and-grouping">
  ## Opérateurs booléens et regroupement
</div>

Enchaînez plusieurs opérateurs à l'aide de ces outils :

| Opérateur                  | Description                                                    | Exemple                                                                                    |
| :------------------------- | :------------------------------------------------------------- | :----------------------------------------------------------------------------------------- |
| **AND** (espace)           | Les Publications doivent répondre aux deux conditions          | `snow day #NoSchool` correspond aux Publications contenant "snow" ET "day" ET #NoSchool    |
| **OR**                     | Les Publications doivent répondre à l'une ou l'autre condition | `grumpy OR cat OR #meme` correspond aux Publications contenant "grumpy" OU "cat" OU #meme  |
| **NOT** (tiret)            | Exclut les Publications correspondant à cette condition        | `cat #meme -grumpy` correspond aux Publications contenant "cat" et #meme mais PAS "grumpy" |
| **Grouping** (parenthèses) | Regroupez des opérateurs                                       | `(grumpy cat) OR (#meme has:images)` correspond à l'un ou l'autre groupe                   |

<Note>
  **Remarque sur les négations**

  * Tous les opérateurs peuvent être niés, sauf `sample:`
  * L'opérateur `-is:nullcast` doit toujours être nié
  * Les opérateurs niés ne peuvent pas être utilisés seuls
  * Ne niez pas les opérateurs regroupés. Au lieu de `skiing -(snow OR day OR noschool)`, utilisez `skiing -snow -day -noschool`
</Note>

***

<div id="order-of-operations">
  ## Ordre des opérations
</div>

Lorsque vous combinez AND et OR :

1. Les opérateurs liés par l’opérateur logique AND sont d’abord combinés
2. Puis, les opérateurs liés par l’opérateur logique OR sont appliqués

**Exemples :**

| Requête                  | Interprété comme           |
| :----------------------- | :------------------------- |
| `apple OR iphone ipad`   | `apple OR (iphone ipad)`   |
| `ipad iphone OR android` | `(iphone ipad) OR android` |

Pour éliminer toute incertitude, utilisez des parenthèses :

```
(apple OR iphone) ipad
```

```
iphone (ipad OR android)
```

***

<div id="punctuation-diacritics-and-case-sensitivity">
  ## Ponctuation, signes diacritiques et sensibilité à la casse
</div>

**Signes diacritiques :** les règles de flux filtré contenant des accents ne font correspondre que les Publications qui contiennent également l’accent. Par exemple, `diacrítica` correspond à *diacrítica* mais **pas** à *diacritica*.

**Sensibilité à la casse :** tous les opérateurs sont insensibles à la casse. La règle `cat` correspond à *cat*, *CAT* et *Cat*.

<Note>
  **La recherche de Publications se comporte différemment**

  Lors de la [création de requêtes de recherche](/fr/x-api/posts/search/integrate/build-a-query), les mots-clés avec accents correspondent aux Publications avec et sans accents. Par exemple, `Diacrítica` correspond à la fois à *Diacrítica* et *Diacritica*.
</Note>

***

<div id="quote-tweet-matching">
  ## Correspondance des Quote Tweets
</div>

Lorsque vous utilisez le flux filtré, les opérateurs effectuent la correspondance à la fois sur le contenu du Quote Tweet **et** sur le contenu de la Publication originale qui a été citée.

<Note>
  [Rechercher des Publications](/fr/x-api/posts/search/introduction) se comporte différemment — il ne fait correspondre que le contenu du Quote Tweet, et non celui de la Publication originale.
</Note>

***

<div id="specificity-and-efficiency">
  ## Spécificité et efficacité
</div>

<Warning>
  L'utilisation d'opérateurs trop généraux, comme un seul mot-clé ou hashtag, n'est pas recommandée : ils correspondent à un volume massif de Publications et épuiseront rapidement votre connexion.
</Warning>

**Conseils pour créer des règles efficaces :**

1. **Commencez avec des critères précis, puis élargissez** — Créez des règles ciblées qui renvoient des résultats pertinents
2. **Utilisez plusieurs opérateurs** — Combinez des opérateurs pour affiner les résultats
3. **Surveillez votre nombre de caractères** — L'ensemble de la chaîne de la règle est pris en compte dans cette limite

**Exemple de progression :**

```
# Too broad - 200,000+ Posts per day
happy

# Mieux - ajoute un filtre de langue et des exclusions
(happy OR happiness) lang:en -birthday -is:retweet

# Even better - 59 characters, more specific
(happy OR happiness) place_country:GB -birthday -is:retweet
```

***

<div id="iteratively-building-a-rule">
  ## Construire une règle de manière itérative
</div>

<div id="step-1-start-with-a-basic-rule">
  ### Étape 1 : Commencez par une règle de base
</div>

```
happy OR happiness
```

<div id="step-2-test-and-narrow-based-on-results">
  ### Étape 2 : Tester et affiner en fonction des résultats
</div>

Nous avons observé des Publications dans de nombreuses langues. Ajoutez un filtre de langue :

```
(happy OR happiness) lang:en
```

On reçoit des vœux d'anniversaire. Excluez-les, ainsi que les Retweets :

```
(happy OR happiness) lang:en -birthday -is:retweet
```

<div id="step-3-broaden-for-better-coverage">
  ### Étape 3 : élargir pour une meilleure couverture
</div>

Nous voulons couvrir un éventail plus large de sentiments. Ajoutez des mots-clés connexes :

```
(happy OR happiness OR excited OR elated) lang:en -birthday -is:retweet
```

<div id="step-4-adjust-for-trends">
  ### Étape 4 : Ajuster en fonction des tendances
</div>

Des Publications liées aux fêtes apparaissent. Excluez-les :

```
(happy OR happiness OR excited OR elated) lang:en -birthday -is:retweet -holidays
```

***

<div id="adding-and-removing-rules">
  ## Ajout et suppression de règles
</div>

Utilisez [POST /2/tweets/search/stream/rules](/fr/x-api/posts/filtered-stream#post-2-tweets-search-stream-rules) pour ajouter ou supprimer des règles.

<div id="adding-rules">
  ### Ajout de règles
</div>

Envoyez un corps JSON `add` avec la propriété `value` (la règle) et, de manière facultative, `tag` (pour identifier les Publications correspondantes) :

```bash theme={null}
curl -X POST "https://api.x.com/2/tweets/search/stream/rules" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '{
    "add": [
      {"value": "cat has:media", "tag": "cats with media"},
      {"value": "cat has:media -grumpy", "tag": "happy cats with media"},
      {"value": "meme", "tag": "funny things"},
      {"value": "meme has:images"}
    ]
  }'
```

<div id="removing-rules">
  ### Suppression de règles
</div>

Soumettez un corps de requête JSON `delete` avec les id des règles à supprimer :

```bash theme={null}
curl -X POST "https://api.x.com/2/tweets/search/stream/rules" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '{
    "delete": {
      "ids": [
        "1165037377523306498",
        "1165037377523306499"
      ]
    }
  }'
```

***

<div id="rule-examples">
  ## Exemples de règles
</div>

<div id="tracking-a-natural-disaster">
  ### Suivi d'une catastrophe naturelle
</div>

Faites correspondre les Publications d'agences météorologiques concernant l'ouragan Harvey :

```json theme={null}
{
  "value": "-is:retweet has:geo (from:NWSNHC OR from:NHC_Atlantic OR from:NWSHouston OR from:NWSSanAntonio OR from:USGS_TexasRain OR from:USGS_TexasFlood OR from:JeffLindner1)",
  "tag": "Hurricane Harvey - weather agencies with geo"
}
```

<div id="sentiment-analysis-for-nowplaying">
  ### Analyse des sentiments pour #nowplaying
</div>

**Sentiment positif :**

```json theme={null}
{
  "value": "#nowplaying (happy OR exciting OR excited OR favorite OR fav OR amazing OR lovely OR incredible) (place_country:US OR place_country:MX OR place_country:CA) -horrible -worst -sucks -bad -disappointing",
  "tag": "#nowplaying positive"
}
```

**Sentiment négatif :**

```json theme={null}
{
  "value": "#nowplaying (horrible OR worst OR sucks OR bad OR disappointing) (place_country:US OR place_country:MX OR place_country:CA) -happy -exciting -excited -favorite -fav -amazing -lovely -incredible",
  "tag": "#nowplaying negative"
}
```

<div id="using-post-annotations">
  ### Utiliser les annotations de Publication
</div>

Trouvez des Publications en japonais à propos d’animaux de compagnie (hors chats) avec des images en utilisant l’opérateur `context:` :

Commencez par utiliser la [consultation de Publication](/fr/x-api/posts/lookup/introduction) avec `tweet.fields=context_annotations` pour identifier les ID domain.entity :

* Chats : `domain` 66, `entity` 852262932607926273
* Animaux de compagnie : `domain` 65, `entity` 852262932607926273

```json theme={null}
{
  "value": "context:65.852262932607926273 -context:66.852262932607926273 -is:retweet has:images lang:ja",
  "tag": "Japanese pets with images - no cats"
}
```

***

<div id="next-steps">
  ## Prochaines étapes
</div>

<CardGroup cols={2}>
  <Card title="Référence des opérateurs" icon="list" href="/fr/x-api/posts/filtered-stream/integrate/operators">
    Liste complète des opérateurs disponibles
  </Card>

  <Card title="Démarrage rapide du flux filtré" icon="rocket" href="/fr/x-api/posts/filtered-stream/quickstart">
    Connectez-vous à votre flux
  </Card>

  <Card title="Exemples de code" icon="github" href="https://github.com/xdevplatform/Twitter-API-v2-sample-code/tree/master/Filtered-Stream">
    Exemples de code dans plusieurs langages
  </Card>
</CardGroup>
