Apple Music untuk pengembang

Kata pengantar


Tidak peduli seberapa dimarahi Apple untuk platform tertutup dan ekosistem itu sendiri, beberapa solusi mereka adalah pengecualian. Ada banyak layanan streaming di pasar, tetapi menyediakan SDK lengkap untuk streaming dalam produk pihak ketiga sangat kecil, untuk pasar Rusia daftar SDK yang tersedia secara resmi terbatas pada Deezer dan Apple Music. Tentu saja, ketika Spotify datang ke pasar kami, akan ada lebih banyak SDK yang tersedia, tetapi sejauh ini ada dua pemain dan hanya satu dari mereka yang memiliki basis pengguna yang luas.


Kebetulan saya punya pengalaman dengan Deezer SDK untuk Android dan saat ini saya aktif bekerja dengan Apple Music SDK ( MusicKit ) untuk iOS. Dan perbedaan utama dari pengalaman dengan Deezer adalah bahwa MusicKit adalah puncak gunung es, itu juga API yang tersedia untuk umum. Tidak seperti Deezer, di mana mengulang sebagian besar fungsi aplikasi resmi hanya proses yang panjang, tidak mungkin untuk mengulangi fungsionalitas bahkan halaman web Apple Music hanya menggunakan API publik. Bahkan jika Apple menggunakan MusicKit dalam solusinya, maka selain itu, Apple menggunakan sejumlah permintaan API tidak berdokumen dan API pribadi yang tidak diperbolehkan untuk digunakan oleh manusia.


Dalam artikel ini, saya akan berbicara tentang bekerja dengan MusicKit dari sudut pandang pengembang dalam konteks penerapan tugas yang cukup sederhana : mencari katalog, menampilkan gambar dalam hasil pencarian, mendapatkan lagu, rekomendasi, dan bahkan memainkan beberapa jenis musik. Ke depan, saya akan mengatakan bahwa banyak hal di atas akan berlaku untuk bekerja dengan Apple Music di Android dan Javascript.


Jika perlu, saya siap memberikan jawaban terperinci dengan kode untuk pertanyaan di komentar.


Pisahkan lalat dari irisan daging


Saat bekerja dengan MusicKit di iOS, Anda harus berinteraksi dengan entitas berikut:


  • StoreKit untuk otorisasi di Apple Music dan menawarkan berlangganan layanan ( rujukan jika Anda dapat berlangganan program Afiliasi )
  • API HTTP untuk mencari dan mengambil berbagai informasi dari direktori
  • iTunes Search API untuk mencari direktori iTunes ( alternatif yang sangat berguna untuk HTTP API ). Apple menunjukkan batas maksimum 20 permintaan per menit, ini seringkali cukup ketika membuat permintaan dari perangkat pengguna
  • Media Player untuk memainkan dan mengelola antrian

Juga, saat menghubungkan ke program Afiliasi, Anda dapat meminta akses ke dump metadata Umpan Mitra Perusahaan , yang direkomendasikan oleh Apple untuk digunakan alih-alih permintaan yang sering ke API Pencarian iTunes.


Dan untuk berjaga-jaga, Music.app adalah aplikasi Musik di perangkat iOS, yang merupakan pemutar Musik Apple resmi.


Sumber informasi, dalam mengurangi urutan utilitasnya:


  • Dokumentasi resmi
  • Cari semua dokumentasi Apple
  • Metode Eksperimen Sains 1 dengan API HTTP
  • Konsol Pengembang di browser favorit Anda, disematkan ke halaman web entitas yang diminati di Apple Music
  • Forum Pengembang Apple
  • Stackoverflow

Cari Gambar


Cara paling jelas untuk memeriksa apakah sesuatu dapat dilakukan dalam aplikasi Anda adalah kenyataan bahwa sesuatu seperti ini tersedia di aplikasi resmi. Di sini kita ambil, misalnya, pencarian. Kami mencari grup "The Police" dan di Music.app kami memiliki foto grup dengan Sting yang tersenyum:


pencarian polisi

Hebat, kami akan menggunakan API pencarian . Dalam penerbitan, kami memiliki kunci artwork dengan tautan url tertanam untuk semuanya kecuali artis. Ini aneh. Periksa lagi, di Music.app semuanya ada di sana. Selain itu, antarmuka web juga memiliki foto, dan tautan ke halaman web tersedia di API mesin pencari json.


ITunes Search API juga tidak artistLinkUrl gambar, tetapi juga menyertakan alamat halaman web dengan kunci artistLinkUrl di artistLinkUrl .


Nah, apa yang harus dilakukan, Anda harus mengunduh halaman web dan mendapatkan alamat gambar darinya, untungnya, para pengembang berhati-hati dan mendaftarkan alamat gambar dalam meta-informasi:


 <meta property="og:image" content="https://is5-ssl.mzstatic.com/image/thumb/Features113/v4/bb/a2/66/bba266dd-570b-bff7-d7c6-777982582964/mzl.tdrwskof.jpg/1200x630cw.png" id="ember52310559" class="ember-view"> 

Secara formal, kami telah melanggar aturan Apple yang melarang "pengikisan" halaman web mereka. Faktanya, semua aplikasi pihak ketiga melakukan ini, kecuali bagi mereka yang mencari gambar menggunakan layanan pihak ketiga.


Ada satu lagi minus: kami meminta halaman berukuran beberapa ratus kilobyte. Untuk aplikasi yang sudah menggerakkan data dalam jumlah besar ( memutar musik ), itu dapat ditoleransi ( terutama ketika Anda menganggap bahwa data ditransmisikan dalam bentuk terkompresi ), tetapi dalam kasus umum itu tidak terlalu.


Ukuran gambar dapat disesuaikan dengan kebutuhan Anda: di url terdapat template untuk penggantian ( {w} , {h} ), dan pada halaman web tautan ke gambar memiliki format yang sama, sehingga tidak ada kesulitan dalam mendapatkan gambar dengan ukuran yang tepat. Jika Anda ingin mendapatkan gambar bulat, Anda perlu menambahkan cw sebelum ekstensi.


Bonus tentang gambar untuk ditampilkan di pemutar


Selama pemutaran, pemutar dari Media Player beroperasi pada konstruk MPMediaItem , yang, khususnya, menyediakan objek Artwork . Sangat nyaman untuk menampilkan gambar trek di pemain. Satu-satunya masalah adalah bahwa, dalam praktiknya, objek ini, apa pun yang dikatakan orang, tidak memberikan gambar untuk streaming musik ( yang mana pun adalah musik dari Apple Music ), jadi Anda harus "memutar" MPMediaItem diputar dengan lagu yang ditambahkan ke antrian dan diunduh gambar mirip dengan album.


Cari berdasarkan genre


ITunes dan aplikasi Apple Music memiliki daftar genre dan lagu-lagu top di dalamnya. Menemukan genre seharusnya tidak sulit, karena kita dapat mencari apa saja?


Ini jauh dari kasus. API tidak mencari berdasarkan genre dan tidak menyediakan daftar genre. Dimungkinkan untuk meminta informasi ( dari nama berguna ) suatu genre dengan pengenalnya,
tetapi sebagian besar informasi dalam API hanya berisi nama genre, bukan pengenal.


Manfaat untuk iTunes adalah membongkar semua genre ( semuanya, termasuk "genre" aplikasi seluler ). Pengidentifikasi genre ( seperti pengidentifikasi lainnya dari iTunes ) sepenuhnya sesuai dengan pengidentifikasi di Apple Music. Bongkar tersedia untuk semua wilayah ( wilayah ditunjukkan dalam kunci cc , bukan storefront seperti di Apple Music API ), tetapi pada kenyataannya hanya nama-nama yang berbeda ( diterjemahkan ). Struktur genre bersifat hierarkis dan ada pengulangan nama-nama genre.


Secara umum, pencarian berdasarkan genre harus dilakukan secara lokal, dan perlu diingat bahwa funk jazz, funk jazz, dan funk jazz adalah satu dan sama. Tidak sulit, tetapi tidak sesederhana meminta API pencarian untuk mencari berdasarkan genre.


Setelah menemukan genre, Anda dapat meminta grafik ( daftar lagu paling populer ) untuk genre ini. Untuk genre yang langka, sangat mungkin untuk mendapatkan dalam rilis hanya 3 lagu.


Fakta menyenangkan: untuk beberapa album dan artis ( Ed Sheeran dari yang terkenal ), salah satu genre hanya menunjukkan genre "Musik" tingkat atas. Jika Anda ingin membuat rekomendasi berdasarkan genre, maka genre ini harus diabaikan.


Lagu Artis


Ketika sebuah aplikasi perlu memainkan lagu-lagu dari seorang artis ( grup musik ) paling sering ini berarti bahwa perlu untuk memainkan lagu-lagu populer dari grup ini. Apple Music memungkinkan untuk meminta lagu sebagai tautan "lagu" 2 untuk artis tersebut. Outputnya memiliki maksimal 20 lagu 3 , jelas diurutkan berdasarkan popularitas.


Terkadang Anda masih ingin mendapatkan lebih banyak lagu. Dengan grup yang sangat populer, ada opsi untuk mendapatkan daftar putar seperti " [Nama Artis]: Esensial " dan " [Nama Artis]: Detail " (" [Nama Artis]: Langkah Berikutnya "), tetapi secara umum, opsi ini tidak cocok. Pilihan lain: ambil 20 lagu populer, dan selesaikan sisanya dari album, manfaat Apple Music memungkinkan untuk segera mendapatkan semua album artis ( tautan seperti albums ) dan semua lagu di dalamnya ( include="tracks" ) dalam satu permintaan.


Tetapi jika Anda mendapatkan semua lagu artis, maka masalah lain muncul: Anda harus memilih yang populer dari semua lagu ini. Sayangnya, API informasi popularitas tidak menyediakan 4 . Anda dapat mengambil lagu-lagu acak dari seluruh daftar, tetapi dalam praktiknya pendekatan ini mengarah pada pemutaran rekaman yang sama sekali tidak menarik ( transkrip langsung, rekaman latihan, pertapa, dll. ), Yang terutama terlihat dalam grup yang sangat populer 5 .


Mari kita coba dapatkan lagu-lagu populer dengan cara yang berbeda. Bahkan sebelum munculnya MusicKit, Apple mulai menyediakan API pencarian di iTunes Store. Seperti yang telah disebutkan, katalog di Apple Music dan iTunes Store adalah sama 6 dan, karenanya, pengidentifikasi lagu juga sama. API ini mengembalikan 50 lagu secara default, tetapi Anda dapat meminta hingga 200 lagu. Hasilnya juga diurutkan berdasarkan popularitas.


Menariknya, Apple sendiri tidak menggunakan opsi ini di antarmuka webnya sendiri. Mereka menggunakan API 7 yang tidak berdokumen ( baca, pribadi ), yang dalam penerbitannya ada semua yang hilang, termasuk pengidentifikasi ( dan bukan hanya nama ) dari genre dan indeks popularitas. Saya tidak berani menggunakan API ini dalam praktik 8 , karena pengidentifikasi genre dapat diperoleh dengan pencarian terbalik dengan nama genre 9 , dan indeks popularitas numerik tidak begitu penting ketika Anda mendapatkan daftar lagu yang diurutkan berdasarkan popularitas.


Fakta lucu yang saya sebut " masalah Hugh Laurie " adalah bahwa katalog Apple Music memiliki banyak konten non-musik. Secara khusus, berbagai kompilasi dari pertunjukan komedi dan stand-up. Ini bagus di satu sisi ( kami membayar untuk musik, tetapi kami juga punya dialog lucu dengan Stephen Fry yang dapat Anda dengarkan sebelum tidur ), dan di sisi lain, itu mengarah ke semacam obrolan ketika diminta untuk menyalakan musik. Dengan demikian, ketika konteks operasi aplikasi secara langsung menunjukkan bahwa pengguna ingin mendengarkan musik, seseorang harus secara independen menghapus dari daftar " lagu " yang genre-nya ditetapkan sebagai " kata yang diucapkan " dan " komedi ".


Rekomendasi


Rekomendasi pemutaran (mereka juga " lagu serupa ", " stasiun radio ", " Anda akan menyukainya ", dll.) Telah menjadi fungsi dasar pemain streaming. Secara konvensional, rekomendasi dapat dibagi menjadi dua jenis 10 : untuk pengguna ( berdasarkan pada sejarah mendengarkan, pembelian dan suka ) dan untuk objek musik ( artis, trek, album dan playlist yang lebih jarang ).


Dengan preferensi pengguna di Apple Music, secara formal, 11 semuanya baik-baik saja: Anda dapat meminta daftar rekomendasi pribadi, yang mencakup " campuran pribadi " ( daftar putar ) dan album yang direkomendasikan. Dari album, daftar lagu dapat diperoleh dengan menggunakan API ( tracks ) , untuk daftar putar yang serupa. Ingatlah bahwa trek tidak hanya mencakup lagu ( type = "songs" ), tetapi juga klip video, sehingga pemfilteran tambahan dari data yang diterima tidak akan merugikan.


Dengan rekomendasi lain, semuanya menjadi sedikit lebih rumit. Jika Anda melihat Music.app, maka " artis serupa " ditampilkan di sana dan Anda dapat menghidupkan " stasiun radio " untuk artis ini. Yang terakhir kehilangan campuran dari artis dan rekomendasi kepadanya.


Polisi serupa

Tampaknya semuanya sederhana: untuk seniman mungkin ada koneksi " artis serupa ". Saya segera kesal, tidak ada koneksi seperti itu. Juga tidak ada informasi kesamaan dalam skema data Umpan Mitra Perusahaan.


Oke, jadi kami dapat meminta " stasiun radio " untuk artis dan mendapatkan daftar lagu? Dan lagi, tidak, kami benar - benar dapat meminta stasiun radio, pengenalnya adalah dalam penerbitan koneksi artis. Tetapi dalam informasi stasiun tidak ada informasi tentang lagu, album atau artis yang diputar, hanya ada objek layanan dengan informasi untuk memainkan playParams . Gagasan dengan playParams sederhana: kami memasukkan kamus ini ke dalam antrian pemutaran dan mendengarkan.


Ini semua baik jika Anda ingin memainkan hanya stasiun radio ( seperti Music.app lakukan ), tetapi bagaimana jika Anda ingin mencampur lagu dari stasiun radio 13 dengan sesuatu yang lain? Jelas, entah bagaimana kita perlu mendapatkan daftar artis serupa.


Di Media Player , mainkan antrian memainkan peran penting, khususnya MPMusicPlayerControllerMutableQueue . Antrian memungkinkan Anda untuk: menyisipkan deskriptor setelah objek yang dapat diputar tertentu, menghapus objek yang ditentukan, dan juga mendapatkan daftar semua objek dalam antrian. Saat meminta objek untuk output, kita harus mendapatkan array dari MPMediaItem . Dan MPMediaItem , khususnya, termasuk pengidentifikasi lagu tersebut . Hanya ada satu masalah: konstruktor antrian bukan API publik, saya akan terjemahkan: Media Player dapat memberikan antrian yang sudah jadi (terkadang dapat diedit ), tetapi tidak mungkin membuatnya sendiri 14 .


Nah, menggali sedikit ke arah tongkat penyangga bisa membantu. Jika Media Player dapat memberi saya antrian variabel, maka saya harus menerimanya. Untuk melakukan ini, Anda harus bekerja dengan pemain ( singleton ) saat ini, jadi Anda harus bertindak cepat, jika tidak pengguna akan kehilangan sesuatu yang salah, dan pemain masih akan memiliki waktu untuk memuat ulang lagu yang tidak perlu sejauh ini. Kami mengubah antrean pemutaran saat ini ( tambahkan deskriptor stasiun ), lihat apa yang terjadi, putar kembali perubahan dalam antrian dengan transaksi baru ( hapus apa yang sebenarnya ditambahkan ke antrian ).


Sayangnya, kami menemukan bahwa hanya dua objek MPMediaItem yang MPMediaItem ke antrian. Keduanya terlihat seperti lagu ( ada nama artis, nama trek, panjang lagu ), tetapi tidak termasuk pengidentifikasi lagu. Jika Anda melihat Music.app, kami menemukan bahwa semuanya menyatu di sana: menyalakan stasiun radio akan memutar lagu, dan dalam antrean hanya ada satu lagu untuk diputar. Ketika Anda pindah ke lagu berikutnya, antrian diperbarui.


Tidak masuk akal untuk mencoba membangun kruk dengan stasiun radio lebih lanjut, Anda harus menggunakan opsi lain.


Ingatlah bahwa, di Music.app dan antarmuka web, artis serupa ditampilkan. Artis serupa hanya tersedia untuk band paling populer 15 . Sekali lagi, Anda harus menggunakan metode terlarang untuk mem-parsing halaman web. Dari pro: kami sudah mengunduh halaman web untuk mendapatkan gambar, jadi kami bisa mendapatkan artis serupa dari itu segera.


Dalam kode halaman html, kita melihat objek json besar, dari mana kita pertama-tama mengambil pengidentifikasi artis serupa ( ["data"]["relationships"]["artistContemporaries"] ):


data halaman web

dan kemudian menggunakan pengidentifikasi ini kita mendapatkan data artis dari json yang sama ( ["included"] dengan jenis lockup/artist ):


halaman web disertakan

Memiliki pengidentifikasi seniman, kami dapat meminta lagu mereka. API memungkinkan Anda untuk meminta beberapa artis dengan pengidentifikasi mereka dalam satu permintaan dengan tautan yang diaktifkan. Sayangnya, dalam praktiknya, API mengembalikan kesalahan yang menunjukkan ketidakmungkinan menambahkan daftar trek ke hasilnya. Ini hanya dapat dilakukan dengan meminta artis satu per satu atau dengan secara langsung meminta lagu untuk satu artis. Dalam hal ini, Anda dapat menggunakan iTunes Search API yang telah disebutkan, yang akan memberikan sedikit informasi yang lebih berguna.


Daftar " artis serupa " di Apple Music cukup bagus, tetapi dalam praktiknya mereka sering berubah menjadi kosong. Dalam situasi daftar rekomendasi yang kosong, Anda harus menggunakan layanan pihak ketiga. Klasik - Last.fm, sedikit lebih canggih - Spotify. Hasil keduanya harus sesuai dengan objek dalam katalog Apple Music. Solusi "di dahi" adalah mencari setiap artis dengan nama dengan tepat satu hasil dan kemudian menerima lagu-lagu seperti yang dijelaskan di atas. Solusinya sedikit lebih menarik, tetapi lebih mahal menggunakan musicbrainz untuk pencocokan. Musicbrainz memberikan informasi tentang pengidentifikasi 16 di layanan lain, yaitu Anda dapat mengaitkan pengenal di Spotify dengan pengenal di Apple Music. Situasi dengan Last.fm bahkan lebih baik: Last.fm mengembalikan pengidentifikasi dari musicbrainz dalam daftar rekomendasi. Overhead terletak pada batas penggunaan musicbrainz, dengan banyak lalu lintas yang harus Anda naikkan sendiri dari musicbrainz (untungnya, ini mungkin ) atau kembangkan API Anda sendiri di sekitar basis data , kesedihannya dapat dengan mudah diunduh.


Untuk grup baru, bahkan Last.fm tidak akan memberikan rekomendasi, opsi alternatif akan menjadi rekomendasi "genre". Kami mengambil genre artis ( berdasarkan nama kami mendapatkan pengidentifikasi dari daftar semua genre yang sudah dimuat ), kami mendapatkan grafik untuk setiap genre, kami mencampur lagu yang diterima. Ini lebih baik daripada tidak sama sekali.


Dua hal tidak dapat dipisahkan: pemain dan antrian


Media Player bertanggung jawab untuk bermain di iOS dari Apple Music, memungkinkan Anda untuk bekerja dengan musik dari Apple Music dan direktori pribadi pengguna 17 . Kerangka kerja ini tingkat tinggi dan dalam situasi bekerja dengan konten streaming turun ke tingkat di bawah 18 tidak akan berfungsi.


Kerangka kerja ini menyediakan dua pemain dengan antarmuka perangkat lunak yang umum: satu memainkan musik secara langsung di aplikasi Music.app, dan yang lainnya bekerja kurang lebih secara independen. Menggunakan yang pertama untuk sesuatu yang serius tidak ada gunanya 19 . Dan dokumentasi dengan berani terletak 20 bahwa pemain kedua tidak bekerja di latar belakang


Dari sisi arsitektur, bekerja dengan masalah ini sederhana: kami memberi tahu pemain apa yang harus diputar ( misalnya, mengisi antrian, berdasarkan array pengidentifikasi lagu ) dan mengontrol pemutaran ( putar, jeda, berikutnya, sebelumnya ).


Tidak ada kontrol langsung dari antrian pemutaran, Anda perlu melakukan perubahan transaksional , yang membutuhkan waktu. Pada saat yang sama, seringkali handler handler completionHandler dipanggil dengan kesalahan batas waktu, yang diterjemahkan sebagai " Saya tidak tahu apakah saya bisa melakukan sesuatu atau apakah saya melakukan sesuatu yang lain, tetapi saya lelah menunggu diri saya sendiri ." Paling sering, transaksi berjalan dengan baik, dan kesalahan yang datang ke pawang harus diabaikan. Beberapa perubahan dapat dilakukan pada tingkat yang sedikit lebih tinggi, namun, jika Anda sudah harus menggunakan perubahan transaksional, maka lebih baik menggunakannya untuk semuanya.


Secara umum, antrian cukup fleksibel dan, jika tidak mungkin aplikasi Anda akan bekerja dengan layanan streaming lain 21 kapan-kapan, maka Anda dapat melakukan banyak hal menarik dengan antrian, khususnya, menunjukkan kapan elemen mulai dimainkan dan berapa lama.


Dari " minus " lain dari pendekatan tingkat tinggi semacam itu, perlu dicatat ketidakmampuan untuk memproses tindakan pengguna. Menekan pengguna pada headset tombol " lagu berikutnya " tidak akan mengarah pada permintaan untuk program " apa yang harus saya lakukan ", pemain lebih tahu apa yang harus dilakukan dan beralih lagu sendiri. Jadi Anda hanya bisa menangkap perubahan yang benar-benar dilakukan dalam keadaan pemain dan membuat beberapa keputusan setelah fakta.


Di sisi lain, Anda tidak perlu berbuat banyak: informasi tentang bermain di layar kunci ada di sana dan semua tombol di dalamnya berfungsi, Apple Watch dan Siri dapat mengontrol pemutaran, dan streaming melalui AirPlay ke Apple TV berfungsi di luar kotak 22 .


Dimungkinkan untuk mengulangi fungsionalitas dan antarmuka antrian Music.app di aplikasi Anda, tetapi kesederhanaan elemen drag'n'drop antrian ternyata berubah menjadi transaksi juggling untuk mengubah antrian dan menyinkronkan antrian yang diinginkan dan antrian nyata dari 23 pemain.


Beberapa kata tentang SDK untuk platform lain


Sebenarnya, bekerja dengan API tidak berbeda pada platform lain, tetapi SDK tidak sepenuhnya disalin karbon dengan iOS dan, di beberapa tempat, lebih nyaman 24 , meskipun gagasan umum tentang antrian tandem dan pemutar tetap ada.


Jadi, di Android, Anda bisa mendapatkan antrian saat ini dan memindahkan elemen antrian tanpa trik dengan perubahan transaksinya ( menghapus dari antrian dan menambahkan ke tempat yang tepat dengan jari disilangkan ).


MusicKit JS juga menyediakan metode pembungkus khusus untuk bekerja dengan Apple Music API,
tetapi saat menggunakan pembungkus Anda tidak dapat melakukannya tanpa membaca dokumentasi untuk API itu sendiri. Bekerja dengan antrian dan pemutar tidak lebih nyaman daripada SDK iOS , tetapi dengan add-on kecil itu bisa menjadi tertahankan .


Beberapa kata tentang simulator


Anda dapat bekerja di simulator dengan MusicKit hanya dalam konteks berkomunikasi dengan API HTTP, tetapi bahkan dalam kasus ini Anda harus menstabilkan token pengguna untuk melakukan permintaan, dan tidak mendapatkannya melalui StoreKit . Sangat tidak mungkin memainkan musik dari Apple Music di simulator, karena aplikasi Music.app tidak ada.


Bahkan, Anda harus mengembangkan add-on Anda sendiri di atas SDK dan, ketika berjalan di simulator, gunakan implementasi ( tiruan ) alternatif. Bahkan, selama pengembangan, simulator hanya berguna untuk bekerja pada antarmuka pengguna. Abstraksi sendiri juga akan berguna dalam tangkapan layar otomatis untuk aplikasi ( dan memang saat membuat tangkapan layar menggunakan simulator ), karena memiliki kedua generasi iPad Pro "besar" di gudang senjata hanya untuk mengambil tangkapan layar pemain Anda di keduanya sangat tidak menguntungkan dan bodoh .


Sebagai percobaan yang menarik, tetapi tidak terlalu berguna, Anda dapat membuat implementasi alternatif dari pemain tingkat tinggi Anda sendiri berdasarkan MusicKit JS.


Tentang Umpan Mitra Perusahaan


Di satu sisi, Apple menyediakan dump metadata berdasarkan permintaan dan mengatakan untuk menggunakannya untuk mengurangi beban pada API dan mendapatkan informasi yang tidak dimiliki API. Di sisi lain, kami memiliki masalah yang jelas dengan ayam dan telur: akses ke program Afiliasi disediakan dengan menentukan tautan ke aplikasi. Sangat sulit untuk mengembangkan aplikasi menggunakan data yang hanya dapat diperoleh dengan aplikasi yang diterbitkan di App Store.


Dan, tentu saja, data tidak memberikan pendatang pertama. Setiap aplikasi diperiksa dalam lima hari kerja. Pada saat penulisan ini, saya belum berhasil mendapatkan setumpuk metadata di tangan saya. Apple membungkus aplikasi saya tanpa menyebutkan alasan pastinya. , - " Apple Music " , Apple . - , -, . , Apple , , .


, , . Apple Music ( , ), . , , Apple Music . , , .


Enterprise Partner Feed :


  • Apple Music API iTunes Search API
  • (" "), -


, - :


  1. . , , .
    , . , -
  2. - , , . , - , -.
  3. , SDK , . Apple 25 SDK 26 , , , API , SDK .
  4. , " code level " . " Q&A " " Tech Notes ", , - .
  5. . , , . API ( Last.fm, musicbrainz, iTunes Search API ) IP . Apple Music . " " , 27 .
  6. , Apple Music API, , . - App Store , ( ) , , ( ). 28 , , , 29 . Apple 30 .
  7. , - Apple Music โ€” Ember. , , html DOM Javascript.
  8. -, , . , .


SDK, batch API, , ยซ ยป Apple Music. , , SDK . SDK, .


, .



1 ( )


2 ,


3 , Music.app - ( ), API ( "" )


4 limit : Specified limit for relationship 'songs' exceeds maximum of 20


5 The Beatles


6 , Apple Music iTunes Store. API iTunes Store `isStreamablez, Apple Music .


7 : https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewArtistSeeAll?cc=ru&ids=424279384§ion=0


8 , , , iTunes ( ) iTunes Store


9


10 , !


11 , Apple Music : , ,


12 , MPMusicPlayerPlayParametersQueueDescriptor


13 Apple Music , ( ) . .


14 , , App Store


15 ( ) ( ) ( ) ( ) . .


16 -,


17 , iTunes Store iTunes Match


18 API URL


19 โ€” -, . , .


20 : ( When your app moves to the background, the music player stops playing the current media. ). AVPlayer , , Info.plist .


21 .


22 , MPMediaItem


23


24 , SDK , , . iOS Media Player , API .


25 , โ€” , .


26 SDK , Apple Music. Apple , .


27 , โ€” . , Enterprise Partner Feed, musicbrainz, API. , ( ) . , .


28 RIP


29 API Bing


30

Source: https://habr.com/ru/post/id464811/


All Articles