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

# 統合ガイド

export const Button = ({href, children}) => {
  return <div className="not-prose group">
    <a href={href}>
      <button className="flex items-center space-x-2.5 py-1 px-4 bg-primary-dark dark:bg-white text-white dark:text-gray-950 rounded-full group-hover:opacity-[0.9] font-medium">
        <span>
          {children}
        </span>
        <svg width="3" height="24" viewBox="0 -9 3 24" class="h-6 rotate-0 overflow-visible"><path d="M0 0L3 3L0 6" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path></svg>
      </button>
    </a>
  </div>;
};

このページでは、manage Posts エンドポイントをシステムに統合するためのツールと主要な概念について説明します。

***

<div id="helpful-tools">
  ## 便利なツール
</div>

このエンドポイントの統合に役立つ重要な概念を説明する前に、まず次のツールに慣れておくことをおすすめします。

<div id="postman">
  ### Postman
</div>

Postman は、エンドポイントをテストするための便利なツールです。各 Postman リクエストには、利用可能な内容をすばやく把握できるように、すべてのパスおよびボディパラメータが含まれています。Postman コレクションの詳細については、["Using Postman"](/ja/tutorials/postman-getting-started) ページをご覧ください。

<div id="code-samples">
  ### コードサンプル
</div>

お好みのプログラミング言語でこのエンドポイントを使い始めたい場合は、いくつかのコードサンプルを用意しています。[GitHub ページ](https://github.com/xdevplatform/Twitter-API-v2-sample-code)で確認でき、導入時のベースとしてご利用いただけます。

<div id="third-party-libraries">
  ### サードパーティ製ライブラリ
</div>

コミュニティによる[サードパーティ製ライブラリ](/ja/x-api/tools-and-libraries/overview)を活用して、利用を開始しましょう。v2 エンドポイントに対応したライブラリは、適切なバージョンタグが付いているものを探すことで見つけられます。

<div id="key-concepts">
  ## 基本概念
</div>

<div id="authentication">
  ### 認証
</div>

すべての X API v2 エンドポイントでは、認証情報 (キーやトークンとも呼ばれます) を使ってリクエストを認証する必要があります。

これらのエンドポイントでは、[OAuth 1.0a User Context](/ja/resources/fundamentals/authentication) の使用が必要です。これは、リクエストを正常に実行するために、API キーとユーザーの Access Token のセットを使用しなければならないことを意味します。Access Token は、あなたが代理としてリクエストを送信するユーザーに関連付けられている必要があります。別のユーザーのために Access Token セットを生成したい場合、そのユーザーは [3-legged OAuth flow](/ja/resources/fundamentals/authentication#obtaining-access-tokens-using-3-legged-oauth-flow) を使用してあなたの App を承認または認証する必要があります。

OAuth 1.0a は扱いが難しい場合があることに注意してください。この認証方式に慣れていない場合は、[library](/ja/x-api/tools-and-libraries/overview) を利用するか、Postman のようなツールを使用するか、あるいは OAuth 2.0 を使用してリクエストを認証することをおすすめします。

[OAuth 2.0 Authorization Code with PKCE](/ja/resources/fundamentals/authentication#oauth-2-0-authorization-code-flow-with-pkce-2) を使用すると、アプリケーションのスコープや複数デバイス間にまたがる認可フローを、より細かく制御できます。OAuth 2.0 では、ユーザーに代わって特定の権限を付与するための、きめ細かなスコープを選択できます。

App で OAuth 2.0 を有効にするには、開発者コンソールの App 設定セクションにある App の認証設定で OAuth 2.0 を有効化する必要があります。

<div id="developer-console-projects-and-developer-apps">
  ### 開発者コンソール、プロジェクト、および開発者 App
</div>

X API v2 のエンドポイントで使用できる認証情報一式を取得するには、[開発者アカウント](/ja/resources/fundamentals/developer-portal)を保有し、そのアカウント内に[プロジェクト](/ja/resources/fundamentals/developer-apps)を設定し、そのプロジェクト内に[開発者 App](/ja/resources/fundamentals/developer-apps)を作成しておく必要があります。これらを用意したら、開発者 App 内でキーとトークンを確認できます。

<div id="rate-limits">
  ### レート制限
</div>

毎日、何万もの開発者が X API へリクエストを送信しています。こうした大量のリクエストを管理するために、各エンドポイントには [レート制限](https://developer.x.com/x-api/fundamentals/rate-limits) が設定されており、あなたの App または認証済みユーザーに代わって送信できるリクエスト数が制限されています。

これらのエンドポイントはユーザーレベルでレート制限されており、あなたがリクエストを送信している認証済みユーザーは、どの開発者 App からであっても、そのエンドポイントを呼び出せる回数が一定数に制限されます。POST メソッドには、15 分あたり 200 リクエストというユーザーレート制限があります。DELETE メソッドには、15 分あたり 50 リクエストというレート制限があります。さらに、manage Posts または manage Retweets の権限で作成された投稿を含めて、[3 時間あたり 300 リクエスト](https://blog.x.com/developer/en_us/topics/tools/2018/new-developer-requirements-to-protect-our-platform) という上限もあります。

<div id="source-labels">
  ### ソースラベル
</div>

App 名とウェブサイトの URL は、あなたのアプリケーションによってプログラムで作成された投稿のメタデータ内で、[ソースラベル](https://help.x.com/en/using-twitter/how-to-tweet#source-labels)として表示されます。X App のユースケースを変更する場合は、[Developer Terms](https://developer.x.com/content/developer-twitter/en/developer-terms/agreement-and-policy) に準拠し続けるために、必ずこれらの設定でのユースケースも更新してください。

<div id="profile-settings">
  ### プロフィール設定
</div>

プロフィール設定でジオ位置情報を有効にしている場合にのみ、ポストに位置情報を追加できます。ジオ位置情報を有効にしていない場合でも、リクエストボディに location パラメータを追加することはできますが、その位置情報はポストに付与されません。画像へのユーザータグ付けについても同様です。タグ付けしようとしているユーザーが写真のタグ付けを有効にしていない場合、ポスト自体は正常に作成されますが、そのユーザーの名前はタグ付けされたユーザーのリストには表示されません。

<div id="adding-media-to-a-post">
  ### ポストへのメディアの追加
</div>

現在、X API v2 ではメディアのアップロード処理を完結させることはできません。ただし、すでにアップロード済みのメディアをポストに添付することはできます。すでに [v1 の media エンドポイントを使ってアップロードした](https://developer.x.com/en/docs/twitter-api/v1/media/upload-media/api-reference/post-media-upload)メディア、または [X Media Studio](https://media.x.com/en/articles/products/2018/media-studio) を使ってアップロードしたメディアの media id を使用できます。これらの media id は、あなた自身のものか、認証済みユーザーに紐づくものである必要があります。

***

<div id="code-examples">
  ## コードサンプル
</div>

<div id="create-a-post">
  ### ポストを作成
</div>

<CodeGroup dropdown>
  ```bash cURL theme={null}
  curl -X POST "https://api.x.com/2/tweets" \
    -H "Authorization: OAuth ..." \
    -H "Content-Type: application/json" \
    -d '{"text": "Hello world!"}'
  ```

  ```python Python SDK theme={null}
  from xdk import Client
  from xdk.oauth1_auth import OAuth1

  oauth1 = OAuth1(
      api_key="YOUR_API_KEY",
      api_secret="YOUR_API_SECRET",
      access_token="YOUR_ACCESS_TOKEN",
      access_token_secret="YOUR_ACCESS_TOKEN_SECRET"
  )

  client = Client(auth=oauth1)

  # ポストを作成
  response = client.posts.create(text="Hello world!")
  print(f"Created Post: {response.data.id}")
  ```

  ```javascript JavaScript SDK theme={null}
  import { Client, OAuth1 } from "@xdevplatform/xdk";

  const oauth1 = new OAuth1({
    apiKey: "YOUR_API_KEY",
    apiSecret: "YOUR_API_SECRET",
    accessToken: "YOUR_ACCESS_TOKEN",
    accessTokenSecret: "YOUR_ACCESS_TOKEN_SECRET",
  });

  const client = new Client({ oauth1 });

  // ポストを作成
  const response = await client.posts.create({ text: "Hello world!" });
  console.log(`Created Post: ${response.data?.id}`);
  ```
</CodeGroup>

<div id="create-a-reply">
  ### 返信を作成
</div>

<CodeGroup dropdown>
  ```bash cURL theme={null}
  curl -X POST "https://api.x.com/2/tweets" \
    -H "Authorization: OAuth ..." \
    -H "Content-Type: application/json" \
    -d '{"text": "これは返信です！", "reply": {"in_reply_to_tweet_id": "1234567890"}}'
  ```

  ```python Python SDK theme={null}
  from xdk import Client
  from xdk.oauth1_auth import OAuth1

  oauth1 = OAuth1(
      api_key="YOUR_API_KEY",
      api_secret="YOUR_API_SECRET",
      access_token="YOUR_ACCESS_TOKEN",
      access_token_secret="YOUR_ACCESS_TOKEN_SECRET"
  )

  client = Client(auth=oauth1)

  # 返信を作成
  response = client.posts.create(
      text="これは返信です！",
      reply={"in_reply_to_tweet_id": "1234567890"}
  )
  print(f"Created reply: {response.data.id}")
  ```

  ```javascript JavaScript SDK theme={null}
  import { Client, OAuth1 } from "@xdevplatform/xdk";

  const oauth1 = new OAuth1({
    apiKey: "YOUR_API_KEY",
    apiSecret: "YOUR_API_SECRET",
    accessToken: "YOUR_ACCESS_TOKEN",
    accessTokenSecret: "YOUR_ACCESS_TOKEN_SECRET",
  });

  const client = new Client({ oauth1 });

  // 返信を作成
  const response = await client.posts.create({
    text: "これは返信です！",
    reply: { inReplyToTweetId: "1234567890" },
  });
  console.log(`Created reply: ${response.data?.id}`);
  ```
</CodeGroup>

<div id="delete-a-post">
  ### ポストを削除する
</div>

<CodeGroup dropdown>
  ```bash cURL theme={null}
  curl -X DELETE "https://api.x.com/2/tweets/1234567890" \
    -H "Authorization: OAuth ..."
  ```

  ```python Python SDK theme={null}
  from xdk import Client
  from xdk.oauth1_auth import OAuth1

  oauth1 = OAuth1(
      api_key="YOUR_API_KEY",
      api_secret="YOUR_API_SECRET",
      access_token="YOUR_ACCESS_TOKEN",
      access_token_secret="YOUR_ACCESS_TOKEN_SECRET"
  )

  client = Client(auth=oauth1)

  # ポストを削除する
  response = client.posts.delete("1234567890")
  print(f"Deleted: {response.data.deleted}")
  ```

  ```javascript JavaScript SDK theme={null}
  import { Client, OAuth1 } from "@xdevplatform/xdk";

  const oauth1 = new OAuth1({
    apiKey: "YOUR_API_KEY",
    apiSecret: "YOUR_API_SECRET",
    accessToken: "YOUR_ACCESS_TOKEN",
    accessTokenSecret: "YOUR_ACCESS_TOKEN_SECRET",
  });

  const client = new Client({ oauth1 });

  // ポストを削除する
  const response = await client.posts.delete("1234567890");
  console.log(`Deleted: ${response.data?.deleted}`);
  ```
</CodeGroup>

**次のステップ**

[APIリファレンス](/ja/x-api/posts/manage-tweets#manage-tweets-api-reference-index)
