ご注意ください X API v2 向けに新しいコンプライアンスツールであるバッチコンプライアンスをリリースしました。このツールを使うと、Post またはユーザーの id からなる大規模データセットをアップロードし、そのコンプライアンス状態を取得して、データセットを適合させるために対応が必要なデータを特定できます。
また、バッチコンプライアンスとコンプライアンス Firehose の両方が Post の編集に対応するよう更新されました。コンプライアンス Firehose には新たに「tweet_edit」イベントが追加されています。詳細はCompliance Data Objectsのドキュメントをご覧ください。Edit Posts の基本ページでは、Edit Post メタデータの仕組みについて詳しく説明しています。
概要
Enterprise
X の中核的な価値のひとつは、ユーザーの声を守り尊重することです。これには、ユーザーが X 上で共有するコンテンツを削除・変更・編集するときの期待や意図を尊重することが含まれます。これは、世界最大級の公開リアルタイム情報プラットフォームの長期的な健全性にとって極めて重要であると私たちは考えています。X はコントロールをユーザーの手に委ね、各個人が自身の X 体験を管理できるようにしています。X のデータを受領するビジネス利用者には、エンドユーザーの期待と意図を尊重する責任があると信じています。
X プラットフォームで発生し得るコンプライアンスイベントの種類については、記事「X におけるユーザーの意図の尊重」を参照してください。
API を通じて X のデータを利用するすべての開発者や企業には、ユーザーコンテンツの変更を尊重するために、合理的に可能なあらゆる努力を尽くす義務があります。この義務は、削除、変更、共有オプションの変更(例: コンテンツが保護対象になる、または公開停止される)などのユーザーイベントにも及びます。ユーザーが自身の Post を編集した場合も含まれます。この義務が X データの利用にどのように影響するかについては、Developer Policy および/またはお客様の X Data Agreement の該当箇所を参照してください。
X は、これらのユーザーコンプライアンスイベントに関する情報と、特定の Post または User が公開状態か否かを提供する以下のソリューションを提供しています。各ソリューションの概要と一般的な統合パターンを以下に示します。
GET statuses/lookup と GET users/lookup
- 形式: REST API。参照: GET statuses/lookup および GET users/lookup。
- これらのエンドポイントは、常にPostの編集に関する最新バージョンを返します。編集機能の導入以降に作成されたPostを表すすべてのPostオブジェクトには、Post編集メタデータが含まれます。これは、実際に編集されていないPostでも同様です。
- すべてのPostについて、作成から30分を超えて行われたリクエストでは、Postの最終状態が返されます。
- APIリクエスト内で呼び出し元が指定した特定のPostまたはUserの可用性情報を返します。
- 特定のPost/Userグループの現在の可用性状態をアドホックにスポットチェックする用途に使用できます。
- 特定の時点における特定のPostまたはUserの現在の状態を確認する必要があるお客様に最適です。
-
これらのAPIは、コンテンツの可用性を確認する必要があるお客様に役立つ手段を提供します。たとえば次の場合:
- Postの表示
- PostやUserとの1対1でのエンゲージメント
- 許可されたファイルダウンロードを通じたXコンテンツの第三者への配信
- Postの長期保存
Compliance Firehose(エンタープライズ限定)
- 形式: ストリーミング API 詳細: Compliance Firehose。
- X 上のコンプライアンスアクティビティをリアルタイムでストリーミング配信します。これらのアクティビティには、Post の編集などが含まれます。
- プラットフォームで新たなコンプライアイベントが発生するたびに、保存済みデータ一式のコンプライアンス状態を維持する用途に利用できます。
- X のデータを長期間にわたり大量に収集・保存するお客様に最適です。
ガイド
コンプライアンスのベストプラクティス
推奨事項とベストプラクティス
- 数値の Post ID と User ID を格納するデータストレージスキーマを設計する: ユーザーに関するメッセージは、そのユーザーのすべての Post に対してアクションが必要です。すべてのコンプライアンスメッセージは数値 ID のみで配信されるため、数値 ID に基づいて Post と User の関係を保持できるよう、ストレージスキーマを設計することが重要です。データ利用者は、Post ID と User ID の両方でコンプライアンスイベントを監視し、ローカルデータストアを適切に更新できる必要があります。
- すべてのコンプライアンスステータスに対応するスキーマを構築する: アプリケーションでのコンプライアンス対応方法によっては、データストアに追加のメタデータを持たせる必要がある場合があります。たとえば、status_withheld メッセージの対象となる国でのコンテンツ表示制限を容易にするため、既存のデータベースにメタデータを追加する判断をすることがあります。
- リツイート削除の取り扱い: リツイートは、元のメッセージがその内部のオブジェクトとしてネストされる特殊な種類の Post です。この場合、リツイートでは 2 つの Post ID が参照されます—リツイート自体の ID と、ネストされたオブジェクトに含まれる元のメッセージの ID です。元のメッセージが削除されると、元の ID に対して Post の削除メッセージが発行されます。Post の削除イベントは通常、すべてのリツイートの削除イベントを誘発しますが、場合によってはすべてが送信されないことがあるため、クライアントシステムは不完全なリツイート削除に耐性を持つべきです。元の ID の削除だけで、後続のすべてのリツイートを削除するには十分なはずです。ベストプラクティスとして、リツイートを保存する際は元の Post ID を参照し、Post の削除イベントを受信した際には参照されているすべてのリツイートを削除することを推奨します。
コンプライアンス・データオブジェクト
Compliance Firehose API
- Userのステータスの詳細はこちら、削除されたPostに関する開発者向けポリシーはこちらをご覧ください。
- Compliance Firehoseは’tweet_edit’イベントに対応するよう更新されました。
- 一部のUserのdelete、protect、suspendイベントは必ずしも恒久的ではなく、状態が無期限に切り替わる可能性があります。これには、user_delete、user_undelete、user_protect、user_unprotect、user_suspend、user_unsuspendが含まれます。
- user_deleteの後続としてのstatus_deleteは、ユーザーがアカウントのuser_undeleteを選択していない場合に限り30日後に発生します。user_deleteがユーザーによって取り消され、そのユーザーのすべてのPostに対する30日後の削除が発生しない可能性があります。
- user_suspendは、ユーザーがuser_unsuspendイベントの対象とならない限り有効のままです。これらは30日間の猶予期間による変更の対象ではありません。
| Original Message Type | Object | Permanent (Yes/No) | Recommended Action |
|---|---|---|---|
| delete | Status | Yes | 関連するPostを削除。 |
| status_withheld | Status | Yes | status_withheldメッセージに記載の特定の国で関連するPostを抑止する。 |
| drop | Status | No | Postを公開表示から外す。 |
| undrop | Status | No | Statusは再度表示され、公開として扱われ得る。 |
| tweet_edit | Status | Yes | 変更を反映し、該当する場合は新しい編集内容を表示する。 |
| user_delete | User | No | 当該ユーザーのすべてのPostを抑止または削除する。 |
| user_undelete | User | No | 当該ユーザーのすべてのPostは再度表示され、公開として扱われ得る。 |
| user_protect | User | No | 当該ユーザーのすべてのPostを抑止または削除する。 |
| user_unprotect | User | No | 当該ユーザーのすべてのPostは再度表示され、公開として扱われ得る。 |
| user_suspend | User | No | 当該ユーザーのすべてのPostを抑止または削除する。 |
| user_unsuspend | User | No | 当該ユーザーのすべてのPostは再度表示され、公開として扱われ得る。 |
| scrub_geo | User | Yes | scrub_geoメッセージで指定されたPost以前の、当該ユーザーのすべてのPostに対してXが提供した地理データを削除する。なお、その後のPostには利用可能な地理データが含まれる場合がある。 |
| user_withheld | User | Yes | user_withheldメッセージに記載の特定の国で当該ユーザーのPostを抑止する。 |
| delete | Favorite | Yes | 関連するlike/favoriteを削除。 |
ペイロード例
Post の削除
保留された Post
ドロップ
Undrop
位置情報の消去
ユーザーの削除
ユーザーの削除取り消し
ユーザーの情報非公開
ユーザー保護
ユーザーの保護解除
ユーザーの一時停止
ユーザーのアカウント停止解除
Compliance Firehose の統合
Compliance Firehose との統合
- Compliance Firehose の各ストリーミング API パーティションに対してストリーミング接続を確立する
- 大量データに対応する — 非同期プロセスを用いて、ストリームの取り込みを後続処理から分離する
- いかなる理由で切断された場合でも、ストリームパーティションに自動的に再接続する
- 上記のガイダンスに従い、保存している Post および User のデータに関連するコンプライアンスイベントを処理する
X におけるユーザーの意図を尊重する
ユーザー
| アクション | 説明 |
|---|---|
| アカウントを保護 | X のユーザーは、いつでも自分のアカウントを保護または保護解除できます。保護されたアカウントでは、そのアカウントの Post を閲覧できるユーザーを一人ひとり手動で承認する必要があります。 詳細は、公開 Post と保護された Post についてをご覧ください。 |
| アカウントを削除 | X のユーザーは、いつでも自分のアカウントと関連するすべてのステータスメッセージを削除できます。X は、ユーザーが削除を取り消して実質的にアカウントを再有効化できるよう、削除後 30 日間アカウント情報を保持します。 |
| 位置情報をスクラブ | X のユーザーは、いつでも過去の Post からすべての位置情報データを削除できます。これは「scrub geo」と呼ばれます。 |
| アカウントを凍結 | X は、X ルールに違反しているアカウント、またはハッキングや不正アクセスの疑いがあるアカウントを凍結する権利を有します。アカウントの凍結解除は X のみが行うことができます。 |
| アカウントを保留 | X は、特定の国において特定のコンテンツへのアクセスを必要に応じて差し止める(保留にする)権利を有します。保留となったアカウントの解除は X のみが行うことができます。 詳細は、国別の差し止めコンテンツをご覧ください。 |
ステータス
| アクション | 説明 |
|---|---|
| ステータスの削除 | X のユーザーはいつでもステータスを削除できます。削除されたステータスは元に戻せず、恒久的に削除されます。 |
| ステータスの保留 | X は、必要に応じて特定の国において特定のコンテンツへのアクセスを保留する権利を有します。保留されたステータスは、X のみが保留解除できます。 詳細は Country Withheld Content を参照してください。 |
ユーザーおよびステータスの変更の追跡
API リファレンス
GET compliance/firehose
メソッド
| メソッド | 説明 |
|---|---|
| GET /compliance/:stream | データストリームに接続 |
認証
GET /compliance/:stream
| Request Method | HTTP GET |
| Connection Type | Keep-Alive |
| URL | ダッシュボードのストリームの API Help ページに記載されており、次の構造に類似します: https://gnip-stream.x.com/stream/compliance/accounts/:account_name/publishers/twitter/:stream_label.json?partition=1 Note: “partition” パラメータは必須です。全ボリュームのそれぞれ 12.5% を含む 8 つのパーティションすべてに接続する必要があり、フルストリームを取得するには全てに接続してください。 |
| Compression | Gzip。Gzip 圧縮を使用してストリームに接続するには、接続リクエストで Accept-Encoding ヘッダーを送信します。ヘッダーは次のとおりです: Accept-Encoding: gzip |
| Character Encoding | UTF-8 |
| Response Format | JSON。レスポンス形式として JSON を指定するヘッダーを設定してください。 |
| Rate Limit | 60 秒あたり 10 リクエスト。 |
| Read Timeout | クライアントで読み取りタイムアウトを設定し、30 秒を超える値にしてください。 |
| Support for Tweet edits | すべての Tweet の編集は “tweet_edit” コンプライアンスイベントをトリガーします。詳細は Compliance Data Objects ドキュメントをご参照ください。 |
partition=1 にのみ接続しています。ストリーム全体を取得するには、8 つすべてのパーティションに接続する必要があります。
レスポンスコード
| ステータス | テキスト | 定義 |
|---|---|---|
| 200 | 成功 | 接続は正常に確立され、到着次第、新しいアクティビティが送信されます。 |
| 401 | 認証失敗 | 無効な認証情報のため、HTTP 認証に失敗しました。リクエストで正しく使用できているか確認するため、認証情報で console.gnip.com にログインしてください。 |
| 406 | 受理不可 | 一般的には、クライアントがストリームの gzip 圧縮を受け入れるためのヘッダーを正しく含めていない場合に発生しますが、他の状況でも発生することがあります。本文には次のような JSON メッセージが含まれます。「この接続には圧縮が必要です。圧縮を有効にするには、リクエストに ‘Accept-Encoding: gzip’ ヘッダーを送信し、クライアント側で読み取り時にストリームを解凍できるようにしてください。」 |
| 429 | レート制限 | アプリが接続リクエストの上限を超過しました。 |
| 503 | サービス利用不可 | X サーバー側の問題です。指数バックオフ方式で再接続してください。この問題に関する通知が X API Status Page に掲載されていない場合は、サポートに連絡してください。 |
その他の推奨事項とベストプラクティス
- 数値の Tweet ID と User ID を保存するデータストレージスキーマを構築する: ユーザーに関するメッセージは、そのユーザーのすべての Tweet に対する対応を必要とします。したがって、すべてのコンプライアンスメッセージは数値 ID でのみ配信されるため、数値 ID に基づいて Tweet と User の関係を保持できるストレージスキーマを設計することが重要です。データ利用者は、Tweet ID と User ID の両方でコンプライアイベントを監視し、ローカルデータストアを適切に更新できる必要があります。
- すべてのコンプライアンスステータスに対応するスキーマを構築する: アプリケーションごとにコンプライアンス対応の方法は異なるため、データストアに他のメタデータを追加する必要が生じる場合があります。たとえば、データ利用者は、status_withheld メッセージの対象となる国でコンテンツ表示を制限しやすくするため、既存のデータベースにメタデータを追加する判断をすることがあります。
- リツイート削除の取り扱い: リツイートは特殊な種類の Tweet で、元のメッセージがリツイート内のオブジェクトとしてネストされています。この場合、リツイートには 2 つの Tweet ID が参照されます — リツイート自体の ID と、(ネストされたオブジェクトに含まれる)元のメッセージの ID です。元のメッセージが削除されると、元の ID に対して Tweet の削除メッセージが発行されます。以後、すべてのリツイートに個別の削除メッセージが発行されるわけではありません。元の ID の削除のみで、その後のすべてのリツイートの削除に十分です。