MastodonをPythonから触るためのAPI "msdn"を作った

はじめに

この記事は高知工科大学 Advent Calendar 22日目の記事です.

ここでは,MastodonのWebAPIをPythonから使用するためのAPIを作成したという話をします.

Mastodonとは

まずはMastodonについて説明します.
wikipediaによると

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

「マストドン」(2018年12月17日 (月) 12:33 UTC)『ウィキペディア日本語版』

だそうです.

フリーソフトウェアとして公開されているため,自由にサーバを立ち上げることができます.
そのため,所属できるサーバがTwitterのように1つでなく,複数存在することになります.

MastodonにもTwitter同様にWebAPIが提供されています.

msdn

今回作成したものがこれです.
AltTether/msdn

マスドンって呼ぶ感じです.
何かに引っかかりそうな名前なので変えるかもです...

使用例

まだドキュメントなどで公開していないので、ここでは簡単な使い方を紹介します.
使用するにはどこかしらのMastodonインスタンスに所属していることが前提となります.

1. 自分の所属するMastodonインスタンスからアクセストークンを取得

ここではmstdn.jpインスタンスを例として進めていきたいと思います.
 
インスタンスにログインをします.

 
設定メニュを開きます.


 
開発を開きます.


 
新規アプリを開き,アプリを作成します.


適当に名前をつけて,その他はデフォルトのままで,下の方にある送信を選択します.
 
指定した名前で作成したアプリが一覧に表示されます.

 
作成したアプリを開き,アクセストークンを取得します.

この部分が今回使用するアクセストークンとなりますので、どこかに覚えておいてください.

2. msdnのインストール

現状ではpipからのインストールはできないので以下の手順でインストールをお願いします.

AltTether/msdnリポジトリをローカルにcloneしてください.

$ git clone https://github.com/AltTether/msdn.git  

下記コマンドでインストールをしてください.

$ python3 setup.py install  

3. pythonから呼び出す

ここでもmstdn.jpインスタンスを例として進めていきます.
 
Pythonを開きます.

$ python3  

 
Msdnクラスをimportします

>>> from msdn import Msdn  

 
所属インスタンスのURIとアクセストークンを用意します.

>>> base_uri = 'https://mstdn.jp'  
>>> access_token = 'YOUR_MASTODON_ACCESS_TOKEN'  

 
Msdnクラスのインスタンスを生成します.

>>> msdn = Msdn(base_uri, access_token)  

 
呼び出したいエンドポイントにしたがってリクエストを出します.
今回はエンドポイント/v1/api/accounts/verify_credentialsを例として使用します.

基本的にどのエンドポイントに対しても,/v1/api/を抜いたエンドポイントの/区切りでクラス内メンバを参照することによってリクエストを出すことができます.

>>> response = msdn.accounts.verify_credentials()  

レスポンスとしてRequestsResponseオブジェクトが返ってきます

>>> response.text  
{"id":"YOUR_ID","username":"YOUR_USERNAME",...}  

作成するにあたって

今回APIを作成する時に,以下のものを参考にして作成しました.
sixohsix/twitter

リクエストをする時の呼び出し方が好きだったのでほとんど同じ手法を実装しました.
この手法の利点としてWebAPIのエンドポイントさえわかれば呼び出せるという点があると思いましたので取り入れました.

Contributeについて

保留

最後に

今回このAPIを作成したモチベーションとしては

  • OSSのように色々な人が使用できる何かを作成したい
  • なるべく規模を小さくして作成したい

というようなものがありました.
また,同時期にMastodonを触る機会があったのでこれだと思い,作成しました.
 
そんなこんなで作成したAPIもまだ未完成です.
それに,作者にも技術的にわからない部分や知らない部分があると思います.
他にも,OSSとして作成したという点もまだ活かせていません.
なので、技術的にお力添えをいただけたら幸いです.
 
ですが
まだOSSにおいてやるべきこと(CONTRIBUTING fileとか)が残っていると思うので
上記のContributeについては一旦保留にしておきます.
何かしら方針とかが決まったら更新します.