메인 콘텐츠로 건너뛰기

필터링 스트림용 규칙 구성

필터링 스트림 엔드포인트는 스트림에 적용된 일련의 규칙과 일치하는 게시물만 전달합니다. 규칙은 다양한 게시물 속성과의 매칭에 사용되는 연산자로 구성됩니다. 여러 규칙은 POST /tweets/search/stream/rules 엔드포인트를 통해 스트림에 적용할 수 있습니다. 규칙을 추가한 뒤 GET /tweets/search/stream 엔드포인트로 스트림에 연결하면, 규칙과 일치하는 게시물만 지속적인 스트리밍 연결을 통해 전달됩니다. 규칙을 추가하거나 제거하기 위해 스트림 연결을 해제할 필요는 없습니다. 

목차

규칙 빌드하기

규칙 제한

규칙 수 제한은 사용 중인 액세스 수준이 귀하의 Project에 적용되는 방식에 따라 달라집니다. 이러한 제한의 적용 방식은 필터링된 스트림 소개 페이지에서 확인할 수 있습니다.

연산자 유형: 단독 사용 가능 및 연결(결합) 필요

단독 연산자는 혼자서도, 또는 다른 어떤 연산자(연결이 필요한 연산자를 포함)와 함께도 사용할 수 있습니다. 예를 들어, 다음 규칙은 단독 연산자인 #hashtag 연산자를 사용하므로 유효합니다: #xapiv2 연결(결합) 필요 연산자는 규칙에서 단독으로 사용할 수 없으며, 적어도 하나의 단독 연산자가 규칙에 포함되어 있을 때만 사용할 수 있습니다. 이러한 연산자를 단독으로 사용하면 조건이 지나치게 포괄적이 되어 매우 많은 양의 게시물과 일치하게 되기 때문입니다. 예를 들어, 다음 규칙은 연결(결합) 필요 연산자만 포함하므로 지원되지 않습니다: has:media has:links OR is:retweet 문구 "X data"와 같은 단독 연산자를 추가하면 규칙이 정상적으로 작동합니다. "X data" has:mentions (has:media OR has:links)

불리언 연산자와 그룹화

하나의 규칙에서 여러 연산자를 함께 사용하려면 다음 도구를 활용할 수 있습니다:
AND 논리연산자들을 사이에 공백을 두고 연속해서 쓰면 불리언 “AND” 논리로 해석되어, 두 조건이 모두 충족될 때만 게시물이 일치합니다. 예: snow day #NoSchool은 snow와 day라는 용어와 #NoSchool 해시태그를 포함하는 게시물과 일치합니다.
OR 논리연산자들 사이에 OR을 두고 연속해서 쓰면 OR 논리로 해석되어, 두 조건 중 하나만 충족해도 게시물이 일치합니다. 예: grumpy OR cat OR #meme를 지정하면 grumpy 또는 cat이라는 용어, 혹은 #meme 해시태그 중 하나 이상을 포함하는 모든 게시물과 일치합니다.
NOT 논리, 부정키워드(또는 다른 연산자) 앞에 대시(-)를 붙이면 부정(NOT)됩니다. 예: cat #meme -grumpy는 #meme 해시태그와 cat 용어를 포함하되, grumpy 용어는 포함하지 않는 게시물과 일치합니다. 흔한 규칙 절로 -is:retweet이 있으며, 리트윗에는 일치하지 않아 원본 게시물, 인용 트윗, 답글에만 일치합니다. 모든 연산자는 부정할 수 있지만, 부정된 연산자는 단독으로 사용할 수 없습니다.
그룹화괄호를 사용해 연산자를 묶어 그룹화할 수 있습니다. 예: (grumpy cat) OR (#meme has:images)는 grumpy와 cat이라는 용어를 모두 포함하는 게시물 또는 이미지가 있고 #meme 해시태그를 포함하는 게시물을 반환합니다. AND가 먼저 적용되고, 그 다음 OR가 적용됨에 유의하세요.
부정에 관한 참고 사항sample:을 제외한 모든 연산자는 부정할 수 있으며, -is:nullcast는 항상 부정 형태여야 합니다. 부정된 연산자는 단독으로 사용할 수 없습니다.괄호로 묶인 연산자 집합 전체를 한꺼번에 부정하지 마세요. 대신 각 연산자를 개별적으로 부정하세요.예를 들어, skiing -(snow OR day OR noschool) 대신 skiing -snow -day -noschool을 사용할 것을 권장합니다.

연산 순서

AND와 OR을 함께 사용할 때는 다음 연산 순서에 따라 규칙이 평가됩니다.
  1. AND 논리로 연결된 연산자가 먼저 결합됩니다.
  2. 그다음 OR 논리로 연결된 연산자가 적용됩니다.
예:
  • apple OR iphone ipadapple OR (iphone ipad)로 평가됩니다
  • ipad iphone OR android(iphone ipad) OR android로 평가됩니다
모호성을 줄이고 규칙이 의도대로 평가되도록 하려면, 적절한 곳에 괄호를 사용해 용어를 묶으세요. 예:
  • (apple OR iphone) ipad
  • iphone (ipad OR android)

문장 부호, 발음 구별 기호(디아크리틱), 대소문자 구분

문자 악센트나 발음 구별 기호가 포함된 키워드 또는 해시태그 규칙을 지정하면, 해당 악센트나 발음 구별 기호가 정확히 포함된 단어가 있는 게시물과는 일치하지만, 동일한 문자이면서 악센트나 발음 구별 기호가 없는 경우와는 일치하지 않습니다. 예를 들어, 키워드 diacrítica 또는 해시태그 #cumpleaños가 포함된 규칙은 악센트나 발음 구별 기호가 포함되어 있으므로 diacrítica 또는 _#cumpleaños_를 포함하는 게시물과 일치합니다. 그러나 이러한 규칙은 물결표가 있는 í 또는 eñe가 빠진 Diacritica 또는 _#cumpleanos_를 포함하는 게시물과는 일치하지 않습니다. 악센트나 발음 구별 기호가 있는 문자는 일반 문자와 동일하게 취급되며, 단어 경계로 간주되지 않습니다. 예를 들어, 키워드 _cumpleaños_가 있는 규칙은 _cumpleaños_라는 단어를 포함한 게시물에만 일치하며, cumplea, cumplean, 또는 _os_를 포함한 게시물과는 일치하지 않습니다. 모든 연산자는 대소문자를 구분하지 않고 평가됩니다. 예를 들어, 규칙 cat은 다음 모두와 일치합니다: cat, CAT, Cat.
Search Posts의 매칭 방식은 필터링된 스트림과 다르게 동작합니다. Search Posts 쿼리를 빌드할 때, 악센트나 발음 구별 기호가 포함된 키워드와 해시태그는 해당 기호가 포함된 형태와 일반 문자 형태 모두와 일치한다는 점을 유의하세요.예를 들어, 키워드 Diacrítica 또는 해시태그 #cumpleaños가 포함된 Search Posts 쿼리는 Diacrítica 및 _#cumpleaños_는 물론 물결표가 있는 í 또는 eñe가 없는 Diacritica 또는 _#cumpleanos_와도 일치합니다.

구체성과 효율성

규칙을 만들기 시작할 때는 몇 가지를 염두에 두는 것이 중요합니다.
  • 단일 키워드나 #hashtag처럼 범위가 넓은 독립 연산자를 규칙에 사용하는 것은 일반적으로 권장되지 않습니다. 매칭되는 게시물의 양이 지나치게 많아질 수 있습니다. 보다 견고한 규칙을 만들면 더 구체적인 게시물만 일치하게 되어, 유용한 인사이트를 찾기 위해 살펴봐야 하는 페이로드의 잡음을 줄일 수 있습니다. 
    • 예를 들어, 규칙이 키워드 happy 하나뿐이라면 하루에 약 200,000~300,000개의 게시물이 수집될 수 있습니다.
    • 조건 연산자를 더 추가하면 검색 결과가 좁혀집니다. 예: (happy OR happiness) place_country:GB -birthday -is:retweet
  • 효율적인 규칙을 작성하면 규칙 길이(문자 수) 제한을 준수하는 데에도 도움이 됩니다. 문자 수에는 공백과 연산자를 포함한 전체 규칙 문자열이 모두 포함됩니다.
    • 예를 들어, 다음 규칙의 길이는 59자입니다: (happy OR happiness) place_country:GB -birthday -is:retweet

인용 트윗 매칭 동작

필터링된 스트림 엔드포인트를 사용할 때는 연산자가 인용한 원본 게시물의 내용과 인용 트윗에 포함된 내용 모두에 대해 일치합니다. 단, Search Posts 엔드포인트는 인용한 원본 게시물의 내용에는 일치하지 않고, 인용 트윗의 내용에는 일치합니다.

규칙을 단계적으로 구축하기

규칙은 이른 시점부터 자주 테스트하세요
처음부터 “정확한” 결과를 반환하는 규칙을 만들기는 드뭅니다. X에는 처음에는 명확하지 않을 수 있는 것이 매우 많고, 위에서 설명한 규칙 구문이 원하는 검색과 정확히 맞지 않을 수도 있습니다. 규칙을 만드는 동안 주기적으로 스트림 엔드포인트로 테스트하여 어떤 데이터가 반환되는지 확인하는 것이 중요합니다. 또한 사용 중인 연산자가 해당 엔드포인트에서도 지원된다면 Search Post 엔드포인트 중 하나로 테스트할 수도 있습니다. 이 섹션에서는 다음 규칙으로 시작해, 테스트에서 얻은 결과를 바탕으로 이를 조정해 보겠습니다. happy OR happiness
결과를 활용해 규칙 좁히기
규칙을 테스트할 때는 반환된 게시물을 훑어보며 기대한 데이터가 포함되어 있는지 확인해야 합니다. 규칙을 넓게 설정해 게시물 매칭의 상위 집합으로 시작하면, 결과를 검토한 뒤 원치 않는 결과를 걸러내도록 규칙을 점진적으로 좁힐 수 있습니다.   예시 규칙을 테스트해 보니 여러 언어의 게시물이 수집되었습니다. 이 경우에는 영어 게시물만 받기를 원하므로 lang: 연산자를 추가하겠습니다: (happy OR happiness) lang:en 테스트 결과 생일 축하 게시물이 다수 포함되어 있어 부정 키워드 연산자인 -birthday를 추가하겠습니다. 또한 원본 게시물만 받기를 원하므로 부정 연산자 -is:retweet도 추가합니다: (happy OR happiness) lang:en -birthday -is:retweet
필요한 경우 포함 범위 조정하기
예상한 데이터가 수집되지 않고, 반환되어야 할 기존 게시물이 존재함을 알고 있다면, 원하는 데이터를 걸러내는 연산자를 제거해 규칙의 범위를 넓여야 할 수 있습니다. 예시에서는 우리가 찾는 감정을 표현했지만 테스트 결과에는 포함되지 않은 다른 게시물들이 개인 타임라인에 있음을 확인했습니다. 더 넓은 범위를 확보하기 위해 키워드 excitedelated를 추가하겠습니다. (happy OR happiness OR excited OR elated) lang:en -birthday -is:retweet X에서는 트렌드가 빠르게 바뀝니다. 규칙 관리는 지속적으로 수행되어야 합니다. 한동안 단일 규칙을 사용할 계획이라면, 주기적으로 수집되는 데이터를 확인해 조정이 필요한지 점검할 것을 권장합니다. 예시에서는 사람들에게 “happy holidays”라고 인사하는 게시물이 유입되기 시작한 것을 확인했습니다. 이러한 게시물을 결과에서 제외하려면 부정 키워드인 -holidays를 추가합니다. (happy OR happiness OR excited OR elated) lang:en -birthday -is:retweet -holidays

규칙 추가 및 제거

스트림에서 규칙을 추가하거나 삭제할 때는 POST /2/tweets/search/stream/rules 엔드포인트를 사용합니다. 스트림에 하나 이상의 규칙을 추가하려면, 규칙이 포함된 value 매개변수와 선택 사항인 tag 매개변수(이 규칙과 일치하는 반환된 게시물을 식별하는 데 사용할 수 있는 자유 형식 텍스트)를 담은 배열을 포함한 add JSON 본문을 제출합니다. 예를 들어, 스트림에 규칙 여러 개를 추가하려는 경우 cURL 명령은 다음과 같을 수 있습니다:
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": "미디어 포함 고양이"},
    {"value": "cat has:media -grumpy", "tag": "미디어 포함 행복한 고양이"},
    {"value": "meme", "tag": "웃긴 것들"},
    {"value": "meme has:images"}
  ]
}'
마찬가지로 스트림에서 하나 이상의 규칙을 제거하려면, 삭제하려는 규칙의 ID를 포함한 id 매개변수 배열을 담은 delete JSON 본문을 제출하세요. 예를 들어, 스트림에서 여러 규칙을 제거하려는 경우 cURL 명령은 다음과 같을 수 있습니다:
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"
      ]
    }
  }'
여러 언어로 된 샘플 코드는 GitHub에서 확인할 수 있습니다.

규칙 예제

자연재해 추적
다음 규칙은 2017년 휴스턴을 강타한 허리케인 Harvey에 대해 다루는 기상 기관과 수위계의 게시물에 매칭되었습니다. matching rules 태그 사용과, 규칙을 POST /2/tweets/search/stream/rules endpoint에 제출할 때 사용해야 하는 JSON 형식에 주의하세요.
{
    "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": "theme:info has:geo 기상 기관 및 관측 장비의 원본"
}
대화의 감성 검토
다음 규칙은 해시태그 #nowplaying을 중심으로 전개되는 대화의 감성을 더 잘 파악하는 데 사용할 수 있지만, 북미 내에서 게시된 게시물에만 적용됩니다.
{
    "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"
},
{
    "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"
}
특정 게시물 주석과 연관된 게시물 찾기
이 규칙은 게시물의 언어가 일본어로 식별되고, 고양이가 아닌 반려동물 이미지를 포함한 원본 게시물을 검색하도록 설계되었습니다. 이를 위해 Post annotation 기능을 활용하는 context: 연산자를 사용했습니다. 먼저 Post lookup 엔드포인트와 tweet.fields=context_annotations 필드 매개변수를 사용하여 쿼리에 포함해야 할 domain.entity ID를 확인했습니다:
  • 고양이와 관련된 게시물은 domain 66(관심사 및 취미 카테고리)와 entity 852262932607926273(Cats)을 반환합니다.
  • 반려동물과 관련된 게시물은 domain 65(관심사 및 취미 버티컬)와 entity 852262932607926273(Pets)을 반환합니다.  
규칙은 다음과 같이 표시됩니다:
{
    "value": "context:65.852262932607926273 -context:66.852262932607926273 -is:retweet has:images lang:ja",
    "tag": "이미지가 포함된 일본어 반려동물 — 고양이 제외"
}

연산자

참고: 일부 연산자에는 대체 이름(별칭)이 있습니다.
| 연산자 | 유형 | 설명 | | :---------------------- | :------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ------ | ------ | --- | --- | ------ | ------- | ---- | ------ | ------ | ---- | ------ | -------- | ---- | ------ | ------ | ---- | ------ | ------- | ---- | ------ | ------- | ---- | ------ | --------- | ---- | ------ | ------- | ---- | ------ | -------- | ---- | ------ | ------- | ---- | ------ | ----- | ---- | ------ | ------ | ---- | ------ | ----- | ---- | ------ | ------- | ---- | ------ | -------- | ---- | ------ | ------- | ---- | ------ | ------ | ---- | ------ | -------- | ---- | ------ | ------ | ---- | ------ | ----- | ---- | ------ | -------- | ---- | ------ | -------------- | ---- | ------ | ------ | ---- | ------ | ----- | ---- | ------ | --------------- | --------- | ------ | --------- | ---- | ------ | --------- | ---- | ------ | ---------- | ---- | ------ | ------- | ---- | ------ | -------- | ---- | ------ | ------- | ---- | ------ | ----- | ---- | ------ | ------ | ---- | ------ | --- | ---- | ------ | ------- | ---- | ------ | ---------- | ---- | ------ | --------- | ---- | ------ | --------- | ---- | ------ | ------- | ---- | ------ | ------ | ---- | ------ | --------- | ---- | ------ | ----- | ---- | ------ | ------- | ---- | ------ | ------ | ---- | ------ | ------- | ---- | ------ | ------ | ---- | ------ | ---------- | ---- | ------ | -------- | ---- | ------ | ------- | ---- | ------ | ------- | ---- | ------ | ------------------ | ------- | ------ | ------ | ---- | ------ | ------- | ---- | ------ | ------ | ---- | ------ | --------- | ---- | ------ | -------------- | ----- | ------ | ------- | ---- | ------ | ------- | ---- | ------ | ------- | ---- | ------ | ----- | ---- | ------ | ------ | ---- | ------ | ---- | ---- | ------ | ------- | ---- | ------ | ------------------- | ------- | ------ | ------- | ---- | ------ | --------- | ---- | ------ | ---- | ---- | ------ | ------ | ---- | ------ | ---------- | ---- | ------ | ----- | ---- | --- | | keyword | 독립형 | 게시물 본문 내의 키워드를 매칭합니다. 토큰화된 매칭 방식으로, 키워드 문자열이 게시물 본문의 토큰화된 텍스트와 비교됩니다. 토큰화는 구두점, 기호 및 유니코드 기본 평면 구분 문자를 기준으로 단어를 분할합니다.
예를 들어, “I like coca-cola”라는 텍스트가 포함된 게시물은 I, like, coca, cola와 같은 토큰으로 분할됩니다. 이러한 토큰은 규칙에 사용된 키워드 문자열과 비교됩니다. 구두점(예: coca-cola), 기호 또는 구분 문자가 포함된 문자열을 매칭하려면 키워드를 큰따옴표로 묶어야 합니다.

예시: pepsi OR cola OR "coca cola" | | emoji | 독립형 | 게시물 본문 내의 이모지를 매칭합니다. 키워드와 마찬가지로 이모지는 토큰화된 매칭 방식으로, 이모지가 게시물 본문의 토큰화된 텍스트와 비교됩니다.

이모지에 변형이 있는 경우 규칙에 추가하려면 큰따옴표로 묶어야 합니다.

예시: (😃 OR 😡) 😬 | | "exact phrase match" | 독립형 | 게시물 본문 내의 정확한 구문을 매칭합니다.

예시: ("X API" OR #v2) -"filtered stream" | | "keyword1 keyword2"~N | 독립형 | 키워드가 서로 N개의 토큰 이내에 있는 게시물을 매칭하는 근접 연산자입니다.
역순의 키워드는 최대 N-2개의 토큰 간격으로 떨어져 있을 수 있습니다. N6보다 클 수 없습니다.

예시: "social media"~5 OR "API"~3 | | # | 독립형 | 해시태그가 게시물에서 인식된 엔티티인 경우, 인식된 해시태그를 포함하는 모든 게시물을 매칭합니다.

이 연산자는 정확한 매칭을 수행하며, 토큰화된 매칭이 아닙니다. 즉, #thanku 규칙은 정확히 #thanku 해시태그가 있는 게시물을 매칭하지만, #thankunext 해시태그가 있는 게시물은 매칭하지 않습니다.

예시: #thankunext #fanart OR @arianagrande | | @ | 독립형 | 사용자 이름이 인식된 엔티티인 경우(@ 문자 포함), 지정된 사용자 이름을 언급하는 모든 게시물을 매칭합니다.

예시: (@XDevelopers OR @api) -@x | | $ | 독립형 | 지정된 ‘캐시태그’(토큰의 선행 문자가 문자인 경우)를 포함하는 모든 게시물을 매칭합니다.<br /><br />캐시태그 연산자는 본문 자체에서 캐시태그를 추출하는 대신 X의 &#39;심볼&#39; 엔티티 추출 기능을 사용하여 캐시태그를 매칭합니다.<br /><br />예시: `twtr OR @XDevelopers -fb` | | `from:` | 독립형 | 특정 사용자의 모든 게시물을 매칭합니다.<br />값은 사용자 이름(@ 문자 제외) 또는 사용자의 숫자 사용자 ID일 수 있습니다.<br /><br />`from:` 연산자당 하나의 사용자 이름/ID만 전달할 수 있습니다.<br /><br />예시: `from:XDevelopers OR from:api -from:X` | | `to:` | 독립형 | 특정 사용자에 대한 답글인 모든 게시물을 매칭합니다.<br />값은 사용자 이름(@ 문자 제외) 또는 사용자의 숫자 사용자 ID일 수 있습니다.<br /><br />`to:` 연산자당 하나의 사용자 이름/ID만 전달할 수 있습니다.<br /><br />예시: `to:XDevelopers OR to:api -to:x` | | `url:` | 독립형 | 게시물의 유효한 형식의 URL에 대해 토큰화된 매칭을 수행합니다.<br /><br />이 연산자는 `url` 또는 `expanded_url` 필드의 내용을 모두 매칭할 수 있습니다. 예를 들어, &quot;You should check out X Developer Labs: https://t.co/c0A36SWil4&quot;(짧은 URL이 https://developer.x.com으로 리디렉션됨)를 포함하는 게시물은 다음 두 규칙을 모두 매칭합니다:<br /><br />`from:XDevelopers url:"https://developer.x.com"`<br />(`entities.urls.expanded_url`의 내용을 매칭하기 때문)<br /><br />`from:XDevelopers url:"https://t.co"`<br />(`entities.urls.url`의 내용을 매칭하기 때문)<br /><br />구두점이나 특수 문자가 포함된 토큰과 구문은 큰따옴표로 묶어야 합니다(예: `url:"/developer"`). 마찬가지로 특정 프로토콜을 매칭하려면 큰따옴표로 묶어야 합니다(예: `url:"https://developer.x.com"`).<br /><br />`url:` 연산자당 하나의 URL만 전달할 수 있습니다. | | `retweets_of:` | 독립형 | *사용 가능한 별칭:* `retweets_of_user:`<br />지정된 사용자의 리트윗인 게시물을 매칭합니다. 값은 사용자 이름(@ 문자 제외) 또는 사용자의 숫자 사용자 ID일 수 있습니다.<br /><br />`retweets_of:` 연산자당 하나의 사용자 이름/ID만 전달할 수 있습니다.<br /><br />예시: `retweets_of:XDevelopers OR retweets_of:twitterapi`<br />숫자 X 계정 ID를 조회하는 방법은 [여기](/ko/x-api/users/lookup/introduction)를 참조하세요. | | `context:` | 독립형 | 특정 도메인 id 및/또는 도메인 id, 엔티티 id 쌍이 있는 게시물을 매칭합니다. 여기서 &#95;는 와일드카드를 나타냅니다. 이 연산자에 대한 자세한 내용은 [게시물 주석](/ko/x-api/fundamentals/post-annotations) 페이지를 참조하세요.<br /><br />`context:` 연산자당 하나의 도메인/엔티티만 전달할 수 있습니다.<br /><br />`context:domain_id.entity_id`<br />`context:domain_id._`<br />`context:_.entity_id`<br /><br />예시:<br />`context:10.799022225751871488`<br />(`domain_id.entity_id`는 해당 특정 도메인-엔티티 쌍과 매칭되는 게시물을 반환)<br /><br />`context:47._`<br />(`domain_id._`는 해당 도메인 ID와 매칭되는 게시물을 모든 도메인-엔티티 쌍과 함께 반환)<br /><br />`context:_.799022225751871488`<br />(`\*.entity_id`는 해당 엔티티 ID와 매칭되는 게시물을 모든 도메인-엔티티 쌍과 함께 반환) | | `entity:` | Standalone | 특정 엔티티 문자열 값을 가진 게시물과 일치합니다. 이 연산자에 대한 자세한 내용은 [주석](/ko/x-api/fundamentals/post-annotations) 페이지를 참조하세요.<br /><br />`entity:` 연산자당 하나의 엔티티만 전달할 수 있습니다.<br /><br />`entity:"엔티티/장소의 문자열 선언"`<br /><br />예시: `entity:"Michael Jordan" OR entity:"Barcelona"` | | `conversation_id:` | Standalone | 공통 대화 ID를 공유하는 게시물과 일치합니다. 대화 ID는 대화를 시작한 게시물의 게시물 ID로 설정됩니다. 게시물에 대한 답글이 게시되면, 답글에 대한 답글까지도 `conversation_id`가 JSON 페이로드에 추가됩니다.<br /><br />`conversation_id:` 연산자당 하나의 대화 ID만 전달할 수 있습니다.<br /><br />예시: `conversation_id:1334987486343299072 (from:XDevelopers OR from:api)` | | `bio:` | Standalone | *사용 가능한 별칭:* `user_bio:`<br />게시물 게시자의 소개에서 키워드 또는 구문과 일치합니다. 이는 [User 객체](/ko/x-api/fundamentals/data-dictionary#user) 내 `description` 필드의 내용에서 토큰화된 일치입니다.<br /><br />예시: `bio:developer OR bio:"data engineer" OR bio:academic` | | `bio_name:` | Standalone | 게시물 게시자의 사용자 소개 이름에서 키워드와 일치합니다. 이는 [User 객체](/ko/x-api/fundamentals/data-dictionary#user) 내 사용자의 &quot;name&quot; 필드의 내용에서 토큰화된 일치입니다.<br /><br />예시: `bio_name:phd OR bio_name:md` | | `bio_location:` | Standalone | *사용 가능한 별칭:* `user_bio_location:`<br />위치에 지정된 키워드 또는 구문이 포함된 사용자가 게시한 게시물과 일치합니다. 이 연산자는 메시지 본문의 일반 키워드 규칙과 유사하게 토큰화된 일치를 수행합니다.<br /><br />이 위치는 [User 객체](/ko/x-api/fundamentals/data-dictionary#user)의 일부이며, &#39;location&#39; 필드와 일치하고, 정규화되지 않은 사용자 생성 자유 형식 문자열입니다. 또한 게시물의 위치(`place:` 참조)와는 다릅니다.<br /><br />예시: `bio_location:"big apple" OR bio_location:nyc OR bio_location:manhattan` | | `place:` | Standalone | 지정된 위치 또는 X 장소 ID로 태그된 게시물과 일치합니다. 여러 단어로 된 장소 이름(&quot;New York City&quot;, &quot;Palo Alto&quot;)은 따옴표로 묶어야 합니다.<br /><br />`place:` 연산자당 하나의 장소만 전달할 수 있습니다.<br /><br />참고: X 장소 ID를 얻는 방법은 [GET geo/search](https://developer.x.com/content/developer-twitter/en/docs/geo/places-near-location/api-reference/get-geo-search) Standard v1.1 엔드포인트를 참조하세요.<br /><br />참고: 이 연산자는 리트윗과 일치하지 않습니다. 리트윗의 장소는 원본 게시물에 첨부되기 때문입니다. 또한 인용 게시물의 원본 게시물에 첨부된 장소와도 일치하지 않습니다.<br /><br />예시: `place:"new york city" OR place:seattle OR place:fd70c22040963ac7` | | `place_country:` | Standalone | 태그된 장소/위치와 연결된 국가 코드가 주어진 ISO alpha-2 문자 코드와 일치하는 게시물과 일치합니다.<br /><br />유효한 ISO 코드 목록은 [Wikipedia](http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)에서 찾을 수 있습니다.<br /><br />`place_country:` 연산자당 하나의 ISO 코드만 전달할 수 있습니다.<br /><br />참고: 이 연산자는 리트윗과 일치하지 않습니다. 리트윗의 장소는 원본 게시물에 첨부되기 때문입니다. 또한 인용 게시물의 원본 게시물에 첨부된 장소와도 일치하지 않습니다.<br /><br />예시: `place_country:US OR place_country:MX OR place_country:CA` | | `point_radius:` | Standalone | 게시물의 `place.geo.coordinates` 객체가 있을 때 이와 일치하며, X에서는 장소 지오 폴리곤이 정의된 영역 내에 완전히 포함되어 있는 경우 장소 지오 폴리곤과 일치합니다.<br /><br />`point_radius:[경도 위도 반경]`<br /><br />- 지원되는 반경 단위는 마일(mi)과 킬로미터(km)입니다<br />- 반경은 25mi 미만이어야 합니다<br />- 경도는 ±180 범위입니다<br />- 위도는 ±90 범위입니다<br />- 모든 좌표는 십진 도 단위입니다<br />- 규칙 인수는 대괄호 안에 공백으로 구분되어 포함됩니다<br /><br />`point_radius:` 연산자당 하나의 지오 폴리곤만 전달할 수 있습니다.<br /><br />참고: 이 연산자는 리트윗과 일치하지 않습니다. 리트윗의 장소는 원본 게시물에 첨부되기 때문입니다. 또한 인용 게시물의 원본 게시물에 첨부된 장소와도 일치하지 않습니다.<br /><br />예시: `point_radius:[2.355128 48.861118 16km] OR point_radius:[-41.287336 174.761070 20mi]` | | `bounding_box:` | Standalone | *사용 가능한 별칭:* `geo_bounding_box:`<br />게시물의 place.geo.coordinates 객체가 있을 때 이와 일치하며, X에서는 장소 폴리곤이 정의된 영역 내에 완전히 포함되어 있는 경우 장소 지오 폴리곤과 일치합니다.<br /><br />`bounding_box:[서쪽_경도 남쪽_위도 동쪽_경도 북쪽_위도]`<br /><br />- `서쪽_경도 남쪽_위도`는 경계 상자의 남서쪽 모서리를 나타내며, `서쪽_경도`는 해당 지점의 경도이고 `남쪽_위도`는 위도입니다.<br />- `동쪽_경도 북쪽_위도`는 경계 상자의 북동쪽 모서리를 나타내며, `동쪽_경도`는 해당 지점의 경도이고 `북쪽_위도`는 위도입니다.<br />- 경계 상자의 너비와 높이는 25mi 미만이어야 합니다<br />- 경도는 ±180 범위입니다<br />- 위도는 ±90 범위입니다<br />- 모든 좌표는 십진 도 단위입니다.<br />- 규칙 인수는 대괄호 안에 공백으로 구분되어 포함됩니다.<br /><br />`bounding_box:` 연산자당 하나의 지오 폴리곤만 전달할 수 있습니다.<br /><br />참고: 이 연산자는 리트윗과 일치하지 않습니다. 리트윗의 장소는 원본 게시물에 첨부되기 때문입니다. 또한 인용 게시물의 원본 게시물에 첨부된 장소와도 일치하지 않습니다.<br /><br />예시: `bounding_box:[-105.301758 39.964069 -105.178505 40.09455]` | | `is:retweet` | Conjunction required | 지정된 규칙의 나머지 부분과 일치하는 리트윗과 일치합니다. 이 연산자는 진정한 리트윗(예: 리트윗 버튼을 사용하여 생성된 것)만 찾습니다. 인용 게시물은 이 연산자와 일치하지 않습니다.<br /><br />예시: `data @XDevelopers -is:retweet` | | `is:reply` | Conjunction required | 규칙과 일치하는 명시적 답글만 전달합니다. 규칙과 일치하는 답글을 전달에서 제외하기 위해 부정할 수도 있습니다.<br /><br />필터링된 스트림과 함께 사용할 때 이 연산자는 원본 게시물에 대한 답글, 인용된 게시물의 답글 및 리트윗의 답글과 일치합니다.<br /><br />예시: `from:XDevelopers is:reply` | | `is:quote` | Conjunction required | 댓글이 있는 게시물로도 알려진 모든 인용 게시물을 반환합니다.<br /><br />예시: `"sentiment analysis" is:quote` | | `is:verified` | Conjunction required | X에서 인증된 작성자의 게시물만 전달합니다.<br /><br />예시: `#nowplaying is:verified` | | `-is:nullcast` | Conjunction required | `source:"Twitter for Advertisers (legacy)"` 또는 `source:"Twitter for Advertisers"`가 있는 ads.twitter.com에서 프로모션 전용으로 생성된 게시물을 제거합니다.<br />이 연산자는 반드시 부정되어야 합니다.<br /><br />Nullcasted 게시물에 대한 자세한 내용은 [게시물 가용성](https://developer.x.com/content/developer-twitter/en/docs/twitter-api/v1/tweets/post-and-engage/guides/tweet-availability) 페이지를 참조하세요.<br /><br />예시: `"mobile games" -is:nullcast` | | `has:hashtags` | Conjunction required | 하나 이상의 해시태그를 포함하는 게시물과 일치합니다.<br /><br />예시: `from:XDevelopers -has:hashtags` | | `has:cashtags` | Conjunction required | 캐시태그 기호(선행 &#39;’ 문자 포함. 예: $tag)를 포함하는 게시물과 일치합니다.

예시: #stonks has:cashtags | | has:links | 결합 연산자 필요 | 이 연산자는 게시물 본문에 링크와 미디어가 포함된 게시물과 일치합니다.

예시: from:XDevelopers announcement has:links | | has:mentions | 결합 연산자 필요 | 다른 X 사용자를 멘션하는 게시물과 일치합니다.

예시: #nowplaying has:mentions | | has:media | 결합 연산자 필요 | 사용 가능한 별칭: has:media_link
X에서 판단한 사진, GIF 또는 동영상과 같은 미디어 객체가 포함된 게시물과 일치합니다. Periscope로 생성된 미디어 또는 다른 미디어 호스팅 사이트로의 링크가 있는 게시물과는 일치하지 않습니다.

예시: (kittens OR puppies) has:media | | has:images | 결합 연산자 필요 | 인식된 이미지 URL이 포함된 게시물과 일치합니다.

예시: #meme has:images | | has:video_link | 결합 연산자 필요 | 사용 가능한 별칭: has:videos
X에 직접 업로드된 네이티브 X 동영상이 포함된 게시물과 일치합니다. Periscope로 생성된 동영상 또는 다른 동영상 호스팅 사이트로의 링크가 있는 게시물과는 일치하지 않습니다.

예시: #icebucketchallenge has:video_link | | has:geo | 결합 연산자 필요 | X 사용자가 제공한 게시물별 지리적 위치 데이터가 있는 게시물과 일치합니다. 이는 해당 표시 이름, 지리적 폴리곤 및 기타 필드가 있는 X 장소 형태의 위치이거나, 드문 경우 지리적 위도-경도 좌표일 수 있습니다.

참고: 장소(게시물 지리 정보)와 일치하는 연산자는 원본 게시물의 일치 항목만 포함합니다. 리트윗에는 장소 데이터가 포함되지 않습니다.

예시: recommend #paris has:geo -bakery | | sample: | 결합 연산자 필요 | 규칙과 일치하는 전체 게시물 집합이 아닌 무작위 백분율 샘플을 반환합니다. 백분율 값은 1에서 100 사이의 정수로 표현되어야 합니다(예: sample:10은 무작위 10% 샘플을 반환합니다).

이 연산자는 먼저 스트림의 범위를 지정한 백분율로 줄인 다음, 샘플링된 하위 집합에 규칙/필터를 적용합니다. 즉, 예를 들어 sample:10을 사용하는 경우 각 게시물은 샘플에 포함될 확률이 10%입니다.

이 연산자는 전체 규칙에 적용되며 모든 OR로 연결된 용어를 그룹화해야 합니다.

예시: #nowplaying @spotify sample:15 | | lang: | 결합 연산자 필요 | X에서 특정 언어로 분류된 게시물과 일치합니다(게시물이 분류된 경우에만). 각 게시물은 현재 하나의 언어로만 분류되므로 여러 언어를 AND로 연결하면 결과가 나오지 않습니다.

lang: 연산자당 단일 BCP 47 언어 식별자만 전달할 수 있습니다.

참고: 언어 분류를 수행할 수 없는 경우 제공되는 결과는 ‘und’(정의되지 않음)입니다.

예시: recommend #paris lang:en

아래 목록은 현재 지원되는 언어와 해당 BCP 47 언어 식별자를 나타냅니다:

| 언어 | BCP 47 |
| - | - |
| 암하라어 | am |
| 아랍어 | ar |
| 아르메니아어 | hy |
| 바스크어 | eu |
| 벵골어 | bn |
| 보스니아어 | bs |
| 불가리아어 | bg |
| 버마어 | my |
| 크로아티아어 | hr |
| 카탈로니아어 | ca |
| 체코어 | cs |
| 덴마크어 | da |
| 네덜란드어 | nl |
| 영어 | en |
| 에스토니아어 | et |
| 핀란드어 | fi |
| 프랑스어 | fr |
| 조지아어 | ka |
| 독일어 | de |
| 그리스어 | el |
| 구자라트어 | gu |
| 아이티 크레올어 | ht |
| 히브리어 | iw |
| 힌디어 | hi |
| 라틴 문자 힌디어 | hi-Latn |
| 헝가리어 | hu |
| 아이슬란드어 | is |
| 인도네시아어 | in |
| 이탈리아어 | it |
| 일본어 | ja |
| 칸나다어 | kn |
| 크메르어 | km |
| 한국어 | ko |
| 라오어 | lo |
| 라트비아어 | lv |
| 리투아니아어 | lt |
| 말라얄람어 | ml |
| 몰디브어 | dv |
| 마라티어 | mr |
| 네팔어 | ne |
| 노르웨이어 | no |
| 오리야어 | or |
| 펀자브어 | pa |
| 파슈토어 | ps |
| 페르시아어 | fa |
| 폴란드어 | pl |
| 포르투갈어 | pt |
| 루마니아어 | ro |
| 러시아어 | ru |
| 세르비아어 | sr |
| 중국어 간체 | zh-CN |
| 신디어 | sd |
| 싱할라어 | si |
| 슬로바키아어 | sk |
| 슬로베니아어 | sl |
| 소라니 쿠르드어 | ckb |
| 스페인어 | es |
| 스웨덴어 | sv |
| 타갈로그어 | tl |
| 타밀어 | ta |
| 텔루구어 | te |
| 태국어 | th |
| 티베트어 | bo |
| 중국어 번체 | zh-TW |
| 터키어 | tr |
| 우크라이나어 | uk |
| 우르두어 | ur |
| 위구르어 | ug |
| 베트남어 | vi |
| 웨일스어 | cy | | | followers_count: | | 작성자의 팔로워 수가 지정된 범위 내에 있을 때 게시물과 일치합니다.
단일 숫자가 지정된 경우 해당 숫자 이상의 모든 숫자가 일치합니다.

예시: followers_count:500

또한 범위를 지정하여 지정된 범위 내의 모든 숫자와 일치시킬 수 있습니다.

예시: followers_count:1000..10000 | | tweets_count: | | 사용 가능한 별칭: statuses_count:
작성자가 게시한 게시물 수가 지정된 범위 내에 있을 때 게시물과 일치합니다.
단일 숫자가 지정된 경우 해당 숫자 이상의 모든 숫자가 일치합니다.

예시: tweets_count:1000

또한 범위를 지정하여 지정된 범위 내의 모든 숫자와 일치시킬 수 있습니다.

예시: tweets_count:1000..10000 | | following_count: | | 사용 가능한 별칭: friends_count:
작성자의 친구 수(팔로우하는 사용자 수)가 지정된 범위 내에 있을 때 게시물과 일치합니다.
단일 숫자가 지정된 경우 해당 숫자 이상의 모든 숫자가 일치합니다.

예시: following_count:500

또한 범위를 지정하여 지정된 범위 내의 모든 숫자와 일치시킬 수 있습니다.

예시: following_count:1000..10000 | | listed_count: | | 사용 가능한 별칭: user_in_lists_count:
작성자가 지정된 수의 목록에 포함되어 있을 때 게시물과 일치합니다.
단일 숫자가 지정된 경우 해당 숫자 이상의 모든 숫자가 일치합니다.

예시: listed_count:10

또한 범위를 지정하여 지정된 범위 내의 모든 숫자와 일치시킬 수 있습니다.

예시: listed_count:10..100 | | url_title: | | 사용 가능한 별칭: within_url_title:
확장된 URL HTML 제목 메타데이터에서 키워드/구문 일치를 수행합니다.

예시: url_title:snow | | url_description: | | 사용 가능한 별칭: within_url_description:
확장된 페이지 설명 메타데이터에서 키워드/구문 일치를 수행합니다.

예시: url_description:weather | | url_contains: | | 지정된 구문이나 키워드가 문자 그대로 포함된 URL을 가진 게시물과 일치합니다. 구두점이 포함된 패턴(예: google.com)을 검색하려면 검색어를 따옴표로 묶으세요.
참고: 확장된 URL에 대해서도 일치합니다.

예시: url_contains:photos | | source: | | 지정된 소스 애플리케이션에서 생성된 모든 게시물과 일치합니다. 값은 애플리케이션의 이름 또는 애플리케이션의 URL이어야 합니다. 단독으로 사용할 수 없습니다.

예시: source:"X for iPhone"

참고: X 앱 개발자로서, 애플리케이션에 의해 프로그래밍 방식으로 생성된 게시물은 앱 설정에서 설정한 애플리케이션 이름과 웹사이트 URL을 소스로 갖습니다. | | in_reply_to_tweet_id: | | 사용 가능한 별칭: in_reply_to_status_id:
지정된 게시물에 대한 명시적 답글만 반환합니다.

예시: in_reply_to_tweet_id:1539382664746020864 | | retweets_of_tweet_id: | | 사용 가능한 별칭: retweets_of_status_id:
지정된 게시물의 명시적(또는 네이티브) 리트윗만 반환합니다. 사용되는 상태 ID는 리트윗이 아닌 원본 게시물의 ID여야 합니다.

예시: retweets_of_tweet_id:1539382664746020864 |