Spotifyのプレイリストメーカー

Spotify Web API(SWA)とGoogle Apps Script(GAS)が、ライブラリを無料のスケジュールされた実行を備えた柔軟なプレイリストビルダーにどのように変えたかをご覧ください





プレイリストコンストラクターとは、トラックを収集、フィルタリング、並べ替え、追加するためのメカニズムを意味します。





記事の最後にあるソースコードとドキュメントへのリンク。





問題

公式APIを持つことで、Spotifyに多くの興味深いツールが生まれました。私たちの文脈では、よりスマートなプレイリストを検討してくださいグラフ形式のグラフィカルインターフェイス、多くの制御ブロックにより、平均的なユーザーにとって非常に使いやすくなっています。





サービスを多用すると、いくつかの欠点が明らかになりました。





  • リスニング履歴の欠如





  • トラックの限定追加





  • 限られた数の予定された開始





  • Cyrillicでの誤った作業





時間の経過とともに、新しいトラックソースへの欲求がここに追加されます。より複雑なフィルタリングアルゴリズム。このサービスは、新機能の観点から開発を停止しました。

これに関連して、これらの不利な点を排除する代替案が望まれていました。





決定

GAS JavaScript - Goofy. () .





GAS , . , 6 ; API 20 . , . Smarter Playlists, . .





, Goofy









  • , ,

















  • Last.fm , ,





. . Goofy . , .





  • SWA 50 . 51- 1-.





  • GAS Google Drive. SWA . , . , .





  • . 30 . . "" SWA.





  • - Last.fm. . , . , Spotify Google Drive. Last.fm Spotify.





( GAS) ( , ). .





1) : , .





次に、GASのグラフィカルな手段を使用してトリガーを作成します。その結果、たとえば、1分に1回、プレイリストは5つのランダムなトラックで更新されます。





function createHelloPlaylist() {
    let tracks = Source.getSavedTracks();
    Selector.keepRandom(tracks, 5);
    Playlist.saveWithReplace({
        name: 'Hello, playlist',
        tracks: tracks,
    });
}
      
      



2)1か月以上聴いていないお気に入りのトラックを公開します。





function templateSavedAndForgot(){
    let recentTracks = Source.getRecentTracks(2500);
    let savedTracks = Source.getSavedTracks(); 
    Filter.removeTracks(savedTracks, recentTracks);

    let startDate = new Date('2006-01-01');
    let endDate = Filter.getDateRel(30, 'endDay');
    Filter.rangeDateAbs(savedTracks, startDate, endDate);

    Selector.keepRandom(savedTracks, 20);    
    Order.sort(savedTracks, 'meta.added_at', 'asc');
    Playlist.saveWithReplace({
        name: '  ',
        tracks: savedTracks,
        randomCover: 'update', //    
    });
}
      
      



3)毎週、追跡されたアーティストのアルバムとシングルのトラックを取得します。





function createNewRelease() {
    const playlistId = 'abc';
    let tracks = Source.getArtistsTracks({
        artist: { 
          followed_include: true 
        },
        album: { 
          groups: 'album,single', 
          release_date: { sinceDays: 7, beforeDays: 0 } 
        },
    });
    Order.shuffle(tracks);

    Combiner.push(tracks, Source.getPlaylistTracks('name', playlistId));
    Filter.removeTracks(tracks, RecentTracks.get(3000));
    Filter.matchOriginalOnly(tracks);
    
    Playlist.saveWithReplace({
        id: playlistId,
        name: ' ',
        tracks: tracks,
        randomCover: 'update',
    });
}
      
      



リンク

ドキュメントは、プログラミングに精通していないユーザーに焦点を当てて書かれています。コピー&ペーストのテンプレートと例を通じてGoofyを使用できるようにするため。





フォーラムを含むGitHubのソースコード








All Articles