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

# v1 から v2 へ

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>;
};

<div id="standard-v11-compared-to-x-api-v2">
  ### Standard v1.1 と X API v2 の比較
</div>

これまで Standard v1.1 の `GET users/show` や `GET users/lookup` を利用していた場合、本ガイドは Standard v1.1 と X API v2 の users lookup エンドポイントの共通点と相違点を理解するのに役立ちます。

* **類似点**
  * OAuth 1.0a ユーザーコンテキスト
  * リクエストごとのユーザー数の上限
* **相違点**
  * エンドポイント URL
  * App と Project の要件
  * レスポンスデータの形式
  * リクエストパラメータ

<div id="similarities">
  #### 類似点
</div>

**OAuth 1.0a ユーザーコンテキスト認証方式**

標準エンドポイントは [OAuth 1.0a User Context](/ja/resources/fundamentals/authentication#oauth-1-0a-2) をサポートしており、新しい X API v2 の users lookup エンドポイントは OAuth 1.0a User Context と [App only](/ja/resources/fundamentals/authentication#oauth-2-0) の両方をサポートしています。したがって、以前に標準 v1.1 の users lookup エンドポイントのいずれかを使用していた場合、X API v2 のバージョンに移行しても、同じ認証方式を引き続き使用できます。

利用する認証ライブラリ／パッケージによっては、App only 認証が最も手軽な方法で、簡単なリクエストヘッダーの設定だけで利用できます。App only Access Token の生成方法については、[この App only ガイド](/ja/resources/fundamentals/authentication#bearer-token-also-known-as-app-only) を参照してください。

**1 リクエストあたりのユーザー数の制限**

標準 v1.1 の GET users/lookup エンドポイントでは、1 リクエストあたり最大 100 ユーザーまで指定できます。これは GET /users および GET /users/by エンドポイントについても同様です。最大 100 ユーザーを指定するには、ids (GET /users) パラメータ、または username (GET /users/by) パラメータをクエリパラメータとして渡し、ユーザー ID／ユーザー名の一覧をカンマ区切りのリストとして含める必要があります。

<div id="differences">
  #### 違い
</div>

**エンドポイント URL**

* 標準 v1.1 エンドポイント:
  * [https://api.x.com/1.1/users/show](https://api.x.com/1.1/users/show) (単一の id または username のルックアップ)
  * [https://api.x.com/1.1/users/lookup](https://api.x.com/1.1/users/lookup) (複数の id または username のルックアップ)
* X API v2 エンドポイント:
  * [https://api.x.com/2/users](https://api.x.com/2/users) (複数の id のルックアップ)
  * [https://api.x.com/2/users/:id](https://api.x.com/2/users/:id) (単一の id のルックアップ)
  * [https://api.x.com/2/users/by](https://api.x.com/2/users/by) (複数の username のルックアップ)
  * [https://api.x.com/2/users/by/username/:username](https://api.x.com/2/users/by/username/:username) (単一の username のルックアップ)

**App および Project の要件**

X API v2 のエンドポイントでは、リクエストを認証する際に、[developer App](/ja/resources/fundamentals/developer-apps) と、それに関連付けられている [Project](/ja/resources/fundamentals/developer-apps) の資格情報を使用する必要があります。すべての X API v1.1 エンドポイントでは、単体の App、または Project に関連付けられた App の資格情報を使用できます。

**レスポンスデータ形式**

標準 v1.1 と X API v2 のエンドポイントバージョンの最大の違いの 1 つは、ペイロードにどのフィールドを返すかの選択方法です。

標準エンドポイントでは、多くのレスポンスフィールドがデフォルトで返され、そのうえで、どのフィールドやフィールドセットをペイロードに含めるかをパラメータで指定できます。

X API v2 では、デフォルトで返されるのは user id、name、username フィールドのみです。追加のフィールドやオブジェクトを要求するには、[fields](/ja/x-api/fundamentals/fields) パラメータと [expansions](/ja/x-api/fundamentals/expansions) パラメータを使用する必要があります。このエンドポイントから要求した任意の user フィールドは、プライマリの user オブジェクト内に返されます。展開されたポストオブジェクトおよびそのフィールドは、レスポンス内の includes オブジェクトに返されます。その後、user と展開されたポストオブジェクトの両方に含まれる id を照合することで、任意の展開オブジェクトを user オブジェクトに対応付けることができます。

これらの新しいパラメータの詳細については、それぞれのガイド、または[fields と expansions の使用方法](/ja/x-api/fundamentals/data-dictionary#how-to-use-fields-and-expansions) に関するガイドを参照することをおすすめします。

また、標準 v1.1 のフィールドを新しい v2 のフィールドにマッピングする際に役立つ [データ形式の移行ガイド](/ja/x-api/migrate/data-format-migration#migrating-from-standard-v1-1s-data-format-to-v2) も用意しています。このガイドでは、特定のフィールドを返すために v2 リクエストに付与する必要がある、具体的な expansion パラメータと field パラメータも確認できます。

特定のフィールドの要求方法の変更に加えて、X API v2 では、API が返すオブジェクトの新しい JSON 設計も導入しています。これには、[Post](/ja/x-api/fundamentals/data-dictionary#tweet) オブジェクトと [user](/ja/x-api/fundamentals/data-dictionary#user) オブジェクトが含まれます。

* JSON ルートレベルでは、標準エンドポイントは Post オブジェクトを statuses 配列で返しますが、X API v2 は data 配列で返します。
* Retweeted および Quoted の「statuses」を参照する代わりに、X API v2 の JSON では Retweeted および Quoted のツイートを参照します。contributors や user.translator\_type など、多くのレガシーおよび非推奨フィールドは削除されます。
* Post オブジェクトでの favorites と user オブジェクトでの favourites のように 2 つの表記を使い分ける代わりに、X API v2 では like という用語を使用します。
* X では、値を持たない JSON 値 (たとえば null) はペイロードに書き出さないという規約を採用しています。Post と user の属性は、null 以外の値を持つ場合にのみ含まれます。

さらに、[Post オブジェクト](/ja/x-api/fundamentals/data-dictionary#tweet) に、次のような新しいフィールドセットも導入しました。

* [conversation\_id](/ja/x-api/fundamentals/conversation-id) フィールド
* context と entities を含む、2 つの新しい [annotations](/ja/x-api/fundamentals/post-annotations) フィールド
* 複数の新しい [metrics](/ja/x-api/fundamentals/metrics) フィールド
* 特定のポストに誰が返信できるかを示す、新しい reply\_setting フィールド

**リクエストパラメータ**

次の標準 v1.1 リクエストパラメータには、X API v2 における同等のものがあります。

|              |              |
| :----------- | :----------- |
| **Standard** | **X API v2** |
| user\_id     | ids          |
| screen\_name | username     |

また、X API v2 ではサポートされていない標準 users lookup リクエストパラメータもあります。

| Standard          | コメント                                                                                          |
| :---------------- | :-------------------------------------------------------------------------------------------- |
| include\_entities | このパラメータは、ポストのペイロードから entities ノードを削除するために使用されます。これは、追加的な fields および expansions 機能に置き換えられています。 |

***

<div id="code-examples">
  ### コード例
</div>

次の例では、標準的な v1.1 エンドポイントと、それに対応する v2 エンドポイントを示します。

**単一ユーザーの取得: v1.1 `GET users/show` → v2 `GET /users/by/username/:username`**

<CodeGroup dropdown>
  ```bash cURL (v1.1) theme={null}
  curl --request GET \
    --url 'https://api.x.com/1.1/users/show.json?screen_name=XDevelopers' \
    --header 'Authorization: Bearer $ACCESS_TOKEN'
  ```

  ```bash cURL (v2) theme={null}
  curl --request GET \
    --url 'https://api.x.com/2/users/by/username/XDevelopers?user.fields=created_at,description,public_metrics' \
    --header 'Authorization: Bearer $ACCESS_TOKEN'
  ```

  ```python Python (v2) theme={null}
  import requests

  bearer_token = "YOUR_BEARER_TOKEN"
  url = "https://api.x.com/2/users/by/username/XDevelopers"

  params = {
      "user.fields": "created_at,description,public_metrics"
  }

  headers = {"Authorization": f"Bearer {bearer_token}"}
  response = requests.get(url, headers=headers, params=params)

  print(response.json())
  ```

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

  client = Client(bearer_token="YOUR_BEARER_TOKEN")

  # username を指定して、追加フィールドとともにユーザーを取得
  response = client.users.get_by_username(
      "XDevelopers",
      user_fields=["created_at", "description", "public_metrics"]
  )

  print(f"Name: {response.data.name}")
  print(f"Followers: {response.data.public_metrics.followers_count}")
  ```

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

  const client = new Client({ bearerToken: "YOUR_BEARER_TOKEN" });

  const response = await client.users.getByUsername("XDevelopers", {
    userFields: ["created_at", "description", "public_metrics"],
  });

  console.log(`Name: ${response.data?.name}`);
  console.log(`Followers: ${response.data?.public_metrics?.followers_count}`);
  ```
</CodeGroup>

**複数ユーザーの取得: v1.1 `GET users/lookup` → v2 `GET /users/by`**

<CodeGroup dropdown>
  ```bash cURL (v1.1) theme={null}
  curl --request GET \
    --url 'https://api.x.com/1.1/users/lookup.json?screen_name=XDevelopers,X,XAPI' \
    --header 'Authorization: Bearer $ACCESS_TOKEN'
  ```

  ```bash cURL (v2) theme={null}
  curl --request GET \
    --url 'https://api.x.com/2/users/by?usernames=XDevelopers,X,XAPI&user.fields=created_at,public_metrics' \
    --header 'Authorization: Bearer $ACCESS_TOKEN'
  ```

  ```python Python (v2) theme={null}
  import requests

  bearer_token = "YOUR_BEARER_TOKEN"
  url = "https://api.x.com/2/users/by"

  params = {
      "usernames": "XDevelopers,X,XAPI",
      "user.fields": "created_at,public_metrics"
  }

  headers = {"Authorization": f"Bearer {bearer_token}"}
  response = requests.get(url, headers=headers, params=params)

  for user in response.json()["data"]:
      print(f"{user['username']}: {user['public_metrics']['followers_count']} followers")
  ```

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

  client = Client(bearer_token="YOUR_BEARER_TOKEN")

  # username を指定して複数ユーザーを取得
  response = client.users.get_users_by_usernames(
      usernames=["XDevelopers", "X", "XAPI"],
      user_fields=["created_at", "public_metrics"]
  )

  for user in response.data:
      print(f"{user.username}: {user.public_metrics.followers_count} followers")
  ```

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

  const client = new Client({ bearerToken: "YOUR_BEARER_TOKEN" });

  const response = await client.users.getUsersByUsernames({
    usernames: ["XDevelopers", "X", "XAPI"],
    userFields: ["created_at", "public_metrics"],
  });

  response.data?.forEach((user) => {
    console.log(`${user.username}: ${user.public_metrics?.followers_count} followers`);
  });
  ```
</CodeGroup>
