AnyPointSystem (powered by Qiitadon) > 2019-04-29 ポイントタグの一覧表示 (Python + Mastodon.py) | Tootリクエスト制限 | 関連: Toot全消しスクリプト(PHP)

```txt:動作環境
Ubuntu 18.04 LTs
Jupyter Notebook v5.7.8 
(Python 3.6.7 (default, Oct 22 2018, 11:32:17) )
```

### 関連

- [Qiitadon (Mastodon) > create_app()のto_fileで保存されるclient_id.txtの中身 | AnyPointSystem始めました](https://qiita.com/7of9/items/f8deafc9c301d9e01e2b)
- [AnyPointSystem (powered by Qiitadon) > 2019-04-27 システム設計](https://qiita.com/7of9/items/45aba268f6358541080c)


### ポイントタグの一覧表示

- `#AnyPointData`のタグを持つTootの
- 別のタグを取得
    - 例: queendombyaudora
        - [Toot例](https://qiitadon.com/@7of9/102006394066017831)

### 参考

- [Mastodon の toot を Python で取得する](https://toshipedia.jp/201803133574/)
    - 佐々木 俊樹さん

情報感謝です。

### 前準備

0. Mastodon.pyのセットアップ
1. アプリの登録 (Qiitadonの開発にて登録「AnyPointSystem」）
2. client_id.txtの生成 (client_idとclient_secret: 手順2の登録情報から)
3. access_token.txtの生成 (手順2の登録情報から)



### 実装

```py:Qiitadon_API_190425.ipynb
import sys
from mastodon import Mastodon

# [x] PEP8 checked

# 2019-04-29 08:49
# 2019-04-27 09:17

url = "https://qiitadon.com"
cid_file = 'client_id.txt'
token_file = 'access_token.txt'

mastodon = Mastodon(
    client_id=cid_file,
    access_token=token_file,
    api_base_url=url
)

# print(user_toots[0])  # トゥートを全て表示する

NUM_LOOP = 20  # for getting 40 toot each


def isAnyPointData(inlist):
    for elem in inlist:
        # print('***', elem)  # debug
        if 'anypointdata' in elem['name']:
            return True
    return False


def getPointTag(inlist):
    res = []
    for elem in inlist:
        if 'anypointdata' in elem['name']:
            continue
        res += [elem['name']]
    return res


max_id = None
for loop in range(NUM_LOOP):
    user_dict = mastodon.account_verify_credentials()
    # 40 seems limit as of 2019-04-27
    user_toots = mastodon.account_statuses(user_dict['id'],
                                           max_id=max_id, limit=40)

    max_id = user_toots[-1]['id']
    # print(len(user_toots))
    for idx in range(len(user_toots)):
        atoot = user_toots[idx]['tags']
        if len(atoot) == 0:
            continue
        if not isAnyPointData(atoot):
            continue
        res = getPointTag(atoot)
        print(res)

```

### 実行例

as of 2019-04-29 10:19

```
['queendombyaudora']
['animalbyaurora']
['英語復習']
['中国語復習']
['queendombyaurora']
['animalbyaurora']
['中国語学習']
['grenning学習', 'tdd学習']
['チョコ食べる']
['英語復習']
['英語資料整理']
['中国語復習']
['英語リスニング']
['英語リスニング']
['cerafilter']
['ツール開発']
['英語資料整理']
['英語リスニング']
['animalbyaurora']
['queendombyaudora']
['animalbyaurora']
['チカッとチカ千花っ']
['英語リスニング']
['animalbyaurora']
['animalbyaurora']
['中国語学習']
['チョコ食べる']
['grenning学習', 'tdd学習']
```


### 備考

- 複数タグを持つTootもあるため、リストで返すことにした

### Tootリクエスト制限

Thanks to @KEINOS (at Qiitadon)

- > 2019/04/29 現在、アクセストークン付きで 5分間で 300アクセスのようでやんす
    - https://github.com/tootsuite/mastodon/blob/master/config/initializers/rack_attack.rb#L48-L50

```ruby
 throttle('throttle_authenticated_api', limit: 300, period: 5.minutes) do |req|
    req.authenticated_user_id if req.api_request?
end
```

### 関連: Toot全消しスクリプト(PHP)

Thanks to @KEINOS (at Qiitadon)

- > PHP ですが、下記 Toot 全消しスクリプトの Delete する代わりにローカル保存に変更すれば全 Toot をダンプできると思います。参考ください。
    - https://github.com/KEINOS/Mastodon_Simple-Toot-Deleter/blob/master/delete_toot.php