匠は、2017年にMastodonで遊びたくて、苦手なプログラミングを克服して、Pythonを習得しました。
この経験から Mastodon の API を使って練習するのは、下記の理由でプログラミング学習に有効だと感じました。
- Mastodonでやりたいことを自動化できるので実用的で、モチベーションが上がりやすい
- REST APIなので扱いやすい
- TwitterなどのSNSと比べて、API利用の制約が緩い
- PythonはMastodon向けラッパーモジュールもある
- それなりに扱い方にクセはあるので勉強になる
これらの条件を踏まえ、Python初心者が Mastodonを楽しめるように、簡単な練習問題を50問ほど作ってみました。
初級Pythonistaの皆様の腕試しにお役立ちできれば幸いです。ぜひチャレンジしてみて下さい。
なお、回答はこちらに掲載していますので、解答できたらご覧ください。
前提条件
これから紹介する練習問題について、下記を前提とします。
- あらかじめMastodonアカウントは保持していること
- 特に指定しない限り「インスタンス」とは「保持しているアカウントのあるMastodonインスタンス」を指す
- 表示しなさい = 標準出力すること
- ファイルに保存しなさい = 任意のテキストファイルに書き込み保存すること
- 回答は Python 3系にて記載しますが、Python 2系でも作れます。
- APIへのアクセスは下記のいずれかで行うこと
- requestsモジュールを使ってREST APIへリクエストする
- Mastodon.py
- もちろん IDLE や Python のコマンドラインで回答を作るのもアリです。
ちなみに、Python以外でも練習問題はこなせると思います。匠は答えを用意しませんが、ぜひ楽しんでいたのみればと思います。
練習1.APIの操作準備
まずはトゥートする準備ができるかを確認する問題です。
- インスタンスへ疎通確認してください。
(ヒント:HTTPSポートへ何らか通信できればOK) - インスタンスへのREST APIへの疎通確認してください。
(対象APIやレスポンス値は問わない) - インスタンスへクライアント「Python_Exercise」を登録して、Client ID と Client Secret を取得してください。
- インスタンスからアクセストークンを取得して、ファイル「access_token.txt」に保存してください。
- 上記で保存したアクセストークンを表示してください
練習2. トゥート投稿
Pythonを使って様々なトゥートができるかを確認する問題です。
- 「はじめてのトゥート #Python練習」とトゥート(投稿)してください。
- 「2回目のトゥート #Python練習」というテキストと何か画像1つを添付してトゥート(投稿)してください。
- 「3回目のトゥート #Python練習」というテキストと何か画像4つを添付してトゥート(投稿)してください。
- 「4回目のトゥート #Python練習」というテキストに、「CWの練習」という警告(CW)を付けて、トゥート(投稿)してください。
- 「5回目のトゥート #Python練習」というテキストに、何か画像1つを添付して、NSFWで隠してトゥート(投稿)してください。
- 「はじめての非掲載トゥート #Python練習」というテキストを、公開範囲「非掲載」に設定してトゥート(投稿)してください。
- 「はじめての非公開トゥート #Python練習」というテキストを、公開範囲「非公開」に設定してトゥート(投稿)してください。
- 「@test@itumonotakumi.m.to はじめてのダイレクトトゥート #Python練習」というテキストを、公開範囲「ダイレクト」に設定してトゥート(投稿)してください。
- 「@test@itumonotakumi.m.to トゥート練習中 #Python練習」というテキストを下記の設定でトゥート(投稿)してください。
- CW / 警告文「CW練習中」を付与すること
- 何らか画像を1つ添付 / NSFWを付与すること
- 公開範囲は「非公開」
- test@itumonotakumi.m.toに「メンション練習中 #Python練習」というテキストでメンションを送ってください。
練習3. トゥート操作
Pythonを使って、トゥートに関する様々な操作ができるかを確認する問題です。
- 練習2-1で投稿したトゥートにお気に入りを付けてください。
- 上記で付けたお気に入りをトゥートから解除してください。
- 練習2-1で投稿したトゥートをブーストしてください。
- 上記でブーストしたトゥートの、ブーストを解除してください。
- 練習2-1で投稿したトゥートを削除してください。
練習4. 自分のアカウント情報の取得
- アカウント情報を取得して、JSON形式で表示しなさい。
- 自分のアカウント名(アカウント名@インスタンス名)のみ表示しなさい。
- 自分の表示名のみ表示しなさい。
- 自分のプロフィールの内容のみ表示しなさい。
- 自分のフォロー数のみ表示しなさい。
- 自分のフォロワー数のみ表示しなさい。
- 自分のお気に入り数のみ表示しなさい。
- 自分の最新トゥート10件をJSON形式で表示しなさい。
- 自分の最新トゥート1件の時間と内容のみ表示しなさい。
- 自分の最新トゥート1件のアプリ名のみ表示しなさい。
練習5. 他人のアカウント情報の取得
- アカウント「いつもの匠(itsumonotakumi@pawoo.net)」を検索して、その結果をJSON形式で表示しなさい。
- アカウント「いつもの匠(itsumonotakumi@pawoo.net)」の表示名を表示しなさい。
- アカウント「いつもの匠(itsumonotakumi@pawoo.net)」のプロフィール内容のみ表示しなさい。
- アカウント「いつもの匠(itsumonotakumi@pawoo.net)」のフォロー数のみ表示しなさい。
- アカウント「いつもの匠(itsumonotakumi@pawoo.net)」のフォロワー数のみ表示しなさい。
- アカウント「いつもの匠(itsumonotakumi@pawoo.net)」のお気に入り数のみ表示しなさい。
- アカウント「いつもの匠(itsumonotakumi@pawoo.net)」の最新トゥート10件をJSON形式で表示しなさい。
- アカウント「いつもの匠(itsumonotakumi@pawoo.net)」の最新トゥート1件の投稿時間と内容を表示しなさ。
- アカウント「いつもの匠(itsumonotakumi@pawoo.net)」の最新トゥート1件のアプリ名のみ表示しなさい。
- アカウント「いつもの匠(itsumonotakumi@pawoo.net)」の最新トゥート1件のお気に入りがついているか、ついているならお気に入り数を表示しなさい。
練習6. タイムライン表示
- インスタンスのホスト名(FQDN)を表示しなさい。
- インスタンスの説明のみ表示しなさい。
- インスタンスのMastodonのバージョンのみ表示しなさい。
- インスタンスのローカルタイムラインのトゥートを10件表示しなさい。
- インスタンスの連合タイムラインのトゥートを10件表示しなさい。
- ハッシュタグ「#」のついたトゥートを最新10件のみ表示しなさい。
- 自分が所属するインスタンスのローカルタイムラインのトゥートを100件表示しなさい。
- 自分が所属するインスタンスの連合タイムラインのトゥートを100件表示しなさい。
- ハッシュタグ「#」のついたトゥートを最新100件のみ表示しなさい。
- 自分が所属するインスタンスのローカルタイムラインのトゥート200件表示しなさい。
表示形式: 時間/アカウント名/トゥート内容
以上で終了です。いかがでしたでしょうか?
参考
Mastodon の API に関する公式情報はこちらです。

Python向けのモジュールが提供されています。今のところ頻繁に更新されています。
シェルスクリプト(というよりcurlコマンド)でAPIを使うための初歩的な方法を紹介されています。非常に分かり易くて参考になりました。
匠がPythonを習得するキッカケになった書籍です。第一部と第二部の8章と10章さえ読めば、今回の問題は解けます。

問い合わせ先
ご意見・ご感想はもちろん、内容の誤りや不足などあれば、遠慮なくこちらまでご連絡ください。
