Node.jsアプリでMastodonを操作
こんにちは
最近ポストTwitterとしてMastodonが注目されていますね
今回はそのMastodonをNode.jsとExpressで操作する方法をご紹介します
準備
Node.jsとExpressはすでにインストールされているものとします
npm install --save mastodon-api
でmastodon-apiをインストールします
www.npmjs.com
client ID・client secret・Access Tokenの取得
var express = require('express'); var app = express(); var Mastodon = require('mastodon-api'); var client_id, client_secret; var access_token; var base_url = 'https://instance_name'; //自分の使いたいアカウントのあるインスタンスのURL var redirect_url = 'https://*********/callback'; //リダイレクトURL app.get('/auth', function(request, response){ Mastodon.createOAuthApp(base_url + '/api/v1/apps', 'AppName', 'read write follow', redirect_url) .then(resp => { client_id = resp.client_id; client_secret = res.client_secret; Mastodon.getAuthorizationUrl(client_id, client_secret, base_url, 'read write follow', redirect_url) .then(resp=> response.redirect(resp)); }); app.get('/callback', function(request, response){ Mastodon.getAccessToken(client_id, client_secret, request.query.code, base_url, redirect_url) .then(resp=> { access_token = resp; response.redirect('https://*********/'); }); }
上記のコードでhttps://*********/authにアクセスするとMastodon.createOAuthAppでclient_idとclient_secretが返され、Mastodon.getAuthorizationUrlで認証URLが与えられます
その認証URLにアクセスしてログイン・アプリの操作許可をするとhttps://*********/callbackに移り、クエリパラメーターで認証コードが与えられるのでそれをMastodon.getAccessTokenに渡すとアクセストークンを取得することができます
引数・戻り値の説明
Mastodon.createOAuthApp(url, clientName, scopes, redirectUri)
URL・アプリ名・権限・リダイレクトURLを渡すと
id・client ID・client secretを返す関数です
- URL : 自分の使いたいアカウントのあるインスタンスのAPIのURL、インスタンスのURL+'/api/v1/apps'、デフォルトではhttps://mastodon.social/api/v1/apps
- 権限 : 権限の範囲、read(タイムラインなどの読み込み権限)・write(トゥート権限)・follow(フォロー権限)のうちから選べる、デフォルトでは'read write follow'
- リダイレクトURL : リダイレクトされるURL、デフォルトではurn:ietf:wg:oauth:2.0:oob
- id : そのインスタンスに登録されたアプリの登録idのようなもの
- client ID・client secret : それぞれ認証のために必要なもの
Mastodon.getAuthorizationUrl(clientId, clientSecret, baseUrl, scope, redirectUri)
client ID・client secret・base URL・権限・リダイレクトURLを渡すと認証URLを返す関数
- base URL : 自分の使いたいアカウントのあるインスタンスのAPIのURL、デフォルトではhttps://mastodon.social
Mastodon.getAccessToken(clientId, clientSecret, authorizationCode, baseUrl)
client ID・client secret・認証コード・base URLを渡すとAccess Tokenを返す関数
- 認証コード : Access Tokenを取得するために必要なコード
ローカルでアクセストークンを取得したい場合はリダイレクトURLをurn:ietf:wg:oauth:2.0:oobにしてください(デフォルトがこれなのでわざわざ指定しなくてもよし)
ちなみに僕はMastodon.getAuthorizationUrlでリダイレクトURLを指定せずにいたため何度もinvalid grant(不正な認証)になって詰んでいました
トゥートする
app.get('/', function(request, response){ const M = new Mastodon({ access_token: access_token, timeout_ms: 60*1000, api_url: 'https://' + base_url + '/api/v1/', }); M.post('statuses',{status: 'Hello World'}); }
画像付きの場合
M.post('media',{ file: fs.createReadStream('path/to/image.png') }) .then(resp=>{ const id = resp.data.id; M.post('statuses',{status: 'Image Toot!', media_ids: [id]}); });