Mastodonのトゥート収集

経緯

前回Word2Vecという単語の意味をベクトルとして表現する手法を紹介しました。そのときに学習には青空文庫のデータを使ったのですが調べた中にはTwitterからツィートを集めて学習データとしているものもありました。

TwitterのStream APIを使えば簡単にできるみたいなのでやってみようと思いましたが、どうやら今はそのは廃止されて使えないようです。そこで他にデータ収集に使えそうなものを探していたところMastodonのAPIで似たようなことができるみたいなので今回はそれを試してみることにしました。

Mastodonとは

ミニブログサービスを提供するためのフリーソフトウェアでTwitterによく似た機能を持っている。知識さえあれば誰でもインスタンスと呼ばれるサーバーを立てることができるようです。

オープンソースであり、初めて公開されたのは2016年の10月で日本では2017年の4月ごろから話題になっていたようです。

日本向けのインスタンスは色々あるようですが今回はもっとも有名なmstdn.jpに登録しました。

 

画面は以下のような感じです。

準備

・環境

Windows10

Python3.7.1(Anaconda)

 

この環境にMastodon.pyをインストール。Mastodon.pyはMastodonのAPIのラッパー。

Mastodon.pyはAnaconda Pronptで以下のコマンドを実行してインストールしました。

conda install --channel https://conda.anaconda.org/conda-forge mastodon.py

 

※Python3.7以降ではasyncが予約語となっていたようで、Mastodon.pyを利用する際にSyntaxErrorが発生しました。

 

 実行するにはPython3.7より前のものを使うかMastodon.py内で使われているasyncをリネームする必要があります。

 

・アプリケーションの登録とユーザー認証

 

 Mastodon APIにアクセスするにはアプリケーションを登録し、client idとclient secret、それからユーザー認証を行い

アクセストークンを取得しておく必要があります。これらは以下のコードで取得できます。

 


from mastodon import Mastodon

#アプリケーションの登録
Mastodon.create_app(client_name = "MyApp",            #アプリケーション名
                    api_base_url= "https://mstdn.jp", #アクセス先
                    to_file = "client_key.txt")       #client idとclient secretの出力先

#取得したclient idとclient secretでインスタンス生成
mastodon = Mastodon(client_id="client_key.txt",       #client idとclient secretを出力したファイル
                    api_base_url="https://mstdn.jp")  #アクセス先

#ユーザー認証
mastodon.log_in(username="xxxxx@xxx.xxx",    #登録したメールアドレス
                password="xxxxx",            #設定したパスワード
                to_file="access_token.txt")  #アクセストークン出力先

以上でMastodonのAPIの利用準備は完了です。2回目以降は出力したファイルを使って以下のようにAPIにアクセスできます。


from mastodon import Mastodon

#取得したclient idとclient secretでインスタンス生成
mastodon = Mastodon(client_id="client_key.txt",       #client idとclient secretを出力したファイル
                    access_token="access_token",      #アクセストークンを出力したファイル
                    api_base_url="https://mstdn.jp")  #アクセス先


トゥートの取得

Mastodonクラスのtimelineメソッドを使うことでタイムラインを取得することができます。

以下のコードは自分のアカウントのタイムラインを取得し、トゥートの内容だけ表示したものになります。

今回は自分のタイムラインから取得しましたがmastodon.timeline()メソッドの引数timelineに”local”、”public”を

指定することでアクセス先のインスタンスの全ユーザーのトゥートが流れているローカルタイムラインや連合タイムラインを

取得することができるようです。

 

また、新しくトゥートされたものを随時取得したいという場合はMastodon.pyのStreamListenerクラスでStreaming APIを

使うといいようです。

このクラスには投稿や通知などイベント時に呼び出されるメソッドが用意されており、実際に使う場合はサブクラスを

作ってそれらをオーバーライドして使います。

次のコードはローカルタイムラインの投稿を取得してそのトゥートを垂れ流すものです。

ひとまず、こんな感じでトゥートを取得する方法がわかったのであとは適当にデータを集めて機械学習で何かやってみたいです。

 

参考URL

・Mastodon(マストドン)に乗り遅れた人のための解説と使い方

https://kai-you.net/article/40548

・Mastodon.pyのドキュメント

https://mastodonpy.readthedocs.io/en/stable/#log-in

・PythonでMastodonのAPIをいじる【導入編~tootまで】

http://s4t.hatenablog.com/entry/2018/01/05/232247