Mastodonで始めるPythonプログラミング！腕試しテスト50本ノック（初級編）

はじめてのQiita記事です。

2017年にMastodonで遊びたくて、苦手なプログラミングを克服して、Pythonを習得しました。

https://takulog.info/howto-programming-for-poor-people/

この経験から Mastodon の API を使って練習するのは、下記の理由でプログラミング学習に有効だと感じました。

* Mastodonでやりたいことを自動化できるので**実用的**で、モチベーションが上がりやすい
* REST APIなので扱いやすい
* TwitterなどのSNSと比べて、**API利用の制約が緩い**
* PythonはMastodon向けラッパーモジュールもある
* それなりに扱い方にクセはあるので勉強になる

これらの条件を踏まえ、簡単な練習問題を５０問ほど作ってみました。

初級Pythonistaの皆様の腕試しにお役立ちできれば幸いです。

なお、回答は[こちら](https://qiita.com/itsumonotakumi/items/1f9273a07f1f7189921f)に掲載しました。

解答編
https://qiita.com/itsumonotakumi/items/1f9273a07f1f7189921f

## 前提条件

これから紹介する練習問題について、下記を前提とします。

* あらかじめMastodonアカウントは保持していること
* 特に指定しない限り「インスタンス」とは「保持しているアカウントのあるMastodonインスタンス」を指す
* 表示しなさい　＝ 標準出力すること
* ファイルに保存しなさい ＝ 任意のテキストファイルに書き込み保存すること
* 回答は Python 3系にて記載しますが、Python 2系でも作れます。
* APIへのアクセスは下記のいずれかで行うこと
    * requestsモジュールを使ってREST APIへリクエストする
    * Mastodon.py
* もちろん IDLE や Python のコマンドラインで回答を作るのもアリです。

ちなみに、Python以外でも練習問題はこなせると思います。匠は答えを用意しませんが、ぜひ楽しんでいたのみればと思います。

Mastodon API のリファレンスページ（「参考」参照）を見ながら試すことを推奨します。

## 練習1.APIの操作準備

まずはトゥートする準備ができるかを確認する問題です。

1. インスタンスへ疎通確認してください。<br />（ヒント：HTTPSポートへ何らか通信できればOK）
1. インスタンスへのREST APIへの疎通確認してください。<br />（対象APIやレスポンス値は問わない）
1. インスタンスへクライアント「Python_Exercise」を登録して、Client ID と Client Secret を取得してください。
1. インスタンスからアクセストークンを取得して、ファイル「access_token.txt」に保存してください。
1. 上記で保存したアクセストークンを表示してください

この問題が解けないと先に進めないので、まったく分からない方は下記を参考にさせて貰って下さい。

MastodonにTootするまで(Python)
https://qiita.com/ignis_fatuus/items/f4b7213ad887af2cf71c

PythonのrequestsでmastodonのAPIを叩く
https://qiita.com/kk6/items/5ecfa1a8a6bd282c1d61

## 練習2. トゥート投稿

Pythonを使って様々なトゥートができるかを確認する問題です。

1. 下記のテキストをトゥート（投稿）してください。<pre>はじめてのトゥート #Python練習</pre>
1. 下記のテキストと何か画像１つを添付してトゥート（投稿）してください。<pre>２回目のトゥート #Python練習</pre>
1. 下記のテキストと何か画像４つを添付してトゥート（投稿）してください。<pre>３回目のトゥート #Python練習</pre>
1. 下記のテキストに、「CWの練習」という警告（CW）を付けて、トゥート（投稿）してください。<pre>４回目のトゥート #Python練習</pre>
1. 下記のテキストに、何か画像１つを添付して、NSFWで隠してトゥート（投稿）してください。<pre>５回目のトゥート #Python練習</pre>
1. 下記のテキストを、公開範囲「非掲載」に設定してトゥート（投稿）してください。<pre>はじめての非掲載トゥート #Python練習</pre>
1. 下記のテキストを、公開範囲「非公開」に設定してトゥート（投稿）してください。<pre>はじめての非公開トゥート #Python練習</pre>
1. 下記のテキストを、公開範囲「ダイレクト」に設定してトゥート（投稿）してください。<pre>@test@itumonotakumi.m.to はじめてのダイレクトトゥート #Python練習</pre>
1. 下記のテキストを下記の設定でトゥート（投稿）してください。<pre>@test@itumonotakumi.m.to< トゥート練習中 #Python練習</pre>
    * CW / 警告文「CW練習中」を付与すること
    * 何らか画像を1つ添付 / NSFWを付与すること
    * 公開範囲は「非公開」
1. 下記のテキストでメンションを送ってください。<pre>@test@itumonotakumi.m.to メンション練習中 #Python練習</pre>

## 練習3. トゥート操作

Pythonを使って、トゥートに関する様々な操作ができるかを確認する問題です。

1. 練習2-1で投稿したトゥートにお気に入りを付けてください。
1. 上記で付けたお気に入りをトゥートから解除してください。
1. 練習2-1で投稿したトゥートをブーストしてください。
1. 上記でブーストしたトゥートの、ブーストを解除してください。
1. 練習2-1で投稿したトゥートを削除してください。

## 練習4. 自分のアカウント情報の取得

1. アカウント情報を取得して、JSON形式で表示しなさい。
1. 自分のアカウント名（アカウント名@インスタンス名）のみ表示しなさい。
1. 自分の表示名のみ表示しなさい。
1. 自分のプロフィールの内容のみ表示しなさい。
1. 自分のフォロー数のみ表示しなさい。
1. 自分のフォロワー数のみ表示しなさい。
1. 自分のお気に入り数のみ表示しなさい。
1. 自分の最新トゥート10件をJSON形式で表示しなさい。
1. 自分の最新トゥート1件の時間と内容のみ表示しなさい。
1. 自分の最新トゥート1件のアプリ名のみ表示しなさい。


## 練習5. 他人のアカウント情報の取得

1. アカウント「いつもの匠（[itsumonotakumi@pawoo.net](https://pawoo.net/@itsumonotakumi/)）」を検索して、その結果をJSON形式で表示しなさい。
1. アカウント「いつもの匠（[itsumonotakumi@pawoo.net](https://pawoo.net/@itsumonotakumi/)）」の表示名を表示しなさい。
1. アカウント「いつもの匠（[itsumonotakumi@pawoo.net](https://pawoo.net/@itsumonotakumi/)）」のプロフィール内容のみ表示しなさい。
1. アカウント「いつもの匠（[itsumonotakumi@pawoo.net](https://pawoo.net/@itsumonotakumi/)）」のフォロー数のみ表示しなさい。
1. アカウント「いつもの匠（[itsumonotakumi@pawoo.net](https://pawoo.net/@itsumonotakumi/)）」のフォロワー数のみ表示しなさい。
1. アカウント「いつもの匠（[itsumonotakumi@pawoo.net](https://pawoo.net/@itsumonotakumi/)）」のお気に入り数のみ表示しなさい。
1. アカウント「いつもの匠（[itsumonotakumi@pawoo.net](https://pawoo.net/@itsumonotakumi/)）」の最新トゥート10件をJSON形式で表示しなさい。
1. アカウント「いつもの匠（[itsumonotakumi@pawoo.net](https://pawoo.net/@itsumonotakumi/)）」の最新トゥート1件の投稿時間と内容を表示しなさ。
1. アカウント「いつもの匠（[itsumonotakumi@pawoo.net](https://pawoo.net/@itsumonotakumi/)）」の最新トゥート1件のアプリ名のみ表示しなさい。
1. アカウント「いつもの匠（[itsumonotakumi@pawoo.net](https://pawoo.net/@itsumonotakumi/)）」の最新トゥート1件のお気に入りがついているか、ついているならお気に入り数を表示しなさい。


## 練習6. タイムライン表示
1. インスタンスのホスト名（FQDN）を表示しなさい。
1. インスタンスの説明のみ表示しなさい。
1. インスタンスのMastodonのバージョンのみ表示しなさい。
1. インスタンスのローカルタイムラインのトゥートを10件表示しなさい。
1. インスタンスの連合タイムラインのトゥートを10件表示しなさい。
1. ハッシュタグ「#」のついたトゥートを最新10件のみ表示しなさい。
1. 自分が所属するインスタンスのローカルタイムラインのトゥートを100件表示しなさい。
1. 自分が所属するインスタンスの連合タイムラインのトゥートを100件表示しなさい。
1. ハッシュタグ「#」のついたトゥートを最新100件のみ表示しなさい。
1. 自分が所属するインスタンスのローカルタイムラインのトゥート200件表示しなさい。<br /><span class="sup">表示形式: 時間/アカウント名/トゥート内容

以上で終了です。いかがでしたでしょうか？

## 参考

Mastodon の API に関する公式情報はこちらです。

https://github.com/tootsuite/documentation/blob/master/Using-the-API/API.md

Python向けのモジュールが提供されています。今のところ頻繁に更新されています。

https://github.com/halcy/Mastodon.py

シェルスクリプト（というよりcurlコマンド）でAPIを使うための初歩的な方法を紹介されています。非常に分かり易くて参考になりました。

https://gist.github.com/okapies/eab5c6fc217e914ed0cac6c944384e4d

匠がPythonを習得するキッカケになった書籍です。第一部と第二部の8章と10章さえ読めば、今回の問題は解けます。

<a href="https://www.amazon.co.jp/%E9%80%80%E5%B1%88%E3%81%AA%E3%81%93%E3%81%A8%E3%81%AFPython%E3%81%AB%E3%82%84%E3%82%89%E3%81%9B%E3%82%88%E3%81%86-%E2%80%95%E3%83%8E%E3%83%B3%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC%E3%81%AB%E3%82%82%E3%81%A7%E3%81%8D%E3%82%8B%E8%87%AA%E5%8B%95%E5%8C%96%E5%87%A6%E7%90%86%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-Al-Sweigart/dp/487311778X/ref=as_li_ss_il?ie=UTF8&linkCode=li2&tag=itsumonotakumi-22&linkId=957ac736ae774957f716bd88e86f2db5" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=487311778X&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=itsumonotakumi-22" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=itsumonotakumi-22&l=li2&o=9&a=487311778X" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />
<a href="http://amzn.to/2zRZdac">退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング</a>

## 問い合わせ先

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

[Twitter: @itsumonotakumi](https://twitter.com/itsumonotakumi )
[Mastodon: @itsumonotakumi@pawoo.net](https://pawoo.net/@itsumonotakumi)

## 元の記事

Mastodonで始めるPythonプログラミング！腕試しテスト50本ノック（初級編） | いつもの匠
https://takulog.info/exercise-python-for-mastodon-1/