情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

Node.jsでMastodonのユーザーに関する情報を取得する

そもそもMastodonとは何?

Mastodonとは何かについて知りたい方は下の記事を参照してください。

準備

Mastodonのユーザーに関する情報を取得するには取得するユーザーの種類に応じて適切なMastodonのAPIを呼び出さなければなりません。

MastodonのAPIを呼び出すにはアクセストークンが必要になりますので、事前に取得しておく必要があります。

Mastodonのアクセストークンを手動で取得する方法については下の記事を参照してください。

Mastodonのアクセストークンを自動で取得する方法については後日記事を書く予定です。

ユーザーに関する情報の取得

現在のユーザー(APIを呼び出しているユーザー)に関する情報を取得するには現在のユーザーのインスタンスの/api/v1/accounts/verify_credentialsパスに対してGETHTTPリクエストを行います。

特定の番号のユーザーに関する情報を取得するにはユーザーのインスタンスの/api/v1/accounts/:idパスに対してGETHTTPリクエストを行います。ただし、パスの:idの部分にはユーザーの番号を指定します。たとえば、番号が12345であるユーザーに関する情報を取得するにはユーザーのインスタンスの/api/v1/accounts/12345パスに対してGETHTTPリクエストを行います。

また、上の2つのHTTPリクエストに対するHTTPレスポンスのボディはユーザーを表すオブジェクトから成るJSONとなります。

ユーザーを表すオブジェクトは下のようなプロパティを有します。

  • id・・・ユーザーの番号です。
  • username・・・ユーザーの識別子です。
  • acct・・・ユーザーの完全な識別子です。ユーザーが異なるインスタンスに所属している場合にはインスタンスの名称が含まれます。
  • display_name・・・ユーザーの名称です。
  • locked・・・ユーザーをフォローする場合にユーザーからの承認が必要かどうかです。
  • created_at・・・ユーザーが作成された日時です。
  • followers_count・・・ユーザーがフォローされているユーザー(ユーザーのフォロワー)の数です。
  • following_count・・・ユーザーがフォローしているユーザー(ユーザーのフォロイー)の数です。
  • statuses_count・・・ユーザーのトゥートの数です。
  • note・・・ユーザーのプロフィールです。
  • url・・・ユーザーのウェブページのURLです。
  • avatar・・・ユーザーの画像のURLです。
  • header・・・ユーザーのヘッダ画像のURLです。

なお、GETHTTPリクエストを行う方法に関しては下の記事を参照してください。

ただし、HTTPリクエストを行う際にはAuthorizationヘッダフィールドの値にアクセストークンを設定しなければなりません。ただし、アクセストークンの冒頭にはBearerと1文字の空白を付加しなければなりませんので注意してください。

サンプルコード1

mstdn.jpインスタンスの番号が42480のユーザーに関する情報を取得するGETHTTPリクエストを行い、HTTPレスポンスのボディをJSONとして標準出力に出力します。

mastodon-user.js

var http = require('http');
var https = require('https');
var concatStream = require('concat-stream');
var mimelib = require('mimelib');
var jschardet = require('jschardet');
var iconvLite = require('iconv-lite');
var pump = require('pump');

var u = {
    protocol: 'https:', 
    hostname: 'mstdn.jp', 
    path: '/api/v1/accounts/42480', 
    headers: {
        'Authorization': 'Bearer 1a5429d614323f78d6254d4c1a2446c53f6a027807ff73a2a237963fecc9ff44'
    }
};

var client = (u.protocol === 'https:' ? https : http).get(u, function (res) {
    if (res.statusCode === 200) {
        var writable = concatStream(function (data) {
            var encoding = undefined;
            if (res.headers['content-type'] !== undefined) {
                encoding = mimelib.parseHeaderLine(res.headers['content-type']).charset;
            }
            if (encoding === undefined) {
                encoding = jschardet.detect(data).encoding;
            }
            if (encoding !== undefined && iconvLite.encodingExists(encoding)) {
                console.log(JSON.parse(iconvLite.decode(data, encoding)));
            }
            else {
                console.error('can\'t detect encoding.');
                process.exit(1);
            }
        });
        pump(res, writable, function (err) {
            if (err) {
                console.error(err);
                process.exit(1);
            }
        });
    }
    else {
        console.error(http.STATUS_CODES[res.statusCode]);
        process.exit(1);
    }
});
client.setTimeout(10000, function () {
    console.error('timeouted.');
    client.abort();
});
client.on('error', function (err) {
    console.error(err);
    process.exit(1);
});

使用パッケージ

実行結果

C:\work\node>node mastodon-user.js
{ id: 42480,
  username: 'pizyumi',
  acct: 'pizyumi',
  display_name: 'ぴずゆみな(皮頭湯味菜)',
  locked: false,
  created_at: '2017-04-15T14:56:24.037Z',
  followers_count: 204,
  following_count: 252,
  statuses_count: 231,
  note: '<p>プログラマー兼投資家兼経営者<br />元フリーソフト開発者<br />元IT企業勤務、現フリーランス(ほぼ投資家、投資規模は8桁程度、長期投資中心ですが、短期をやることもあります)<br />二次元好き、アイドル好き、エロも好き</p>',
  url: 'https://mstdn.jp/@pizyumi',
  avatar: 'https://media.mstdn.jp/images/accounts/avatars/000/042/480/original/ecc3b452559f0bfc.png',
  avatar_static: 'https://media.mstdn.jp/images/accounts/avatars/000/042/480/original/ecc3b452559f0bfc.png',
  header: '/headers/original/missing.png',
  header_static: '/headers/original/missing.png' }

関連

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-mastodon, Node.js