iTunesのプレイリストをwalkmanに同期できないかと、
iTunesとwalkmanのプレイリストについて調べてみたら割と簡単そうだったので、
Pythonで同期するスクリプトを書いてみました。

作成したスクリプトは以下のgistに上げています。
https://gist.github.com/takemikami/153994da6174e709a0c55957b8425bb7

このエントリでは、iTunesとwalkmanのプレイリストの仕組みと、
作成したスクリプトの概要を説明します。

  • iTunesのプレイリストの仕組み
  • walkmanのプレイリストの仕組み
  • 作成したスクリプトの概要

iTunesのプレイリストの仕組み

iTunesのプレイリストは、
iTunesのライブラリのディレクトリのiTunes Library.xmlというファイルに格納されています。

このファイルはXMLPlistという形式のファイルのようです。
dictタグ配下に辞書(key-value)形式で, arrayタグ配下にリスト形式で情報を格納しています。

Understanding XML Property Lists | developer.apple.com
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/PropertyLists/UnderstandXMLPlist/UnderstandXMLPlist.html

プレイリストは、/plist/dict[key=Playlists]配下にarray形式で格納されています。
プレイリストの各要素はdict形式で、
以下の例のように、Nameにプレイリスト名、Playlist ItemsにTrackのIDリストが格納されています。
(スマートプレイリストの場合でも同じ形式のようです)

<dict>
  <key>Playlist ID</key><integer>56907</integer>
  ※途中省略※
  <key>Name</key><string>[ML] MILLION THE@TER GENERATION</string>
  <key>Playlist Items</key>
  <array>
    <dict>
      <key>Track ID</key><integer>56868</integer>
    </dict>
    <dict>
      <key>Track ID</key><integer>56883</integer>
    </dict>
    <dict>
      <key>Track ID</key><integer>56893</integer>
    </dict>
  </array>
</dict>

プレイリストにあるTrackのIDリストに対応する楽曲の情報は、
/plist/dict[key=Tracks]配下にdict形式で格納されています。
以下の例のように、keyがTrackIDで、
対応する値はdict形式になっており、楽曲の属性情報が格納されています。

<key>56868</key>
<dict>
  <key>Track ID</key><integer>56868</integer>
  <key>Size</key><integer>7620082</integer>
  <key>Total Time</key><integer>309263</integer>
  <key>Disc Number</key><integer>1</integer>
  <key>Disc Count</key><integer>1</integer>
  <key>Track Number</key><integer>1</integer>
  <key>Track Count</key><integer>3</integer>
  ※途中省略※
  <key>Name</key><string>Brand New Theater!</string>
  <key>Artist</key><string>765 MILLION ALLSTARS</string>
  <key>Album Artist</key><string>THE IDOLM@STER MILLIONSTARS</string>
  <key>Composer</key><string>BNSI (佐藤貴文)</string>
  <key>Album</key><string>THE IDOLM@STER MILLION THE@TER GENERATION 01</string>
  <key>Genre</key><string>Soundtrack</string>
  ※途中省略※
</dict>

walkmanのプレイリストの仕組み

walkmanのプレイリストは、M3U形式です。
walkmanでどのように配置すればよいかについては、以下のブログが詳しいです。

WALKMANでX-アプリを使わずにプレイリストを作成する方法 | 道すがら講堂 http://michisugara.jp/archives/2014/walkman_playlist.html

M3U形式の概要はWikipediaのエントリを読めばわかるかと思います。

M3U | Wikipedia
https://ja.wikipedia.org/wiki/M3U

以下は、iTunesのプレイリスト説明で示した例をM3Uに変換したものです。

#EXTM3U
#EXTINF:309,Brand New Theater!
THE IDOLM@STER MILLIONSTARS/THE IDOLM@STER MILLION THE@TER GENERATION 01/1 Brand New Theater!.mp3
#EXTINF:281,Dreaming!
THE IDOLM@STER MILLIONSTARS/THE IDOLM@STER MILLION THE@TER GENERATION 01/2 Dreaming!.mp3
#EXTINF:250,インヴィンシブル・ジャスティス
THE IDOLM@STER MILLIONSTARS/THE IDOLM@STER MILLION THE@TER GENERATION 01/3 インヴィンシブル・ジャスティス.mp3

作成したスクリプトの概要

iTunesとwalkmanのプレイリストの形式がわかったので、
スクリプトでは、プレイリスト形式の変換と、含まれるmp3ファイルのコピーを行っています。

実行すると以下のような感じで、
iTunes側のプレイリストが一覧表示されるので、
同期したいプレイリストの番号を入力するとコピーするという流れです。
# ちなみに、以下の10~12はアーティスト名を条件にしたスマートプレイリストですが、
# これらも同様に同期できました

$ python walkman_cp.py
1 ライブラリ
2 ミュージック
※途中省略※
9 THE IDOLM@STER
10 小日向美穂
11 萩原雪歩
12 箱崎星梨花
13 [765] ANIM@TION MASTER
14 [765] GRE@TEST BEST
15 [765] MASTER ARTIST
16 [765] MASTERPIECE & MASTERWORK
17 [765] PLATINUM MASTER
18 [CG] ANIMATION PROJECT
19 [CG] CINDERELLA MASTER
20 [CG] STARLIGHT MASTER
21 [CG] その他
22 [DS] DREAM SYMPHONY
23 [ML] COLLECTION
24 [ML] LIVE THE@TER DREAMS
25 [ML] LIVE THE@TER FORWARD
26 [ML] LIVE THE@TER HARMONY
27 [ML] LIVE THE@TER PERFORMANCE
28 [ML] MILLION RADIO!
29 [ML] MILLION THE@TER GENERATION
30 [ML] THE@TER ACTIVITIES
31 [ML] THE@TER DAYS
※途中省略※
? 29

適当にさらっと書いたスクリプトなので、特殊な記号とかあると失敗すると思います。
# 最初に書いたスクリプトでは、
# DearlyStarsの「"Hello!!"」と、萩原雪歩の「ALRIGHT*」が失敗していたので、
# 「"」と「*」は除去しておきましたが

きちんと作るなら、勉強がてらswiftで書いてみようかな。