sucher

sucher(ズーハー)はエンジニアを応援します。

Mastodon の toot を Python で取得する

516 views
約 5 分

こんにちは〜
特に難しいことをする訳でもないんですけど、
Mastodonに投稿した自分のtootを一気に取ってきたいっていう状況に陥ったので、
APIを叩いて、自分のアカウントの投稿を全部取ってみました。
ほんと簡単なんで、記事にするまでもないんですけどね。

スポンサーリンク



Mastodonとは

ググると、

マストドン (Mastodon) はミニブログサービスを提供するためのフリーソフトウェア、またはこれが提供する連合型のソーシャルネットワークサービスである。

とのことですが、自分的には、居心地のいいtwitterって感じです。
twitter は3日と続かないんですが、Mastodonはよく使ってしまいます。

ものすごく個人的な情報を呟くアカウントと、
kotoba さんっていう、新たに学んだ言葉をメモっとくアカウントをこんな感じで運営?しています。

やりたいこと

この kotoba アカウントでは、
本 (小説) を読んで知らなかった単語や、読み方がわからなかった単語をメモってるんですが、
あまりにも多く。
「一冊でなんこくらいの単語知らなかったんだろう。」
という興味から、
kotoba (特定のアカウント) のこれまでの toot を全部取ってくる。
ことをしたいと思います。
結論から言うと、100近い単語をtootしていました。

では、早速取っていきましょう!

環境

python 3.6.0
macOS High Sierra 10.13.3

取得する方法

簡単な流れは、(MastodonにTootするまで(Python)) を参照します。

  1. Mastodon のモジュールインストール
  2. アプリの登録
    IDや鍵を発行してもらうために必要です。
    これ以下はpythonのコードです。
  3. OAuth 認証
    ログインします。
  4. APIを使う。
    これで、tootなどの機能が使えるようになります。
  5. 過去の投稿を全てとる。
    詳細は後ほど説明しますので、まずコードです。

出力はこんな感じです。(みづらいけど)

解説

mstdn.timeline(timeline=home, max_id=None, since_id=None, limit=None) はタイムラインを取得するメソッドです。

丁寧な説明はマストドンAPIの解説に書いてあったり、
本家のこことか見ればわかるんですけど、

タイムラインはhome以外にも、local(ローカルタイムライン)やpublic(連合タイムライン)を指定することもできます。
気になる max_id と since_id はそれぞれ、
max_id : このid以下の投稿から取得。
since_id : このid以上の投稿から取得。
ってことを意味しています。
また、
limit : 取得する投稿数の最大値 (defaultは20で、最大で40までです。)
を表しています。

なので、特に何もしない状態だと、
homeに投稿されている最新の投稿を20件取得します。

以上を踏まえると、取得したidより小さいものを40こずつ何度も取得してこないといけないので、
max_idをタイムライン取得後に記録して、
次のタイムラインの取得時にそのidを指定してあげることで最も古い投稿まで取得し続けることができます。

その他の機能

投稿する

hashtagもつけられます。

画像の投稿は残念ながら一筋縄ではいきません。

でできるかと思いきや、コードの不良?で動かないっぽいです。
mastodonをpythonからさわる API解説を参考にして、コードを書き換えてください。
変更の方法は、
まずsite-packagesの所在を確認し、

次に、

で変更しましょう!
修正箇所はだいたい1260行目あたりにあるかと思います。
vimの使い方はググってください!
書き換えたら

無事に投稿ができました。

タイムライン取得 (hashtag)

hashtagのついた投稿のみを取得したいときは

アカウントの検索

他にもいろいろあるので、試してみてください。

最後に

この小説から取ってきた単語のデータ、何か (面白いこと) に使えないだろうか。
とかちょっと思ってます。

スポンサーリンク





この記事を書いた人

Toshiki Sasaki
主にSQLとPythonの記事を書きます。
高専出身で電気電子を専攻していましたが、気まぐれで大学院では機械読解の研究に従事していました。
電気電子・NLP系の記事もちらほら書いていけたらいいなと思ってます。
Follow :

コメント

*
*
* (公開されません)

Share / Subscribe
Facebook Likes
Tweets
Hatena Bookmarks
Pinterest
Pocket
Evernote
Feedly
Send to LINE