libspotify API の最新バージョン (12.1.51) を使用しています。また、C# と libspotify.NET (libspotify の単純な相互運用ラッパー ライブラリ) を使用してコーディングしています。libspotify API を使用してプレイリストを作成するプログラムを作成しました。作成したプレイリストを確認するために、Windows 用の最新のネイティブ Spotify クライアントを使用しています。
プレイリスト名とトラック URI または 1 つのアルバム URI のリストを待機し、対応するプレイリストを作成するプログラムを作成しました。アルバム URI が指定されている場合、アルバムのすべてのトラックが新しいプレイリストに追加されます。それ以外の場合は、指定されたトラック URI のリストを使用して新しいプレイリストが作成されます。プログラムはコールバックまで待機します
playlist_update_in_progress
が呼び出され、作成する新しいプレイリストを受け入れる前に、done パラメータが true になります。
プレイリストが名前なしで作成されているが、すべてのトラックが含まれている場合があることを除いて、これはうまく機能します。名前のないまったく同じプレイリストを作成するようにプログラムに指示するだけで、2回目は機能する可能性があります。これはランダムに発生しますが、約 200 のプレイリストを作成すると、おそらく 5 ~ 10 のプレイリストに名前が付けられないことに気付きました。プログラムが実行され、プレイリストが作成され、名前のないプレイリストがランダムに表示されると、プレイリストが Spotify クライアントに追加されていることがわかります。プレイリストは、コールバックが呼び出され、done が true となるのとほぼ同時に表示されます (もちろん、常にではなく、遅延が発生する可能性があります)。Windows 用の Spotify クライアントで手動でプレイリストの名前を変更しようとしましたが、問題はありませんでした (プレイリスト名の長さは 0 または空の文字列でした)。ネイティブの Spotify クライアントでは、空のプレイリスト名も許可されません。
私が使う:
sp_playlistcontainer_add_new_playlist
新しいプレイリストを追加するには、IntPtr と C# 文字列を使用してそれに渡してみました。両方を試しました:
[DllImport("libspotify")]
public static extern IntPtr sp_playlistcontainer_add_new_playlist(IntPtr playlistContainerPtr, string name);
[DllImport("libspotify")]
public static extern IntPtr sp_playlistcontainer_add_new_playlist(IntPtr playlistContainerPtr, IntPtr namePtr);
そして、私も試しました
sp_playlist_rename
プレイリストの名前を数回(何らかの修正として)変更しても成功しません。プレイリストが作成されたときにサーバーで何が起こるか正確にはわかりません。これはバグですか、それとも何が起こっているのですか?
私は実際にこれを機能させるために多くのハックを試みましたが、役に立ちませんでした.
プログラムに関する詳細情報:
最初に Spotify に接続し、コンソールからの入力を待ちます。次の文字列の入力をチェックします。
名前とトラックのリストを使用してプレイリストを作成するには:
createplaylistfromtracks "Tracks playlist" spotify:track:36MuLw248uzLPtrJ6073ZR spotify:track:5WPkvx0MARhlWhXp1sJg4k spotify:track:1VrdbSFVU9wJkuDM2sWYVe spotify:track:66RG0BBwpQqHxZs06UUyeo spotify:track:0zp3uPuhnARR1XYsgg5JLV
アルバム URI から名前とトラックのリストを使用してプレイリストを作成するには:
createplaylistfromalbum "Album playlist" spotify:album:5rVwDKRKa1FjDlLofDZyRb
次に、プログラムは入力を解析してプレイリストを作成し、フラグ Busy = true を設定して、プレイリスト_update_in_progress コールバックが呼び出され、done が true になるときに発生する Busy = false まで、コンソールが入力を読み取らないようにします。次に、入力を再度読み取ります...
どんな助けでも大歓迎です。