Twitter API Part 2 -- Postman を使って Twitter API で tweet.fields の created_at,attachments を取得する。
Tags: twitter, postman
Published: 2022-05-22 11:03:58


## why

https://developer.twitter.com/en/docs/tutorials/postman-getting-started

この公式doc の postman チュートリアルによると

Postman を使うと

* エンドポイントの URL
* 自分の Bearer Token
* tweet.fields や expansions などの追加情報

これらをファイル(ワークスペース？)として保存して置けるらしい。

---

## Postman で Twitter API v2 のワークスペースを保存

まず、上部のURL の画面に

```php
https://api.twitter.com/2/tweets/20?expansions=author_id
```

前回使った URL を入れる。

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

すると ? クエリで追加されている expansions が Params のタブに追加されている。

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

次に Auth タブから Type で Bearer Token を選択。
Token の入力欄に 自分の Bearer Token を入力する。

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

これで実行できることを確認して

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

Twitter API v2 として保存する。

---

## Params で tweet.fields に created_at,attachments を追加する

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

Params タブの GUI のテーブルに
KEY に tweet.fields を入れて
VALUE に created_at,attachments を追加する

```php
https://api.twitter.com/2/tweets/
1528004049932816384
?expansions=author_id
&tweet.fields=created_at,attachments
```

すると & で URL にも
今追加した tweet.fields のパラメータが追加される。

----

## attachments と created_at を入れた状態で実行する

4 枚の犬の画像でテストする

```json
{
    "data": {
        "attachments": {
            "media_keys": [
                "3_1528004043674898432",
                "3_1528004043649732608",
                "3_1528004043637149696",
                "3_1528004044899635200"
            ]
        },
        "author_id": "2669426204",
        "id": "1528004049932816384",
        "text": "すくすく育っとるな〜 https://t.co/OB0LAKtKwA",
        "created_at": "2022-05-21T13:25:29.000Z"
    },
    "includes": {
        "users": [
            {
                "id": "2669426204",
                "name": "ハマジ",
                "username": "xxhama2"
            }
        ]
    }
}
```

attachments の中に media_keys が入っていて
その中に 写真の内部ID ？が 4 つ入っている。

また、id や text に並列で created_at も取得できた。

ただ、この後 media_keys から画像をどうやって表示するかは不明。

---

## python で media_key から photo_url を取得しているサンプルを見てみる

https://gist.github.com/msakamoto-sf/356b986d26878ba803d1e00146f218f1

この画像保存の gist コードを見ると

```py
   media_key_to_photo_urls = {}
    medias = response.includes['media']
    for media in medias:
        media_key = media.media_key
        media_type = media.type
        media_url = media.url if hasattr(media, 'url') else ''
        #print(f'===>> key={media_key}, type={media_type}, url={media_url}')
        if media_url:
            media_key_to_photo_urls[media_key] = media_url
```


* お馴染みの メディアの ID となる media_key
* replied_to などが入る? type 
* entities.urls.url のことだと推測される url

これらを

media_key_to_photo_urls オブジェクトの
media_key の名前の key で
media_url の value を入れてまとめて、そこから tweetpy で引っ張っているらしい。詳細はわからなかった。

Youtube などで調べても python のサンプルばかりだった。

---

## まとめ

Postman を使うと

* エンドポイントの URL
* GET/POST/PUT/DELETE の HTTP メソッド名
* トークン情報
* クエリの key: value

これらをワークスペースとして保存することができる。

また、クエリパラメータの tweet.fileds として 

* created_at
* attachments

これらを指定すると
作成日と写真ID と予想される media_keys を取得できる。

しかし、画像自体を取得する方法はわからなかった。

表の　URL のように　`/photos/1` などで取得できるのだろうか？