1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MusicBrainz APIと使ってアーティストの人気の曲名を返してもらう

Posted at

こんにちは、ウエハラ シンペイです。

今回MusicBrainz APIとLINE botを使って
アーティストの人気の曲を教えてくれると作っていこうと思います。

MusicBrainz APIとは?

非営利団体であるMetaBrai
nzによって運営されいる、オープンな音楽データベースサービスだそうです。国内アーティストの情報を形成されていて、今回はこのAPIを試しに触ってみました。

MBlogo.png

MusicBrainz APIは何ができる?

アーティスト、イベント、ジャンル、レーベル、作品など音楽に関係する情報が数多く検索可能でそれをXMLまたはJSON形式で返してくれるもののようです。

特に金額は発生せず、API キーもいらないけど、リクエストに返される数には制限があり最大25個とのこと(多分)

MusicBrainz API

LINEでアーティストを送ると曲名を返してもらう

実際のコード
sample.js

const express = require('express');
const line = require('@line/bot-sdk');
const axios = require('axios'); // axiosを追加

const app = express();

const config = {
  channelSecret: process.env.CHANNEL_SECRET || 'XXXXXXXXXXXXXXX',
  channelAccessToken: process.env.CHANNEL_ACCESS_TOKEN || 'XXXXXXXXXXXXXXX',
};

const client = new line.Client(config);

app.post('/webhook', line.middleware(config), (req, res) => {
  Promise
    .all(req.body.events.map(handleEvent))
    .then((result) => res.json(result))
    .catch((err) => {
      console.error(err);
      res.status(500).end();
    });
});

async function handleEvent(event) {
  if (event.type !== 'message' || event.message.type !== 'text') {
    return Promise.resolve(null);
  }

  const artistName = event.message.text;
  try {
    const response = await axios.get(`https://musicbrainz.org/ws/2/recording/?query=artist:${encodeURIComponent(artistName)}&fmt=json`);
    const recordings = response.data.recordings;
    if (recordings.length > 0) {
      const titles = recordings.map(recording => recording.title).join('\n');
      return client.replyMessage(event.replyToken, {
        type: 'text',
        text: `曲名リスト:\n${titles}`,
      });
    } else {
      return client.replyMessage(event.replyToken, {
        type: 'text',
        text: 'アーティスト名が一致しません',
      });
    }
  } catch (error) {
    console.error(error);
    return client.replyMessage(event.replyToken, {
      type: 'text',
      text: 'エラーが発生しました',
    });
  }
}

const port = process.env.PORT || 3000;
app.listen(port, () => {
  console.log(`Listening on port ${port}`);
});


曲名が無事帰ってきました!!

ただ、いきなりインストが入っていたりと順番を人気順にしたいところでしたが、MusicBrainz APIに関するようなデータがないらしく、このあたりは他の方法があれば知りたいところでした。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?