πΌ ΠΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌ ΡΡΠ΅ΠΊΠΈ ΠΈΠ· Π―Π½Π΄Π΅ΠΊΡ.ΠΡΠ·ΡΠΊΠΈ Π² Spotify Ρ ΠΏΠΎΠΌΠΎΡΡΡ Python
ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ Python ΠΈ Selenium, ΠΏΠΎΠ»ΡΡΠΈΠΌ Π²ΡΠ΅ ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡΡ ΠΈ Π°Π»ΡΠ±ΠΎΠΌΡ ΠΈΠ· Π―Π½Π΄Π΅ΠΊΡ.ΠΡΠ·ΡΠΊΠΈ, Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ spotipy ΠΏΠ΅ΡΠ΅Π½Π΅ΡΠ΅ΠΌ ΡΠΎΠ½ΠΎΡΠ΅ΠΊΡ Π² Π‘ΠΏΠΎΡΠΈΡΠ°ΠΉ.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠΊΡΠΈΠΏΡΠ°:
- ΠΏΠ΅ΡΠ΅Π½ΠΎΡ Π°Π»ΡΠ±ΠΎΠΌΠΎΠ²;
- ΠΏΠ΅ΡΠ΅Π½ΠΎΡ ΡΠ²ΠΎΠΈΡ
ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡΠΎΠ² ΠΈ ΡΡΠ΅ΠΊΠΎΠ² ΠΈΠ· ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡΠ° Β«ΠΠ½Π΅ Π½ΡΠ°Π²ΠΈΡΡΡΒ»;
- ΠΏΠ΅ΡΠ΅Π½ΠΎΡ Π»Π°ΠΉΠΊΠ½ΡΡΡΡ
ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡΠΎΠ².
ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅: ΡΠΎΠ½ΠΎΡΠ΅ΠΊΠ° Π―Π½Π΄Π΅ΠΊΡ.ΠΡΠ·ΡΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΎΡΠΊΡΡΡΠΎΠΉ.
***
ΠΠ΅ΡΠ²ΡΡ ΡΠ°ΡΡΡ ΠΏΡΡΠΈ ΠΌΡ ΠΏΡΠΎΠΉΠ΄Π΅ΠΌ ΠΎΠΊΠΎΠ»ΡΠ½ΡΠΌ ΠΏΡΡΠ΅ΠΌ: ΡΡΠΎΠ±Ρ ΡΠ΅ΠΌΡ-ΡΠΎ Π½Π°ΡΡΠΈΡΡΡΡ ΠΎΡΠΊΠ°ΠΆΠ΅ΠΌΡΡ ΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ yandex-music-api
ΠΈ ΠΏΠΎΠ»ΡΡΠΈΠΌ Π΄Π°Π½Π½ΡΠ΅ ΡΠ²ΠΎΠΈΠΌΠΈ ΡΡΠΊΠ°ΠΌΠΈ. ΠΠΎ Π²ΡΠΎΡΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΏΡΡΠΈ ΠΊ Π½Π°ΠΌ Π½Π° ΠΏΠΎΠΌΠΎΡΡ ΠΏΡΠΈΠ΄Π΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° spotipy, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΠ΅Ρ Π² Π‘ΠΏΠΎΡΠΈΡΠ°ΠΉ Π²ΡΠ΅ Π»ΠΈΡΠ½ΡΠ΅ ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡΡ, Π»Π°ΠΉΠΊΠ½ΡΡΡΠ΅ ΡΡΠ΅ΠΊΠΈ ΠΈ Π°Π»ΡΠ±ΠΎΠΌΡ. ΠΠΎΠ΅Ρ
Π°Π»ΠΈ!
ΠΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌ Π°Π»ΡΠ±ΠΎΠΌΡ
Π£ Π―Π½Π΄Π΅ΠΊΡ.ΠΡΠ·ΡΠΊΠΈ (Π―Π) Π½Π΅Ρ API. Π‘ΠΎΠ²ΡΠ΅ΠΌ. ΠΠΎΡΡΠΎΠΌΡ Π΄Π°Π½Π½ΡΠ΅ Π½Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π±ΡΠ°ΡΡ ΡΠΎ ΡΡΡΠ°Π½ΠΈΡ Π―Π. ΠΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ Π½Π° ΡΠ²ΠΎΡ ΡΡΡΠ°Π½ΠΈΡΡ Π―Π Π² ΡΠ°Π·Π΄Π΅Π» Π°Π»ΡΠ±ΠΎΠΌΡ ΠΈ Π½Π°ΡΠ½Π΅ΠΌ ΠΏΠΎΠΈΡΠΊ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΠΎΡΠΊΡΡΠ² ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° (Ctrl + Shift + i
Π² Chrome ΠΈ FireFox).
Π ΡΠ΅Π»Π΅ ΡΡΡΠ°Π½ΠΈΡΡ Ρ Π°Π»ΡΠ±ΠΎΠΌΠ°ΠΌΠΈ Π΅ΡΡΡ JSON-ΠΌΠ°ΡΡΠΈΠ² Mu
, ΠΊΠΎΡΠΎΡΡΠΉ Π² Π΄Π²ΡΡ
ΠΊΠ»ΡΡΠ°Ρ
ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π²ΡΠ΅, ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π·Π½Π°ΡΡ ΠΎΠ± Π°Π»ΡΠ±ΠΎΠΌΠ΅: Π΅Π³ΠΎ ID, Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΈ ΠΈΠΌΡ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ:
C ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ Mu
Π±ΡΠ΄Π΅ΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π² Π½Π΅ΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ ΡΠ°ΠΌΠΎΠ΅ ΡΠ΅Π½Π½ΠΎΠ΅ β ID Π°Π»ΡΠ±ΠΎΠΌΠΎΠ², ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡΠΎΠ² ΠΈ ΡΡΠ΅ΠΊΠΎΠ², ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π²ΡΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. ΠΠΎΡΡΠΎΠΌΡ ID Π±ΡΠ΄Π΅Ρ Π½Π°ΡΠ΅ΠΉ ΡΠ΅Π»ΡΡ Π½Π° Π²ΡΠ΅ΠΌ ΠΏΡΡΠΈ ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ.
- ΠΠ΅ΡΠ²ΡΠΉ ΠΊΠ»ΡΡ β
albumIds
β ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ID Π²ΡΠ΅Ρ
Π°Π»ΡΠ±ΠΎΠΌΠΎΠ², Π½ΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΡΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π°Π»ΡΠ±ΠΎΠΌΠ° ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΅Π³ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΈ ΠΈΠΌΡ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ ΠΈΠ· ΡΠ΅Π³ΠΎΠ².
- ΠΡΠΎΡΠΎΠΉ ΠΊΠ»ΡΡ β
albums
β ΡΡΠ°Π·Ρ Π²ΡΠ΄Π°Π΅Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π°Π»ΡΠ±ΠΎΠΌΠ° ΠΈ ΠΈΠΌΡ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ, Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ²ΡΠ΅ 150 ΠΏΠ°Ρ (ΡΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ Π½Π° ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡΡ ΡΠΎΠΆΠ΅).
ΠΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΏΠ΅ΡΠ²ΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΠΈ Π²ΡΠ΅ Π°Π»ΡΠ±ΠΎΠΌΡ.
ΠΠ°ΠΊ Π²ΡΠ²Π΅ΡΡΠΈ json Π² Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠ°Π΅ΠΌΠΎΠΌ Π²ΠΈΠ΄Π΅, ΠΊΠ°ΠΊ Π½Π° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅ Π²ΡΡΠ΅?
Π§Π΅ΡΠ΅Π· ΡΡΠ½ΠΊΡΠΈΡ pprint
:
ΠΠ°ΠΊ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π°Π»ΡΠ±ΠΎΠΌΠ° ΠΈ ΠΈΠΌΡ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ?
ΠΠΎΠ»ΡΡΠΈΠ² ID, ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ Π°Π»ΡΠ±ΠΎΠΌΠ° https://music.yandex.ru/album/ID_Π°Π»ΡΠ±ΠΎΠΌΠ°
. ΠΠ· ΡΠ΅Π³ΠΎΠ² ΡΠ·Π½Π°Π΅ΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π°Π»ΡΠ±ΠΎΠΌΠ° ΠΈ ΠΈΠΌΡ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ. ΠΠΎΠΏΡΡΡΠΈΠΌ, Π² Π½Π°ΡΠ΅ΠΉ ΡΠΎΠ½ΠΎΡΠ΅ΠΊΠ΅ Π΅ΡΡΡ Π°Π»ΡΠ±ΠΎΠΌ Β«Greatest Hits In JapanΒ» β Queen. ΠΡΠΊΡΠΎΠ΅ΠΌ ΡΡΡΠ°Π½ΠΈΡΡ Π°Π»ΡΠ±ΠΎΠΌΠ°.
Π Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ Π² ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΈ Π²ΡΠ±Π΅ΡΠ΅ΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π‘Π΅Π»Π΅ΠΊΡΠΎΡ (Ctrl + Shift + C
):
Π ΠΏΡΠΎΡΡΠΎ ΠΊΠ»ΠΈΠΊΠ½Π΅ΠΌ ΠΏΠΎ Π½Π°Π·Π²Π°Π½ΠΈΡ Π°Π»ΡΠ±ΠΎΠΌΠ° Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅:
Π’Π΅Π³ <h1>
Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Π°Π»ΡΠ±ΠΎΠΌΠ° Π½Π°ΠΉΠ΄Π΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ:
Π’Π΅Π³ <a>
Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ:
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ
, Selenium
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Selenium ΡΠΌΠ΅Π΅Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡ Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠΌ ΠΈ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΉ. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ Selenium
ΠΌΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π±ΡΠ°ΡΠ·Π΅ΡΠ°: ΠΎΡΠΊΡΡΡΠΈΠ΅ ΡΡΡΠ°Π½ΠΈΡ ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡΠΎΠ², Π°Π»ΡΠ±ΠΎΠΌΠΎΠ² ΠΈ ΡΡΠ΅ΠΊΠΎΠ².
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ Selenium
:
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ Π΄ΡΠ°ΠΉΠ²Π΅Ρ Chrome:
Chromedriver ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π² /usr/lib/chromium-browser/chromedriver
ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ
ΠΎΠ± Π°Π»ΡΠ±ΠΎΠΌΠ΅:
- ΠΠ°ΠΉΡΠΈ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ ΡΠΎ ΡΠ²ΠΎΠΈΠΌΠΈ/ΡΡΠΆΠΈΠΌΠΈ Π°Π»ΡΠ±ΠΎΠΌΠ°ΠΌΠΈ.
- ΠΠΎΠ»ΡΡΠΈΡΡ ID Π°Π»ΡΠ±ΠΎΠΌΠΎΠ² ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²Π°
Mu
.
- ΠΠ΅ΡΠ΅ΠΉΡΠΈ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ Π°Π»ΡΠ±ΠΎΠΌΠ° ΠΈ Π½Π°ΠΉΡΠΈ Π² ΡΠ΅Π³Π°Ρ
Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π°Π»ΡΠ±ΠΎΠΌΠ° ΠΈ ΠΈΠΌΡ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ.
Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π² ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ ΠΏΠ°ΠΏΠΊΡ proglib
, Π° Π² Π½Π΅ΠΉ ΡΠ°ΠΉΠ» get_music_data.py
.
ΠΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ Selenium ΠΈ Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ run_driver()
, Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ Π±ΡΠ°ΡΠ·Π΅Ρ:
ΠΠ΄Π΅ΡΡ:
'chromedriver'
β ΠΏΡΡΡ ΠΊ Π΄ΡΠ°ΠΉΠ²Π΅ΡΡ. ΠΠΈΠ±ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΡΡΡ: '/usr/lib/chromium-browser/chromedriver'
.
ΠΠ°Π»ΡΡΠ΅ ΠΈΠ΄Π΅Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ Π²Π΅Π»ΠΎΡΠΈΠΏΠ΅Π΄. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ Selenium
ΠΏΡΠΈ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠΈ ΠΌΠ°ΡΡΠΈΠ²Π° Mu
ΡΠΎ ΡΡΡΠ°Π½ΠΈΡΡ Π―Π Π²ΡΠ΄Π°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ:
ΠΠ°ΡΠ·Π° ΠΏΠΎΡΠ»Π΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ, ΡΡΠΎΠ±Ρ ΡΡΡΠ°Π½ΠΈΡΠ° Π·Π°Π³ΡΡΠ·ΠΈΠ»Π°ΡΡ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° ΠΈ Π»ΠΈΡΡΠ°Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½Π΅Ρ ΡΡΡΠ°Π½ΠΈΡΡ Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π»ΠΈ, Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Ρ β ΡΠΎΠΆΠ΅. ΠΠΊΠ°Π·Π°Π»ΠΎΡΡ, Π΅ΡΠ»ΠΈ ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ ΡΡΡΠ°Π½ΠΈΡΡ Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΠ°ΡΠΈΡΡ Π²ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²Π° Mu
Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ
-Π»ΠΈΠ±ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌ. Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΡΡΠΎ.
ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ:
- ΠΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ ΡΡΡΠ°Π½ΠΈΡΠ΅ Π―Π.
- Π‘ΠΎΠ·Π΄Π°ΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ html-ΡΡΡΠ°Π½ΠΈΡΡ ΠΈ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ Π² Π½Π΅Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ Π―Π.
- ΠΠ·Π²Π»Π΅ΡΡ ΠΌΠ°ΡΡΠΈΠ²
Mu
.
- Π£Π΄Π°Π»ΠΈΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΡΡΡΠ°Π½ΠΈΡΡ.
ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ create_local_html_page()
, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ·Π΄Π°Π΅Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ html-ΡΠ°ΠΉΠ» ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅Ρ Π΅Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ ΡΡΡΠ°Π½ΠΈΡΡ ΠΈΠ· Π―Π:
ΠΠ΄Π΅ΡΡ:
page_filename
β Π½Π°Π·Π²Π°Π½ΠΈΠ΅ html-ΡΠ°ΠΉΠ»Π°.
page_source
β ΠΊΠΎΠ΄ ΡΡΡΠ°Π½ΠΈΡΡ Π―Π.
Π’Π΅ΠΏΠ΅ΡΡ Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ get_local_html_page()
, ΠΊΠΎΡΠΎΡΠ°Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Selenium
ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΡΡΡΠ°Π½ΠΈΡΡ:
ΠΠ΄Π΅ΡΡ:
yandex_username
β ΠΈΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π―Π.
page_filename
β Π½Π°Π·Π²Π°Π½ΠΈΠ΅ html-ΡΠ°ΠΉΠ»Π°.
url
β ΡΡΡΠ»ΠΊΠ° Π½Π° Π―Π.
Π, Π½Π°ΠΊΠΎΠ½Π΅Ρ, ΡΡΠ½ΠΊΡΠΈΡ delete_local_html_page()
ΡΠ΄Π°Π»ΡΠ΅Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΡΡΡΠ°Π½ΠΈΡΡ:
ΠΠ΄Π΅ΡΡ:
page_path
β ΠΏΡΡΡ ΠΊ html-ΡΠ°ΠΉΠ»Ρ.
ΠΠΎΠ»ΡΡΠΈΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π°Π»ΡΠ±ΠΎΠΌΠ° ΠΈ ΠΈΠΌΡ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡ get_albums()
:
Π ΡΡΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ ΠΊΠΎΠ΄Π° ΠΌΡ:
- Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡΡΡΠ»ΠΊΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ Π°Π»ΡΠ±ΠΎΠΌΠΎΠ² Π―Π ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
- Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΡΡΡΠ°Π½ΠΈΡΡ Π²ΡΠ΅Ρ
Π°Π»ΡΠ±ΠΎΠΌΠΎΠ².
- ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ Π²ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± Π°Π»ΡΠ±ΠΎΠΌΠ°Ρ
ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²Π°
Mu
.
- ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ID Π²ΡΠ΅Ρ
Π°Π»ΡΠ±ΠΎΠΌΠΎΠ².
- Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠ»ΠΎΠ²Π°ΡΡ
albums_for_spotify
, Π² ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΏΠΈΡΠ΅ΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π°Π»ΡΠ±ΠΎΠΌΠ° ΠΈ ΠΈΠΌΡ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ.
ΠΠ΄Π΅ΡΡ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
- ΠΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ Π°Π»ΡΠ±ΠΎΠΌΠ° Π―Π.
- Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΉ ΡΠ»ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π°Π»ΡΠ±ΠΎΠΌΠ°, Π² ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π°Π»ΡΠ±ΠΎΠΌΠ° ΠΈ ΠΈΠΌΡ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ.
- ΠΠ΅ΡΠΎΠ΄
xpath
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΊΠ°ΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ Π΄ΡΡΠ³ Π² Π΄ΡΡΠ³Π° ΡΠ΅Π³ΠΈ ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ ΠΈΠ· Π½ΠΈΡ
ΡΠ΅ΠΊΡΡ. Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡΡΡ Π½Π°ΠΉΠ΄Π΅ΠΌ Π² ΠΊΠΎΠ΄Π΅ ΡΡΡΠ°Π½ΠΈΡΡ ΡΠ΅Π³ <h1>
Ρ ΠΊΠ»Π°ΡΡΠΎΠΌ deco-typo
. Π ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΠ΅ΠΊΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉΡΡ Π² ΡΠ΅Π³Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ .text
.
- ΠΠ°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ Π² ΡΠ»ΠΎΠ²Π°ΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π°Π»ΡΠ±ΠΎΠΌΠ° ΠΈ ΠΈΠΌΡ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ.
- Π£Π΄Π°Π»ΡΠ΅ΠΌ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΡΡΡΠ°Π½ΠΈΡΡ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ Π°Π»ΡΠ±ΠΎΠΌΠ°ΠΌΠΈ Π―Π.
- ΠΠ°ΠΊΡΡΠ²Π°Π΅ΠΌ Π±ΡΠ°ΡΠ·Π΅Ρ
Π ΠΈΡΠΎΠ³Π΅ ΡΠ»ΠΎΠ²Π°ΡΡ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
ΠΠ°Π½Π½ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ, ΠΊΠ°ΠΊ ΠΈΡ
ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΠΈ?
ΠΠ° ΠΏΠ΅ΡΠ΅Π½ΠΎΡ ΡΡΠ΅ΠΊΠΎΠ² ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° spotipy. Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ Π΅Π΅:
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Π‘ΠΏΠΎΡΠΈΡΠ°ΠΉ, ΠΏΠΎΠ»ΡΡΠΈΡΡ client_id
ΠΈ client_secret
. ΠΠ°ΠΉΠ΄Π΅ΠΌ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ developer.spotify.com/dashboard
Π ΠΊΠ»ΠΈΠΊΠ½Π΅ΠΌ Π½Π° Create an app
:
Π·Π°ΠΏΠΎΠ»Π½ΠΈΠΌ ΠΏΠΎΠ»Ρ ΠΈ Π½Π°ΠΆΠΌΠ΅ΠΌ Create
:
ΠΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΊΠ»ΠΈΠΊΠ½Π΅ΠΌ ΠΏΠΎ Π½Π΅ΠΌΡ ΠΈ Π½Π°ΠΉΠ΄Π΅ΠΌ Client ID
ΠΈ Client Secret
:
ΠΠ°ΠΉΠ΄Π΅ΠΌ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ:
ΠΈ Π²ΠΏΠΈΡΠ΅ΠΌ Π² ΠΏΠΎΠ»Π΅ Redirect URIs
Π°Π΄ΡΠ΅Ρ http://localhost:8888/callback/
:
Π‘ΠΎΡ
ΡΠ°Π½ΠΈΠΌ ΠΈ Π·Π°ΠΊΡΠΎΠ΅ΠΌ.
ΠΠ°Π»ΡΡΠ΅ Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π²ΡΠΎΡΠΎΠΉ ΡΠ°ΠΉΠ» transfer.py
Π΄Π»Ρ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ Π² Spotify
ΡΠ΅ΡΠ΅Π· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ spotify
ΠΈ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° Π°Π»ΡΠ±ΠΎΠΌΠΎΠ² (Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡΠΎΠ², Π½ΠΎ ΠΎΠ± ΡΡΠΎΠΌ ΠΏΠΎΠ·ΠΆΠ΅).
ΠΠ°ΠΏΠΈΡΠ΅ΠΌ Π² transfer.py
ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΡΠΎΡΠΊΠΈ:
ΠΠ΄Π΅ΡΡ:
scope
β ΠΏΡΠ°Π²Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
redirect_uri
β ΡΡΡΠ»ΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΡΠΊΡΠΎΠ΅ΡΡΡ (ΠΈ ΡΡΠ°Π·Ρ Π·Π°ΠΊΡΠΎΠ΅ΡΡΡ) Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ ΠΏΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΏΡΠ°Π² Π΄ΠΎΡΡΡΠΏΠ°.
username
β ΠΈΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π² Π‘ΠΏΠΎΡΠΈΡΠ°ΠΉ.
ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ get_album_id()
, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠ΅Ρ Π² ΡΠΏΠΎΡΠΈΡΠ°ΠΉ ID Π°Π»ΡΠ±ΠΎΠΌΠ°:
ΠΠ΄Π΅ΡΡ:
sp.search(q=query, limit=1, type='album')
β ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΠΉ Π·Π°ΠΏΡΠΎΡ query Π²ΡΠ΄Π°Π΅Ρ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΈΠ· ΡΠ°Π·Π΄Π΅Π»Π° Π°Π»ΡΠ±ΠΎΠΌΡ.
- Π ΠΈΡΠΎΠ³Π΅ ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ID Π°Π»ΡΠ±ΠΎΠΌΠ°. Π ΠΌΠ΅ΡΠΎΠ΄
split
Π΄Π΅Π»Π°Π΅Ρ ΠΈΠ· ΡΡΡΠΎΠΊΠΈ ΡΠΏΠΈΡΠΎΠΊ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ current_user_saved_albums_add()
, Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΠΈΠΉ Π² Π‘ΠΏΠΎΡΠΈΡΠ°ΠΉ Π°Π»ΡΠ±ΠΎΠΌ ΠΏΠΎ ID, ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠΏΠΈΡΠΎΠΊ.
ΠΠ΅ΡΠ΅Π½Π΅ΡΠ΅ΠΌ Π°Π»ΡΠ±ΠΎΠΌΡ ΡΠ΅ΡΠ΅Π· ΡΡΠ½ΠΊΡΠΈΡ transfer_albums()
:
ΠΠ΄Π΅ΡΡ:
sp, username = autorisation()
β Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ Π² Π‘ΠΏΠΎΡΠΈΡΠ°ΠΉ.
query = ' '.join([artist_name, album_title])
β ΡΠΎΡΠΌΠΈΡΡΠ΅ΠΌ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΠΉ Π·Π°ΠΏΡΠΎΡ ΠΈΠ· Π½Π°Π·Π²Π°Π½ΠΈΡ Π°Π»ΡΠ±ΠΎΠΌΠ° ΠΈ ΠΈΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ.
get_album_id(query, sp)
β ΠΈΡΠ΅ΠΌ Π² Π‘ΠΏΠΎΡΠΈΡΠ°ΠΉ Π°Π»ΡΠ±ΠΎΠΌ ΠΏΠΎ ID.
sp.current_user_saved_albums_add(album_id)
β Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π°Π»ΡΠ±ΠΎΠΌ Π² ΡΠ²ΠΎΡ ΠΌΠ΅Π΄ΠΈΠ°ΡΠ΅ΠΊΡ.
except: pass
β Π΅ΡΠ»ΠΈ Π°Π»ΡΠ±ΠΎΠΌ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ (ΡΡΠ½ΠΊΡΠΈΡ get_album_id
Π²Π΅ΡΠ½Π΅Ρ Π½Π°ΠΌ IndexError
ΠΈΠ»ΠΈ KeyError
), ΡΠΎ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ ΠΈ Π½Π°ΡΠ°ΡΡ ΡΠ½Π°ΡΠ°Π»Π°.
ΠΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌ ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡΡ
ΠΠ»Π΅ΠΉΠ»ΠΈΡΡΡ Π΄Π΅Π»ΡΡΡΡ Π½Π° Π΄Π²Π° Π²ΠΈΠ΄Π°:
- ΠΠ»Π΅ΠΉΠ»ΠΈΡΡ Β«ΠΠ½Π΅ ΠΏΠΎΠ½ΡΠ°Π²ΠΈΠ»ΠΎΡΡΒ» ΠΈ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡΡ.
- ΠΠ°ΠΉΠΊΠ½ΡΡΡΠ΅ ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡΡ.
ΠΠΎΠΈ ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡΡ
ΠΠ»Π³ΠΎΡΠΈΡΠΌ:
- ΠΠ΅ΡΠ΅ΠΉΡΠΈ Π½Π° ΡΡΡΠ°Π½ΡΡ Π²ΡΠ΅Ρ
ΠΏΠ»Π΅Π»ΠΈΡΡΠΎΠ² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
https://music.yandex.ru/users/yandex_username/playlists/
.
- ΠΠΎΠ»ΡΡΠΈΡΡ ID ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡΠΎΠ² ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²Π°
Mu
.
- ΠΠ΅ΡΠ΅ΠΉΡΠΈ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡΠ° ΠΏΠΎ Π΅Π³ΠΎ ID.
- ΠΠΎΠ»ΡΡΠΈΡΡ ΡΠΎ ΡΡΡΠ°Π½ΠΈΡΡ ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡΠ° ID ΡΡΠ΅ΠΊΠΎΠ² ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²Π°
Mu
.
- ΠΠ΅ΡΠ΅ΠΉΡΠΈ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΡΠ΅ΠΊΠ° ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΡ
Π½Π°Π·Π²Π°Π½ΠΈΡ ΠΈ ΠΈΠΌΠ΅Π½Π° ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π΅ΠΉ ΠΈΠ· ΡΠ΅Π³ΠΎΠ².
ΠΠ΅ΡΠ½Π΅ΠΌΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ get_music_data.py
ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² Π½Π΅Π³ΠΎ ΡΡΠ½ΠΊΡΠΈΡ get_my_playlists_id
Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ID Π°Π»ΡΠ±ΠΎΠΌΠΎΠ² Π½Π° Π―Π:
Π’Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ Ρ Π°Π»ΡΠ±ΠΎΠΌΠ°ΠΌΠΈ: ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ Π²ΡΠ΅Ρ
ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡΠΎΠ², ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²Π° Mu
, Π½Π°Ρ
ΠΎΠ΄ΠΈΠΌ ΠΊΠ»ΡΡ playlistIds
Ρ ID Π²ΡΠ΅Ρ
ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡΠΎΠ².
ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ get_my_playlists
Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° ΡΠ²ΠΎΠΈΡ
ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡΠΎΠ²:
Π ΡΡΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΊΠΎΠ΄Π° ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ID Π²ΡΠ΅Ρ
Π½Π°ΡΠΈΡ
ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡΠΎΠ² ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ Π² ΡΠ»ΠΎΠ²Π°ΡΡ my_playlists
, ΠΈΡ
ID ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΡ.
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ Π½Π°Π·Π²Π°Π½ΠΈΡ ΡΡΠ΅ΠΊΠ° ΠΈ ΠΈΠΌΡ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ:
ΠΠ΄Π΅ΡΡ:
track_id = re.findall(r'\d+(?=:)', all_track_ids[j])[0]
β all_track_ids
ΠΈΠΌΠ΅Π΅Ρ Π²ΠΈΠ΄ ID_ΡΡΠ΅ΠΊΠ°:ID_ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡΠ°
. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π²ΡΠ΅ ΡΠΈΡΠ»Π° Π΄ΠΎ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΡ β ID ΡΡΠ΅ΠΊΠ°.
driver.find_elements_by_xpath("//span[@class='d-artists']//a[@class='d-link deco-link']")[0].text
β Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ, Π³Π΄Π΅ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ β ΠΈΠΌΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ, Π΅ΡΠ»ΠΈ ΠΈΡ
Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ»ΠΈ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ, Π΅ΡΠ»ΠΈ ΠΎΠ½ Π·Π°ΠΏΠΈΡΠ°Π» ΡΡΠ΅ΠΊ ΡΠΎΠ»ΠΎ.
Π ΠΈΡΠΎΠ³Π΅ ΡΠ»ΠΎΠ²Π°ΡΡ my_playlists_for_spotify
Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΠ΅ΠΌ ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡΡ Π² Π‘ΠΏΠΎΡΠΈΡΠ°ΠΉ. ΠΡΠΊΡΠΎΠ΅ΠΌ ΡΠ°ΠΉΠ» transfer.py
ΠΈ Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ get_track_id()
Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ID ΡΡΠ΅ΠΊΠ° Π² Π‘ΠΏΠΎΡΠΈΡΠ°ΠΉ:
sp.search(q=query, limit=1, type='track')
β ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ° query
.
ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ transfer_playlists
, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΡΡ ΠΊΠ°ΠΊ ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΡΠ°ΠΊ ΠΈ Π»Π°ΠΉΠΊΠ½ΡΡΡΠ΅:
create_spotify_playlist
β ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΏΡΡΡΠΎΠΉ ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡ Π² Π‘ΠΏΠΎΡΠΈΡΠ°ΠΉ Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠ· Π―Π.
number_of_tracks
β ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ΅ΠΊΠΎΠ² Π² ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡΠ΅.
- ΠΠ΄Π΅ΡΡ ΠΌΡ ΠΈΡΠ΅ΠΌ Π² Π‘ΠΏΠΎΡΠΈΡΠ°ΠΉ ΡΡΠ΅ΠΊΠΈ ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΠΈΡ
ID ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡΠ° Π² ΡΠ»ΠΎΠ²Π°ΡΡ
new_spotify_playlist
.
if all(query == '' for query in new_spotify_playlist.values())
β Π΅ΡΠ»ΠΈ Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ»ΠΎΠ²Π°ΡΡ ΠΏΡΡΡΡΠ΅, Π·Π½Π°ΡΠΈΡ ΡΡΠ΅ΠΊΠΈ ΠΎΡΡΡΡΡΡΠ²ΡΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ Π‘ΠΏΠΎΡΠΈΡΠ°ΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠ΄ΠΊΠ°ΡΡΡ ΠΈΠ»ΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΠΈ.
sp.user_playlist_unfollow(username, new_spotify_playlist_id)
β ΡΠ΄Π°Π»ΡΠ΅Ρ ΠΏΡΡΡΠΎΠΉ ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡ ΠΈΠ· Π‘ΠΏΠΎΡΠΈΡΠ°ΠΉ.
ΠΠ°ΠΉΠΊΠ½ΡΡΡΠ΅ ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡΡ
ΠΠ°ΠΉΠΊΠ½ΡΡΡΠ΅ ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ, Π½ΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡ
ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΠΈ ΡΠ°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΡΠ²ΠΎΠΈ ΠΏΠ»Π΅ΠΉΠ»ΡΡΡ. ΠΡΠΊΡΠΎΠ΅ΠΌ ΡΠ°ΠΉΠ» get_music_data
ΠΈ Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ get_liked_playlists_data()
, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠ»ΠΎΠ²Π°ΡΡ Ρ ID Π»Π°ΠΉΠΊΠ½ΡΡΡΡ
ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡΠΎΠ², ΠΈΡ
Π½Π°Π·Π²Π°Π½ΠΈΡΠΌΠΈ ΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, ΡΠΎΠ·Π΄Π°Π²ΡΠΈΡ
ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡ.
ΠΠ΄Π΅ΡΡ ΠΌΡ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ ΡΠ²ΠΎΠΈΡ
ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡΠΎΠ², ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²Π° Mu
ΠΈ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠ»ΠΎΠ²Π°ΡΡ Ρ ID ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡΠ°, Π΅Π³ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΈ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠΎΠ·Π΄Π°Π²ΡΠ΅Π³ΠΎ ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡ.
Π’Π΅ΠΏΠ΅ΡΡ Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ get_liked_playlists()
, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠΊΡ Π»Π°ΠΉΠΊΠ½ΡΡΡΡ
ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡΠΎΠ² ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π½Π°Π·Π²Π°Π½ΠΈΡ ΡΡΠ΅ΠΊΠΎΠ² ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π΅ΠΉ
Π ΡΡΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ ΠΊΠΎΠ΄Π° ΠΌΡ:
- ΠΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡΠ°.
- ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ID ΡΡΠ΅ΠΊΠΎΠ² Π² ΡΠΎΡΠΌΠ°ΡΠ΅
ID_ΡΡΠ΅ΠΊΠ°:ID_Π°Π»ΡΠ±ΠΎΠΌΠ°
.
ΠΠ΄Π΅ΡΡ:
- Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ID ΡΡΠ΅ΠΊΠ°.
- ΠΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ ΡΡΠ΅ΠΊΠ°.
- ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ° ΠΈ ΠΈΠΌΡ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ.
- ΠΠ°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ Π² ΡΠ»ΠΎΠ²Π°ΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡΠ°, Π΅Π³ΠΎ ΡΡΠ΅ΠΊΠΈ ΠΈ ΠΈΠΌΠ΅Π½Π° ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π΅ΠΉ.
ΠΠ°ΠΉΠΊΠ½ΡΡΡΠ΅ ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌ ΡΠ΅ΡΠ΅Π· ΡΡΠ½ΠΊΡΠΈΡ transfer_playlsits()
.
ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡ ΠΌΡΠ·ΡΠΊΠΈ
Π ΠΊΠΎΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Π° transfer.py
Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ main()
, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΠ΅Ρ Π²ΡΡ ΡΠΎΠ½ΠΎΡΠ΅ΠΊΡ Π² Π‘ΠΏΠΎΡΠΈΡΠ°ΠΉ.
GitHub
ΠΠ΅ΡΡ ΠΊΠΎΠ΄ Ρ Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ Π½Π° ΡΠΊΡΠ°Π½ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ
yandex-music-to-spotify Π½Π° GitHub. ΠΠ»Π΅ΠΉΠ»ΠΈΡΡΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΡΡΡΡ Π΄ΠΎΠ»Π³ΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΠΈ Π°Π»ΡΠ±ΠΎΠΌΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΊΡΠΈΠΏΡ.
ΠΠ»ΡΠ±ΠΎΠΌΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΡΡΡΡ ΡΠ°ΠΊ:
***
ΠΡ Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ ΡΠΊΡΠΈΠΏΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° Π²ΡΠ΅ΠΉ ΡΠΎΠ½ΠΎΡΠ΅ΠΊΠΈ ΠΈΠ· Π―Π½Π΄Π΅ΠΊΡ.ΠΡΠ·ΡΠΊΠΈ Π² Π‘ΠΏΠΎΡΠΈΡΠ°ΠΉ ΠΈ Π½Π°ΡΡΠΈΠ»ΠΈΡΡ:
- Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π±ΡΠ°ΡΠ·Π΅Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Selenium;
- ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈΠ· ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
JavaScript ΠΈ ΠΈΠ· html-ΡΠ΅Π³ΠΎΠ²;
- Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ
;
- ΠΏΡΠΎΠΊΠ°ΡΠ°Π»ΠΈ Π½Π°Π²ΡΠΊ ΡΠ°Π±ΠΎΡΡ ΡΠΎ ΡΠ»ΠΎΠ²Π°ΡΡΠΌΠΈ Python.
ΠΠ°ΡΠ΅ΡΠΈΠ°Π»Ρ ΠΏΠΎ ΡΠ΅ΠΌΠ΅:
β ΠΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌ ΠΏΠ°ΡΡΠΈΠ½Π³ ΡΠ°ΠΉΡΠ°: ΠΊΠΎΡΠΎΡΠΊΠΈΠΉ ΡΡΡΠΎΡΠΈΠ°Π» Π½Π° Python
β ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π΄Π°ΡΠ°-ΠΆΡΡΠ½Π°Π»ΠΈΡΡΠ° #2: Π²Π΅Π±-ΡΠΊΡΠ°ΠΏΠΈΠ½Π³, ΠΏΠ°ΡΡΠΈΠ½Π³ ΠΈ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ
β ΠΠ΅Π±-ΡΠΊΡΠ°ΠΏΠΈΠ½Π³ ΠΏΠΎ ΡΠ°ΡΠΏΠΈΡΠ°Π½ΠΈΡ Ρ Django ΠΈ Heroku