Twitter API Part 1 -- 開発者アカウントを登録してツイートID から ツイート本文、ツイート主の内部ID、ハンドルネームと公開ID を取得する
Tags: twitter
Published: 2022-05-22 08:59:44


## 参考

https://zenn.dev/nekoshita/articles/3c24c302a6a5ee#%E8%AA%8D%E8%A8%BC%E6%83%85%E5%A0%B1%E3%81%AE%E5%8F%96%E3%82%8A%E6%89%B1%E3%81%84%E3%81%AB%E3%81%AF%E5%8D%81%E5%88%86%E3%81%8A%E6%B0%97%E3%82%92%E3%81%A4%E3%81%91%E3%82%92%EF%BC%81

zenn の nekoshita さんの記事

---

## 開発者アカウントの作成

https://developer.twitter.com/

にアクセスして

メールアドレスの登録がされている Twitter アカウントで

* 利用目的 200 文字
* Tweet & Retweet & Reply... などの各項目の利用目的 100 文字

これらを記載して Twitter 開発者アカウントを作成する。

---

## Bearer などのトークンの取得とメモ

すると API アプリが作れるようになって、作ると

* api key
* api key secret
* Bearer Token

これらのトークンが入手できるのでメモに控える。

https://qiita.com/h_tyokinuhata/items/ab8e0337085997be04b1

Bearer Token は HTTP リクエストで必ず使われる担い手 ID 。
どの Twitter API ユーザーがこのリクエストを打ったかの情報だと推測する。

---

## API のリクエストサンプルを確認

アプリを作ってトークンを発行すると、実際に叩いてみるための
サンプルツイートとサンプルリクエストの例の画面に誘導される。

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0wbgginc61ngtysqr270.png)

```php
curl -X GET -H 
"Authorization: Bearer <BEARER TOKEN>"
"https://api.twitter.com/2/tweets/20?expansions=author_id"
```

これを実際にターミナルで叩いてみろと出る。

管理画面のこのサンプルのように

ヘッダーに Bearer Token を入れて 

```php
https://api.twitter.com/2/tweets/{tweetId}
```

とすると JSON が返ってくるらしい。
author_id は optional 。

---

## ツイートID 20 に実際にリエクエストしてみる

```json
curl -X GET -H "Authorization: Bearer 1234"
"https://api.twitter.com/2/tweets/20?expansions=author_id"
```

サンプルに出ているツイートID 20 に打つと

```json
{
	"data": {
		"author_id": "12",
		"id": "20",
		"text": "just setting up my twttr"
	},
	"includes": {
		"users": [
			{
				"id": "12",
				"name": "jack",
				"username": "jack"
			}
		]
	}
}
```

JSON のデータで

* author_id (ツイートしたユーザーの内部 ID )
* id (ツイート ID )
* text (ツイートの内容)

これらの基礎データと、
expansions=author_id をつけているので
users (そのツイートをしたユーザー) のデータとして

* id (author_id、内部で扱われているユーザーID)
* name (Twitter ユーザーが設定しているハンドルネーム)
* username (Twitter アプリで見える ID)

これらが拡張して取得できているを確認した。

---

## ツイートID 1528083859430330369 にリクエストしてみる

自分でツイートしたツイートの ID を控えてこれにも同じリクエストを打ってみる。

```json
 curl -X GET -H "Authorization: Bearer 1234" "https://api.twitter.com/2/tweets/1528083859430330369?expansions=author_id"
```

すると

```json
{
	"data": {
		"author_id": "848541381836423170",
		"id": "1528083859430330369",
		"text": "API から取るようのテストツイート"
	},
	"includes": {
		"users": [
			{
				"id": "848541381836423170",
				"name": "カエデ.tsx",
				"username": "kaede_io"
			}
		]
	}
}
```

ツイートID 20 同様に取得できた。
これによって

* 自分の本来の内部ユーザーID
* ツイート本文を日本語で
* 自分のハンドルネーム
* 自分のTwitterで表示されるユーザーId

これらが確認できた。

---

## ベラトークンに<>をつけて入れるとエラーになる

```json
{
  "title": "Unauthorized",
  "type": "about:blank",
  "status": 401,
  "detail": "Unauthorized"
}%  
```

401 で失敗が返ってくる。

---

## まとめ

ツイートを HTTP GET リクエストで取得するためは

開発者アカウントを登録して開発アプリを取得し、Bearer Token を発行

ツイートID と自分の Bearer Token を使って

```php
curl -X GET -H "Authorization: Bearer {bearer_token}"
https://api.twitter.com/2/tweets/{tweetId}
```

こうやってリクエストする。

すると JSON で

* author_id (ツイートしたユーザーの内部 ID )
* id (ツイート ID )
* text (ツイートの内容)

これらのツイート情報を表示することができる。

---

## 次回

このデータでは一つのツイートの

* Like (いいね)
* Retweet
* Replies (ついているリプライ)

これらのデータが入っていないのでそれを取得したい。

また、今回はツイートID からのリクエストだったので
ユーザーID からのリクエストでツイートリストを取得したい。