Greasy Fork is available in English.

从Discogs添加豆瓣条目

添加豆瓣条目,自动填写信息,使用https://api.discogs.com

// ==UserScript==
// @name         从Discogs添加豆瓣条目
// @license MIT
// @namespace    http://tampermonkey.net/
// @version      1.8
// @license      MIT
// @run-at document-end
// @author       越洋飞机
// @match        *://www.discogs.com/release*
// @match        *://www.discogs.com/master*
// @icon         https://s.discogs.com/badaa268132c5df6360d067acd267fbebd755915/images/discogs-white.png?5
// @grant        GM_xmlhttpRequest
// @grant        GM_download
// @grant        GM_openInTab
// @grant        GM_addElement
// @grant        GM_registerMenuCommand
// @description  添加豆瓣条目,自动填写信息,使用https://api.discogs.com
// ==/UserScript==

(function () {
  'use strict';

  const doubanURL = 'https://music.douban.com/new_subject';
  const discogsURL = window.location.href;

  function getRequest(url) {
    return fetch(url).then(response => response.json());
  }

  function newSubject() {
    const masterURL = 'https://www.discogs.com/master/';
    const releaseURL = 'https://www.discogs.com/release/';
    const apiURL = 'https://api.discogs.com/';
    let id;

    if (discogsURL.startsWith(masterURL)) {
      id = discogsURL.substring(31, discogsURL.indexOf('-'));
      getRequest(`${apiURL}masters/${id}`).then(data => {
        const releaseID = data.main_release;
        addItem(releaseID);
      });
    } else if (discogsURL.startsWith(releaseURL)) {
      id = discogsURL.substring(32, discogsURL.indexOf('-'));
      addItem(id);
    }
  }

  function addItem(releaseID) {
    const apiToken = 'tgRatMaOmFfXjBwHNBlZDQtXrOAELZwpywEOCEbb';
    const url = `https://api.discogs.com/releases/${releaseID}?token=${apiToken}`;

    getRequest(url).then(data => {
      const info = {
        artists: data.artists ? [...data.artists] : [],
        genres: data.genres ? [...data.genres] : [],
        numArtists: data.artists ? data.artists.length : 0,
        label: data.labels && data.labels.length > 0 ? data.labels[0].name : 'Unknown',
        title: data.title || 'Unknown',
        format: data.formats && data.formats.length > 0 ? data.formats[0].name : 'Unknown',
        styles: data.styles ? [...data.styles] : 'Unknown',
        release: data.released || 'Unknown',
        note: data.notes || 'None',
        country: data.country || 'Unknown',
        link: discogsURL,
        tracklist: '',
        type: determineType(data.formats && data.formats.length > 0 ? data.formats[0].descriptions : null),
      };

      if (data.tracklist && data.tracklist.length > 0) {
        for (const track of data.tracklist) {
          if (track.type_ === 'heading') {
            info.tracklist += `${track.title}\n`;
          } else if (track.type_ === 'track') {
            info.tracklist += `${track.position}. ${track.title} ${track.duration}\n`;
          }
        }
      }

      console.log(info);

      if (data.images && data.images.length > 0) {
        GM_download(data.images[0].uri, `${info.title}.jpg`);
      }

      window.open(doubanURL, JSON.stringify(info));
    });
  }

  function determineType(descriptions) {
    if (!descriptions) return '';
    if (descriptions.includes('Album') || descriptions.includes('LP') || descriptions.includes('Stereo') ||
        descriptions.includes('12"') || descriptions.includes('33 ⅓ RPM')) {
      return '专辑';
    }
    if (descriptions.includes('Single') || descriptions.includes('7"') || descriptions.includes('45 RPM')) {
      return '单曲';
    }
    if (descriptions.includes('Compilation')) {
      return '选集';
    }
    if (descriptions.includes('EP') || descriptions.includes('Mini-Album')) {
      return 'EP';
    }
    return '';
  }

  GM_registerMenuCommand('添加条目', newSubject);
})();