From c3dd26acad37c75bfd77812c9c296b78913f1662 Mon Sep 17 00:00:00 2001 From: Solomon Victorino Date: Sun, 22 Dec 2024 13:11:22 -0700 Subject: [PATCH] search: exclude "Single"/"EP" text from album artist list ```diff next(r for r in yt.search("Eminem Houdini", filter="albums") if r["title"] == "Houdini")["artists"] [ - {'name': 'Single', 'id': None}, {'name': 'Eminem', 'id': 'UCedvOgsKFzcK3hA5taf3KoQ'} ] ``` --- tests/mixins/test_search.py | 33 ++++++++++++++- ytmusicapi/locales/ar/LC_MESSAGES/base.mo | Bin 1049 -> 1192 bytes ytmusicapi/locales/ar/LC_MESSAGES/base.po | 40 ++++++++++++------- ytmusicapi/locales/base.pot | 40 ++++++++++++------- ytmusicapi/locales/de/LC_MESSAGES/base.mo | Bin 932 -> 1036 bytes ytmusicapi/locales/de/LC_MESSAGES/base.po | 40 ++++++++++++------- ytmusicapi/locales/en/LC_MESSAGES/base.mo | Bin 474 -> 578 bytes ytmusicapi/locales/en/LC_MESSAGES/base.po | 40 ++++++++++++------- ytmusicapi/locales/es/LC_MESSAGES/base.mo | Bin 1005 -> 1110 bytes ytmusicapi/locales/es/LC_MESSAGES/base.po | 40 ++++++++++++------- ytmusicapi/locales/fr/LC_MESSAGES/base.mo | Bin 795 -> 899 bytes ytmusicapi/locales/fr/LC_MESSAGES/base.po | 40 ++++++++++++------- ytmusicapi/locales/hi/LC_MESSAGES/base.mo | Bin 1146 -> 1279 bytes ytmusicapi/locales/hi/LC_MESSAGES/base.po | 40 ++++++++++++------- ytmusicapi/locales/it/LC_MESSAGES/base.mo | Bin 859 -> 956 bytes ytmusicapi/locales/it/LC_MESSAGES/base.po | 40 ++++++++++++------- ytmusicapi/locales/ja/LC_MESSAGES/base.mo | Bin 1085 -> 1202 bytes ytmusicapi/locales/ja/LC_MESSAGES/base.po | 40 ++++++++++++------- ytmusicapi/locales/ko/LC_MESSAGES/base.mo | Bin 1009 -> 1114 bytes ytmusicapi/locales/ko/LC_MESSAGES/base.po | 40 ++++++++++++------- ytmusicapi/locales/nl/LC_MESSAGES/base.mo | Bin 988 -> 1092 bytes ytmusicapi/locales/nl/LC_MESSAGES/base.po | 40 ++++++++++++------- ytmusicapi/locales/pt/LC_MESSAGES/base.mo | Bin 923 -> 1028 bytes ytmusicapi/locales/pt/LC_MESSAGES/base.po | 40 ++++++++++++------- ytmusicapi/locales/ru/LC_MESSAGES/base.mo | Bin 1044 -> 1159 bytes ytmusicapi/locales/ru/LC_MESSAGES/base.po | 40 ++++++++++++------- ytmusicapi/locales/tr/LC_MESSAGES/base.mo | Bin 914 -> 1019 bytes ytmusicapi/locales/tr/LC_MESSAGES/base.po | 40 ++++++++++++------- ytmusicapi/locales/ur/LC_MESSAGES/base.mo | Bin 1013 -> 1122 bytes ytmusicapi/locales/ur/LC_MESSAGES/base.po | 40 ++++++++++++------- ytmusicapi/locales/zh_CN/LC_MESSAGES/base.po | 40 ++++++++++++------- ytmusicapi/locales/zh_TW/LC_MESSAGES/base.po | 40 ++++++++++++------- ytmusicapi/mixins/search.py | 7 ++-- ytmusicapi/parsers/i18n.py | 8 ++++ ytmusicapi/parsers/search.py | 23 ++++++++--- 35 files changed, 502 insertions(+), 249 deletions(-) diff --git a/tests/mixins/test_search.py b/tests/mixins/test_search.py index c52d2045..876b1d92 100644 --- a/tests/mixins/test_search.py +++ b/tests/mixins/test_search.py @@ -2,7 +2,7 @@ from ytmusicapi import YTMusic from ytmusicapi.exceptions import YTMusicUserError -from ytmusicapi.parsers.search import ALL_RESULT_TYPES +from ytmusicapi.parsers.search import ALL_RESULT_TYPES, API_RESULT_TYPES class TestSearch: @@ -22,12 +22,41 @@ def test_search_queries(self, query: str, yt_instance: str, request: pytest.Fixt assert ["resultType" in r for r in results] == [True] * len(results) assert len(results) >= 5 assert not any( - artist["name"].lower() in ALL_RESULT_TYPES + artist["name"].lower() in API_RESULT_TYPES for result in results if "artists" in result for artist in result["artists"] ) + @pytest.mark.parametrize( + "case", + [ + ( + "Eminem Houdini", + { + "title": "Houdini", + "artists": [{"name": "Eminem", "id": "UCedvOgsKFzcK3hA5taf3KoQ"}], + "type": "Single", + "resultType": "album", + }, + ), + ( + "Seven Martin Garrix", + { + "title": "Seven", + "artists": [{"name": "Martin Garrix", "id": "UCqJnSdHjKtfsrHi9aI-9d3g"}], + "type": "EP", + "resultType": "album", + }, + ), + ], + ) + def test_search_album_artists(self, yt, case: tuple[str, dict]): + (query, expected) = case + results = yt.search(query, filter="albums") + + assert any(result == result | expected for result in results) + def test_search_ignore_spelling(self, yt_auth): results = yt_auth.search("Martin Stig Andersen - Deteriation", ignore_spelling=True) assert len(results) > 0 diff --git a/ytmusicapi/locales/ar/LC_MESSAGES/base.mo b/ytmusicapi/locales/ar/LC_MESSAGES/base.mo index d41fc6e6a28ec7a0f511bc3990419d775c570404..ccb98711df8185a6450e5a3e8cd0a654d96504a7 100644 GIT binary patch delta 579 zcmXxhJxD@P6u|NO)Jn^~p4t})LbwD?Z9z*7ZMD=Ugpq+@B|W1pDYBxrUJcDIN_Z>XC#-#6`bSJ-Cc=&;~|uN7tt~NPUh&c#XrVs8pSa{P0!#iL&qyyD>%=<2Z)${XB+o z4dq}9<-lECA7PC847mhll3gTyHba`1=$C=>o7W^8NVi_d-yxf`NAs=eMfH+$mC{rn z>4h}og}jJL=T^4YTcf4YTZODuP?DxCWY1qHM5wq+bI2HHU lEhXH2=gvKGYIek5A1FKb?jcn*;g*=}IW_0TsoKx}*?(_^P`UsB delta 435 zcmXZYKTASk6vy%BdT;8@ze!Pn^#Y`|UEe^1@4%K4Y)PZ>Zeh?6Tq0U*X>f1}$41x2 zpd}n65Lz5{DCqmUo&)Fk-1B&Ro^$Uoe9A`CO7P%_EwW0!kh|oO$3pZmjko4KW~d)A zi_hi|L+V%i{mu3#R==AcxIy37x{ln8hk%VAYgkyr5_Rz(E-^?sSHxe`#W{cNHfrDl z+{0ts#}iclxp|H1yTJkuu;wD?Mm*%%_{2^8MqRM5dWAdGK2tJF@})GGf?1N#8|e)F zU!gCgGc;M1& diff --git a/ytmusicapi/locales/ar/LC_MESSAGES/base.po b/ytmusicapi/locales/ar/LC_MESSAGES/base.po index eb816c7c..f158abce 100644 --- a/ytmusicapi/locales/ar/LC_MESSAGES/base.po +++ b/ytmusicapi/locales/ar/LC_MESSAGES/base.po @@ -18,65 +18,77 @@ msgstr "" "X-Generator: Poedit 3.2.2\n" #: parsers/i18n.py:32 +msgid "album" +msgstr "ألبوم" + +#: parsers/i18n.py:33 msgid "artist" msgstr "فنان" -#: parsers/i18n.py:33 +#: parsers/i18n.py:34 msgid "playlist" msgstr "قائمةالتشغيل" -#: parsers/i18n.py:34 +#: parsers/i18n.py:35 msgid "song" msgstr "أغنية" -#: parsers/i18n.py:35 +#: parsers/i18n.py:36 msgid "video" msgstr "فيديو" -#: parsers/i18n.py:36 +#: parsers/i18n.py:37 msgid "station" msgstr "محطة" -#: parsers/i18n.py:37 +#: parsers/i18n.py:38 msgid "profile" msgstr "الملف الشخصي" -#: parsers/i18n.py:38 +#: parsers/i18n.py:39 msgid "podcast" msgstr "بودكاست" -#: parsers/i18n.py:39 +#: parsers/i18n.py:40 msgid "episode" msgstr "حلقة" #: parsers/i18n.py:46 +msgid "single" +msgstr "أغنية منفردة" + +#: parsers/i18n.py:47 +msgid "ep" +msgstr "ألبوم قصير" + +#: parsers/i18n.py:55 msgid "albums" msgstr "ألبومات" -#: parsers/i18n.py:47 +#: parsers/i18n.py:56 msgid "singles" msgstr "الفردي" -#: parsers/i18n.py:48 +#: parsers/i18n.py:57 msgid "shows" msgstr "الكتب المسموعة والعروض" -#: parsers/i18n.py:49 +#: parsers/i18n.py:58 msgid "videos" msgstr "أشرطة فيديو" -#: parsers/i18n.py:50 +#: parsers/i18n.py:59 msgid "playlists" msgstr "قوائم التشغيل" -#: parsers/i18n.py:51 +#: parsers/i18n.py:60 msgid "related" msgstr "ذات صلة" -#: parsers/i18n.py:52 +#: parsers/i18n.py:61 msgid "episodes" msgstr "أحدث الحلقات" -#: parsers/i18n.py:53 +#: parsers/i18n.py:62 msgid "podcasts" msgstr "بودكاست" diff --git a/ytmusicapi/locales/base.pot b/ytmusicapi/locales/base.pot index 092f59ec..2f0f46e3 100644 --- a/ytmusicapi/locales/base.pot +++ b/ytmusicapi/locales/base.pot @@ -18,65 +18,77 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: parsers/i18n.py:32 -msgid "artist" +msgid "album" msgstr "" #: parsers/i18n.py:33 -msgid "playlist" +msgid "artist" msgstr "" #: parsers/i18n.py:34 -msgid "song" +msgid "playlist" msgstr "" #: parsers/i18n.py:35 -msgid "video" +msgid "song" msgstr "" #: parsers/i18n.py:36 -msgid "station" +msgid "video" msgstr "" #: parsers/i18n.py:37 -msgid "profile" +msgid "station" msgstr "" #: parsers/i18n.py:38 -msgid "podcast" +msgid "profile" msgstr "" #: parsers/i18n.py:39 +msgid "podcast" +msgstr "" + +#: parsers/i18n.py:40 msgid "episode" msgstr "" #: parsers/i18n.py:46 -msgid "albums" +msgid "single" msgstr "" #: parsers/i18n.py:47 +msgid "ep" +msgstr "" + +#: parsers/i18n.py:55 +msgid "albums" +msgstr "" + +#: parsers/i18n.py:56 msgid "singles" msgstr "" -#: parsers/i18n.py:48 +#: parsers/i18n.py:57 msgid "shows" msgstr "" -#: parsers/i18n.py:49 +#: parsers/i18n.py:58 msgid "videos" msgstr "" -#: parsers/i18n.py:50 +#: parsers/i18n.py:59 msgid "playlists" msgstr "" -#: parsers/i18n.py:51 +#: parsers/i18n.py:60 msgid "related" msgstr "" -#: parsers/i18n.py:52 +#: parsers/i18n.py:61 msgid "episodes" msgstr "" -#: parsers/i18n.py:53 +#: parsers/i18n.py:62 msgid "podcasts" msgstr "" diff --git a/ytmusicapi/locales/de/LC_MESSAGES/base.mo b/ytmusicapi/locales/de/LC_MESSAGES/base.mo index c2d73a292472d20bf277be25ffdbe47fd71a8908..c76f5bc42ec8982285628a56b2a4711133c80bd5 100644 GIT binary patch delta 518 zcmXw#y-UMj5XRq_#@3Je(NZ1!7<6-SbkfO5{0qdTg@9r$(j=2ZaB&c~;OHi9PC7a$ z4kCz~;3R^Rj-4C?{XNO`;PSiY?#;bVa#235r0=!TnIr1tEO|rDk((Y5;tmGz9uC4s z;|m->zrr$ngBAE;{DMR1p6Oqxa{(`jRmk4dH7K-r#s&+pgkCbe3}s*i>f9=vX4$&+ zxBX(?g1T@AGICw(CvXgX2xagD>RguV)VXsCExv^F@Cr`BXX}4LIsS$+(zE`L=|9r} zuJPq2$zf6^6xywrD3D(+BQ@zQYwGta^yRvQow;jWJW7s}{TS&Nu&TP*ZYBH0Gjh#t myc@+XJjjl{jq4|G&1)3Hu;ca~ZaY!j4!auH{Ukf`7ykj5Dl+>3 delta 428 zcmXYtJ4*vm5QS&68}symh=CBSwM}DVYa{s+5mHEEitGkV6|oT{5Mc>gXd&2HYMD+e zOPh4Dva|3f_?^uhIQ!jm?`3B0PKwWk@p3zw8QQ`P{D5m(2Yk>4T!SO$B`lDyVG&N9 z_pn5M^85mI@69=fdGd$nPZ*hv?aMb7e&HLc;Sa3gU*C_yRf95Ap&hsZ>rjIn_<7Uw z5mcRHxCdKs7j~fryMlT8+YJj{yv;Vu?mRz2dS}wPlv^Pipu$=&mQ-*ZZ{jMJG#oE9 z%490@)u598wzYew!_s+d?Ll%DC+Q+MdEL()2GvgAy6^LTob)<_Gzo|4U)cBuhw~@q diff --git a/ytmusicapi/locales/de/LC_MESSAGES/base.po b/ytmusicapi/locales/de/LC_MESSAGES/base.po index 4d8f56a2..25402e88 100644 --- a/ytmusicapi/locales/de/LC_MESSAGES/base.po +++ b/ytmusicapi/locales/de/LC_MESSAGES/base.po @@ -18,65 +18,77 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: parsers/i18n.py:32 +msgid "album" +msgstr "album" + +#: parsers/i18n.py:33 msgid "artist" msgstr "künstler" -#: parsers/i18n.py:33 +#: parsers/i18n.py:34 msgid "playlist" msgstr "playlist" -#: parsers/i18n.py:34 +#: parsers/i18n.py:35 msgid "song" msgstr "titel" -#: parsers/i18n.py:35 +#: parsers/i18n.py:36 msgid "video" msgstr "video" -#: parsers/i18n.py:36 +#: parsers/i18n.py:37 msgid "station" msgstr "sender" -#: parsers/i18n.py:37 +#: parsers/i18n.py:38 msgid "profile" msgstr "profil" -#: parsers/i18n.py:38 +#: parsers/i18n.py:39 msgid "podcast" msgstr "" -#: parsers/i18n.py:39 +#: parsers/i18n.py:40 msgid "episode" msgstr "Folge" #: parsers/i18n.py:46 +msgid "single" +msgstr "single" + +#: parsers/i18n.py:47 +msgid "ep" +msgstr "ep" + +#: parsers/i18n.py:55 msgid "albums" msgstr "alben" -#: parsers/i18n.py:47 +#: parsers/i18n.py:56 msgid "singles" msgstr "singles" -#: parsers/i18n.py:48 +#: parsers/i18n.py:57 msgid "shows" msgstr "Hörbücher und Serien" -#: parsers/i18n.py:49 +#: parsers/i18n.py:58 msgid "videos" msgstr "videos" -#: parsers/i18n.py:50 +#: parsers/i18n.py:59 msgid "playlists" msgstr "playlists" -#: parsers/i18n.py:51 +#: parsers/i18n.py:60 msgid "related" msgstr "das könnte fans auch gefallen" -#: parsers/i18n.py:52 +#: parsers/i18n.py:61 msgid "episodes" msgstr "neueste folgen" -#: parsers/i18n.py:53 +#: parsers/i18n.py:62 msgid "podcasts" msgstr "podcasts" diff --git a/ytmusicapi/locales/en/LC_MESSAGES/base.mo b/ytmusicapi/locales/en/LC_MESSAGES/base.mo index 24046f0457d9230dbdced04cfb8accd2df986189..dad0d03a7eb08cdc4986c5c1b2f3e4c1d6a0c0f2 100644 GIT binary patch delta 234 zcmcb`e2As~o)F7a1|VPuVi_O~0b*_-?g3&D*a5_>K)e%(nSgjd5OV#GnRbfHYbIX`mVgW*~+E zkT_5n4p@LJkf9)p84`1nN^==f3nmswuoY+KrRSt>Y?ox@fC*2Y&uGmK5oZ7ZCoUZi delta 143 zcmX@aa*MhCo)F7a1|VPoVi_Q|0b*7ljsap2C;(y(AT9)Ab|9_-Vvu|j5Q{T1FmwQE zejr`|WQzdl4N&?hkOm?KW*}w)Vh{k?!H`;zS)8AeTFg+Cnv+;E@dD?@2NH~v8JVmA DMaL4W diff --git a/ytmusicapi/locales/en/LC_MESSAGES/base.po b/ytmusicapi/locales/en/LC_MESSAGES/base.po index 51d4d95e..ba2075b3 100644 --- a/ytmusicapi/locales/en/LC_MESSAGES/base.po +++ b/ytmusicapi/locales/en/LC_MESSAGES/base.po @@ -18,65 +18,77 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: parsers/i18n.py:32 +msgid "album" +msgstr "album" + +#: parsers/i18n.py:33 msgid "artist" msgstr "" -#: parsers/i18n.py:33 +#: parsers/i18n.py:34 msgid "playlist" msgstr "" -#: parsers/i18n.py:34 +#: parsers/i18n.py:35 msgid "song" msgstr "" -#: parsers/i18n.py:35 +#: parsers/i18n.py:36 msgid "video" msgstr "" -#: parsers/i18n.py:36 +#: parsers/i18n.py:37 msgid "station" msgstr "" -#: parsers/i18n.py:37 +#: parsers/i18n.py:38 msgid "profile" msgstr "" -#: parsers/i18n.py:38 +#: parsers/i18n.py:39 msgid "podcast" msgstr "" -#: parsers/i18n.py:39 +#: parsers/i18n.py:40 msgid "episode" msgstr "" #: parsers/i18n.py:46 +msgid "single" +msgstr "single" + +#: parsers/i18n.py:47 +msgid "ep" +msgstr "ep" + +#: parsers/i18n.py:55 msgid "albums" msgstr "" -#: parsers/i18n.py:47 +#: parsers/i18n.py:56 msgid "singles" msgstr "" -#: parsers/i18n.py:48 +#: parsers/i18n.py:57 msgid "shows" msgstr "Audiobooks and shows" -#: parsers/i18n.py:49 +#: parsers/i18n.py:58 msgid "videos" msgstr "" -#: parsers/i18n.py:50 +#: parsers/i18n.py:59 msgid "playlists" msgstr "" -#: parsers/i18n.py:51 +#: parsers/i18n.py:60 msgid "related" msgstr "fans might also like" -#: parsers/i18n.py:52 +#: parsers/i18n.py:61 msgid "episodes" msgstr "latest episodes" -#: parsers/i18n.py:53 +#: parsers/i18n.py:62 msgid "podcasts" msgstr "" diff --git a/ytmusicapi/locales/es/LC_MESSAGES/base.mo b/ytmusicapi/locales/es/LC_MESSAGES/base.mo index 636e68f91828210335ff75f2813a5e3443e34d4a..890141d4d0110e0ce2c9a11143f1dc9b674ab3de 100644 GIT binary patch delta 561 zcmXw#uTR537>2Lw*ai$3qhSIjrx=O^K|%&!7}`Y75HQM2d9Y(G^t*Ns(UtWW{gdXjRe-A1U78L7Az9)*|-DMcL3FQ2pfoW zZ5+9ozy*}xC8T7oZ2lV7iSOVt9Kwc)jTza7cc_U!p#&yy1^z<)of^|9--7CEL%nDd zN^r;4J2u{j%$JJJLJcF+9kN9&=%<(Iq9rA)NpJ?|j`Y>cU>0x*&EYjXw`#tD^V<9U zqw|w&4UK;m^}@&m1HN8(dK}~o&7kimLudQp!`XE_^K`FcL4LxgFKN5Cr7WL}+_irJ CW<41I delta 442 zcmXw#J!=9%5Qg{k%z4Iqi9{r}He%WoR<>#V1vw!_KpQn+cchC5A|AmqO^Q^3V43n- z?Shq91SBAcWvW1)xtk2U``kM_J3D*J^v?0uIs3^FXQ+f;Pytmf7UB^ez=3iM9sCrg z;j{7;y7+h9|ImD>ey;q4De6|S_stg{Hi@kk?6u$r%EiC1fb2wkVJR68P=+$VCCtGq zcn+_jJm5z6`%ngZfYNUWFW>~`jc?4G7KBh5E}*<{3FW|A{RT2e^rs{*!Aw!ei?S#a z+vvRXIz~sDJAv|0+C*{4>K4_U3cXhIzTGumr+3%w1>aU!5L!(LLu1_7OkrYlaw8#*PHuh( z1}8=mR}=lc*O!DRecs>Qdv|@VU3t%iWP6cY8dSwiyudYFb||P1^Du-S96=X8!UCMa zQ~0EuYd=-4pqzh&a{dkG;5u7R%)4&*&<&rkhQGA`O_~JlpakzJ68Hlz;jhl?Ct1K1 zY|+1l4cOJb59K0#<*=4{{0GF>E@c1! delta 350 zcmZo>pUqZ(Pl#nI0}${4u?!H`0I?tt-vMF}P+(+WU<1;MK$;y$YXE5uAZ-ApEurF0 zP}&PfvjXLVfHVt`j)02CLd8>oG|0ScAT7?wP|r{VRnWx*F?bS?mIf-A4drhK(jW~7 zfV3=-J`SX%fb>%!4YG)V8A7uGX^=V|APsV;Fpvfs4R!>O0?Tm&X^m&0!@fw zpjs5b1>}K31mshO#G;bS;*!Y~j7FO`G8!?mfw`%ZKQZM?mt>X{r7{#Hrex+blx3zI JUJ0X$82}g^Byj)$ diff --git a/ytmusicapi/locales/fr/LC_MESSAGES/base.po b/ytmusicapi/locales/fr/LC_MESSAGES/base.po index e39fffbc..fd7f4772 100644 --- a/ytmusicapi/locales/fr/LC_MESSAGES/base.po +++ b/ytmusicapi/locales/fr/LC_MESSAGES/base.po @@ -18,65 +18,77 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: parsers/i18n.py:32 +msgid "album" +msgstr "album" + +#: parsers/i18n.py:33 msgid "artist" msgstr "artiste" -#: parsers/i18n.py:33 +#: parsers/i18n.py:34 msgid "playlist" msgstr "playlist" -#: parsers/i18n.py:34 +#: parsers/i18n.py:35 msgid "song" msgstr "titre" -#: parsers/i18n.py:35 +#: parsers/i18n.py:36 msgid "video" msgstr "vidéo" -#: parsers/i18n.py:36 +#: parsers/i18n.py:37 msgid "station" msgstr "radio" -#: parsers/i18n.py:37 +#: parsers/i18n.py:38 msgid "profile" msgstr "profil" -#: parsers/i18n.py:38 +#: parsers/i18n.py:39 msgid "podcast" msgstr "" -#: parsers/i18n.py:39 +#: parsers/i18n.py:40 msgid "episode" msgstr "Épisode" #: parsers/i18n.py:46 +msgid "single" +msgstr "single" + +#: parsers/i18n.py:47 +msgid "ep" +msgstr "ep" + +#: parsers/i18n.py:55 msgid "albums" msgstr "" -#: parsers/i18n.py:47 +#: parsers/i18n.py:56 msgid "singles" msgstr "" -#: parsers/i18n.py:48 +#: parsers/i18n.py:57 msgid "shows" msgstr "Livres audio et émissions" -#: parsers/i18n.py:49 +#: parsers/i18n.py:58 msgid "videos" msgstr "vidéos" -#: parsers/i18n.py:50 +#: parsers/i18n.py:59 msgid "playlists" msgstr "" -#: parsers/i18n.py:51 +#: parsers/i18n.py:60 msgid "related" msgstr "vous aimerez peut-être aussi" -#: parsers/i18n.py:52 +#: parsers/i18n.py:61 msgid "episodes" msgstr "épisodes les plus récents" -#: parsers/i18n.py:53 +#: parsers/i18n.py:62 msgid "podcasts" msgstr "" diff --git a/ytmusicapi/locales/hi/LC_MESSAGES/base.mo b/ytmusicapi/locales/hi/LC_MESSAGES/base.mo index 8d100f33f9fc9204a6c1d513c2bd24eda6b9ad15..b54dbe246b51a03d088592c812f82d4956339c10 100644 GIT binary patch delta 572 zcmXxhKS)AB9Ki8=K1ZE=CfDk@RdYJFFpg_3O>hgPE}>lD(ALK|Nv$!7cfMt%-k6N?z@?j*LfJ5D>s6ei-o`;ZLpiu% zZJ{*0wLV!tkdNT6MUi{@A(xjJmVy5MVe)B4gSE8}ioO z7?4S}u(7|>89kNVE9JeC$`$$Lz1_`RS5FlS+1iD((0q2roM^rJQmGn!Y4la?H!vPL cGWy)qE6t>vaAMa+-xz&h^r_K}+Ej4)A3C&49{>OV delta 436 zcmXZYKS%;$7{~GFyz|ecnciY?&Q6J=Yt3#F?zTiw4QlhPwMcM8V~b#G*wzxbHa1E_ zOW@KZLMZip?w$vp``qun7vIPC&;Kn%pMiHTRF$sN6S_tpIy|Tw%;Bwhhk5b?7Vy!0 zLZAF>-(PKgZu#B(z%2U~X^!NJ7mtOdZTPVbYt)0cxJEA{Qo;=e=)0+PY>-=5R$^5S;v|bB%Q*Bpq2&+T5N1= zk|qP8v8B;X@HzLM1MhwAd(Qni_x>b4g4S#^c5jFclt)h}hl-YgxP@_e2NSTP?86BD z0S539uD}<#3PzO{W(V@afiwq@jtA15 zKsp1;FM`TfL+NH9%?gz7hVmx@X%--VCWK$lFb~K8S+ER9iv#gmAO>kT$^^0KG?cy! zq(y+@w}CXs;tx>qpHP~SnSntTD9#C_#elRrkOn!_4oHK{a|6;KeLhfrD3E4kh=5oQ z6bA!tAPE#_-~wWhW{^u^fCtI|`IZ-mL52bC28SHT0*1t#q|)4ChQy+h%;J*C^BEmC VKW8*$WCL>(Cu=hoOZW#z_XID?;9#xLsx zOVmF&i@#XGsr3)5)Fn2lUq|(uwr=MpW`he2*hCH3u^V>Lqdu_pA!^?-YTqfYF{F!i z>e$V_#Rl~~(lP^F#38QYi|xN>CdQ0yV`?okRX1p12e+&zs6mnS2KkA(L+yV+9c*YF zA?M3_HPm4g+M`(3!u;$t>D8?03mf`7=1A_5J+%huDfBAm$tAJ~9jb^0UHJX8>x+Di rjDHpPqSyo>pI&r%9u!6o5JhK`HD-;8CLmGR#==4n?5r%TtgQS8Nhg>lAN4{4vKE4{h@BR(uvOCp zO=XcLrKP5D3yF=TmEf6|8MyDv+#Tl4zQN{BKF(H*Ly9gl;EVGf=fFX1Bf zHO#|X<2?+hAME?H`L9+_jBjv(zV~?@$tQ`A@of!1*6<7U;y+kLenw=OI?Rex;5J-= z`)~~&nO`?{%#V#X<`3W|{bR>SWJaQc3v59u>rgKUp)Rm%+=J}lUP^rpc5zzhRYR&dZtDSs#$4>{DL$COf_Ri97KkW|F NUYzu^AIXKk^$!s6FC_o~ diff --git a/ytmusicapi/locales/ja/LC_MESSAGES/base.po b/ytmusicapi/locales/ja/LC_MESSAGES/base.po index d39ffb28..4722d9f8 100644 --- a/ytmusicapi/locales/ja/LC_MESSAGES/base.po +++ b/ytmusicapi/locales/ja/LC_MESSAGES/base.po @@ -18,65 +18,77 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: parsers/i18n.py:32 +msgid "album" +msgstr "アルバム" + +#: parsers/i18n.py:33 msgid "artist" msgstr "アーティスト" -#: parsers/i18n.py:33 +#: parsers/i18n.py:34 msgid "playlist" msgstr "プレイリスト" -#: parsers/i18n.py:34 +#: parsers/i18n.py:35 msgid "song" msgstr "曲" -#: parsers/i18n.py:35 +#: parsers/i18n.py:36 msgid "video" msgstr "動画" -#: parsers/i18n.py:36 +#: parsers/i18n.py:37 msgid "station" msgstr "ステーション" -#: parsers/i18n.py:37 +#: parsers/i18n.py:38 msgid "profile" msgstr "プロフィール" -#: parsers/i18n.py:38 +#: parsers/i18n.py:39 msgid "podcast" msgstr "ポッドキャスト" -#: parsers/i18n.py:39 +#: parsers/i18n.py:40 msgid "episode" msgstr "エピソード" #: parsers/i18n.py:46 +msgid "single" +msgstr "シングル" + +#: parsers/i18n.py:47 +msgid "ep" +msgstr "ep" + +#: parsers/i18n.py:55 msgid "albums" msgstr "アルバム" -#: parsers/i18n.py:47 +#: parsers/i18n.py:56 msgid "singles" msgstr "シングル" -#: parsers/i18n.py:48 +#: parsers/i18n.py:57 msgid "shows" msgstr "オーディオブックと番組" -#: parsers/i18n.py:49 +#: parsers/i18n.py:58 msgid "videos" msgstr "動画" -#: parsers/i18n.py:50 +#: parsers/i18n.py:59 msgid "playlists" msgstr "プレイリスト" -#: parsers/i18n.py:51 +#: parsers/i18n.py:60 msgid "related" msgstr "おすすめのアーティスト" -#: parsers/i18n.py:52 +#: parsers/i18n.py:61 msgid "episodes" msgstr "最新エピソード" -#: parsers/i18n.py:53 +#: parsers/i18n.py:62 msgid "podcasts" msgstr "ポッドキャスト" diff --git a/ytmusicapi/locales/ko/LC_MESSAGES/base.mo b/ytmusicapi/locales/ko/LC_MESSAGES/base.mo index bf01f89af8c4c2ffef1d9d9d338b0353eaf60ddb..36f9725f56b45f49efe1806978bf60f908a57b03 100644 GIT binary patch delta 554 zcmXw#KS;ws6o)TOZL8LQHQ-`5okR*cDY%H}sEb>dh#d+Qi;0s%K%D9z7`wQ*I0!Cc z7Y7G%7jzOj6dXjs7VPNe_mY=Ke)rw)?%lnY>u1}!pi@XU4dI|^^oWY6Y%vh8Z~(r+ z418C1U<&^Uv+x_{;IHxz4&qZJ$$lQnzN5YvGcdDEq`*9s0*jik4Ab~k^&3#~HlgHg z!zqfC)%$k5egyOEA49gxnfh}$iN8|ciWnI4qzf;~Hk8i4pu9>S%8O*^Mhed;=adUj z3NAr8x31iR^k)ia7)dh{a)-o(4AhSf$&elNgnW zTiZF@i$~A62Y%J_O{LCP_4aow2|ZJt7#tiuQ-fS?0NvjOQ&C_Mp4vjh3lfiwq@o)4v0 z0BKGje)10}oJK8A=-fX<;DW7RnEV(s58a8%kFIX^;b3fwTya?g!Gc4D~=C0~sKT4ngUY zKpJGh1t1O5a2HBH2hu=yfI|wT9t41H0t1kbKzg_!TyO}1LWd8Cd7)zbKpNyxpfO;; z4J0`wp&S7aotTqUnp@0}SX7c(Tr&ANW6)*?CR;|Xmbcv--gGT_+qGlzMCMtOjaW1Q D`qnP- diff --git a/ytmusicapi/locales/ko/LC_MESSAGES/base.po b/ytmusicapi/locales/ko/LC_MESSAGES/base.po index 76121d14..531be2af 100644 --- a/ytmusicapi/locales/ko/LC_MESSAGES/base.po +++ b/ytmusicapi/locales/ko/LC_MESSAGES/base.po @@ -18,65 +18,77 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: parsers/i18n.py:32 +msgid "album" +msgstr "앨범" + +#: parsers/i18n.py:33 msgid "artist" msgstr "아티스트" -#: parsers/i18n.py:33 +#: parsers/i18n.py:34 msgid "playlist" msgstr "재생목록" -#: parsers/i18n.py:34 +#: parsers/i18n.py:35 msgid "song" msgstr "노래" -#: parsers/i18n.py:35 +#: parsers/i18n.py:36 msgid "video" msgstr "동영상" -#: parsers/i18n.py:36 +#: parsers/i18n.py:37 msgid "station" msgstr "스테이션" -#: parsers/i18n.py:37 +#: parsers/i18n.py:38 msgid "profile" msgstr "프로필" -#: parsers/i18n.py:38 +#: parsers/i18n.py:39 msgid "podcast" msgstr "팟캐스트" -#: parsers/i18n.py:39 +#: parsers/i18n.py:40 msgid "episode" msgstr "에피소드" #: parsers/i18n.py:46 +msgid "single" +msgstr "싱글" + +#: parsers/i18n.py:47 +msgid "ep" +msgstr "ep" + +#: parsers/i18n.py:55 msgid "albums" msgstr "앨범" -#: parsers/i18n.py:47 +#: parsers/i18n.py:56 msgid "singles" msgstr "싱글" -#: parsers/i18n.py:48 +#: parsers/i18n.py:57 msgid "shows" msgstr "오디오북 및 프로그램" -#: parsers/i18n.py:49 +#: parsers/i18n.py:58 msgid "videos" msgstr "동영상" -#: parsers/i18n.py:50 +#: parsers/i18n.py:59 msgid "playlists" msgstr "재싱목록" -#: parsers/i18n.py:51 +#: parsers/i18n.py:60 msgid "related" msgstr "fans might also like" -#: parsers/i18n.py:52 +#: parsers/i18n.py:61 msgid "episodes" msgstr "최신 에피소드" -#: parsers/i18n.py:53 +#: parsers/i18n.py:62 msgid "podcasts" msgstr "팟캐스트" diff --git a/ytmusicapi/locales/nl/LC_MESSAGES/base.mo b/ytmusicapi/locales/nl/LC_MESSAGES/base.mo index 1daabeb48f7fbb879ca4c31737eace32ab610696..48bc7d3438bd362d285bc142f2682ba723de51a8 100644 GIT binary patch delta 515 zcmYk&Jxc>Y5Qp(yFEQs!d^w2-QG^r*EMljPcG?6#fn9_Yf`WJn*rl^g5z<)(>{YB4 z1hugXScq8Iq_7dvS@`_#Cg8x_Z|C-IcG&maW7ztLGF?Y3kjvyPxkB!H9>hIn@d3y2 z$$Z5z>OSW14MY4i2RK3fWA!iUyDUG+Jkq!23M|yPXd5NWP_J9Pff`^7_1z9uX|`+c z+d=xii)ws{Y`Gpz;uRL~8mI9YXRwbU=esW!`tcj5aEOcOnL-CHq4rm;E?Zqe4Yq0Z zHZqr+Cv~ufP^gDuE+x4Y-BhIdz+US574%4&GD9+@4%XDOlY)aw;GjW6LoP0k1}%b% zG&nR!;374(^+)vmy>||r_j%{M%f08mP3Dm9f1mqLj>wZG@`b$6yT^m*VG1A20j8-( zn8C66i~;q`>IG`uo4LXx>W$S~^quRwoi+Bh;0JZ!FILDut8bF=hPQak_c9i+il^AX z9EPaDhNuA^@dT$>#8>OTV~X?L+8Q6I2|um=Le7pt11SCa8!L2BmOLXhj6%b3 uL&r8zXlMD?^Tx9iIx|{ojY3dWN&iiU;YD^)+w<7 diff --git a/ytmusicapi/locales/nl/LC_MESSAGES/base.po b/ytmusicapi/locales/nl/LC_MESSAGES/base.po index 9de7ed28..2206944e 100644 --- a/ytmusicapi/locales/nl/LC_MESSAGES/base.po +++ b/ytmusicapi/locales/nl/LC_MESSAGES/base.po @@ -19,65 +19,77 @@ msgstr "" "X-Generator: Poedit 3.2.2\n" #: parsers/i18n.py:32 +msgid "album" +msgstr "album" + +#: parsers/i18n.py:33 msgid "artist" msgstr "artiest" -#: parsers/i18n.py:33 +#: parsers/i18n.py:34 msgid "playlist" msgstr "afspeellijst" -#: parsers/i18n.py:34 +#: parsers/i18n.py:35 msgid "song" msgstr "nummer" -#: parsers/i18n.py:35 +#: parsers/i18n.py:36 msgid "video" msgstr "video" -#: parsers/i18n.py:36 +#: parsers/i18n.py:37 msgid "station" msgstr "station" -#: parsers/i18n.py:37 +#: parsers/i18n.py:38 msgid "profile" msgstr "profiel" -#: parsers/i18n.py:38 +#: parsers/i18n.py:39 msgid "podcast" msgstr "" -#: parsers/i18n.py:39 +#: parsers/i18n.py:40 msgid "episode" msgstr "Aflevering" #: parsers/i18n.py:46 +msgid "single" +msgstr "single" + +#: parsers/i18n.py:47 +msgid "ep" +msgstr "ep" + +#: parsers/i18n.py:55 msgid "albums" msgstr "albums" -#: parsers/i18n.py:47 +#: parsers/i18n.py:56 msgid "singles" msgstr "singles" -#: parsers/i18n.py:48 +#: parsers/i18n.py:57 msgid "shows" msgstr "Audioboeken en -series" -#: parsers/i18n.py:49 +#: parsers/i18n.py:58 msgid "videos" msgstr "video's" -#: parsers/i18n.py:50 +#: parsers/i18n.py:59 msgid "playlists" msgstr "afspeellijsten" -#: parsers/i18n.py:51 +#: parsers/i18n.py:60 msgid "related" msgstr "gerelateerd" -#: parsers/i18n.py:52 +#: parsers/i18n.py:61 msgid "episodes" msgstr "nieuwste afleveringen" -#: parsers/i18n.py:53 +#: parsers/i18n.py:62 msgid "podcasts" msgstr "podcasts" diff --git a/ytmusicapi/locales/pt/LC_MESSAGES/base.mo b/ytmusicapi/locales/pt/LC_MESSAGES/base.mo index 4784fe23ebadb74e2f467a772203801a3333c24d..4e70fedeeaae6ad20d0bf3a154e17b81b901284f 100644 GIT binary patch delta 523 zcmXw#J4*vW6oqG#tXUuN5sfKS5K9p(ZM2G&+6fj`ZXkp}5+8}JX~g`1U?m7vb~ak2 zQY^&ALJ+i(fR)%OVw1w}kh=%Yd~^2B-o3MD$>X5$o=%)PG>)h74W7Xp9t*mKKD>i{ z@WJ>5W8@c@gs(7w9pfkLCx2V+LY?z@NlZcdHe7~{8c$ha4kpO+mKUK0Sb{pY0{`Hu z<>h#aMWYI`P)7AH7*`qT=o^I8u#@p{hTzBfnHFmJ6-j_`*Ldn>GOe delta 426 zcmXw!y-Px26vof>TGx+C2`qxvK>8b6TcTBPy>5a=s6jSlMBoxMT!KKC=EfWyn;Kh$ z23=}%4BDdKb2~lo+}}Otec$tOlN&{Y`DXUsP#N#yG2YgHzz3bfRoHi4!H9SWbMVgj z0Q1C;9zQ|dn>eR%h4{teSC};$*qbM2eqjOC@DqN+rJsLf{t7Ok8ht?x{R1no6q;?p zJ*dGBpz0jLB0Pp#tPb`56h`#73r}1_J-AH|%o0fNRLV>AN~KLyRD~pMx{gbD4NDuC u4UICX3Vbz~q`@t2HO}(wuEm{Rv)fB%!O?RyvlA3f{!?*M3on!RaQ_$kCn^*G diff --git a/ytmusicapi/locales/pt/LC_MESSAGES/base.po b/ytmusicapi/locales/pt/LC_MESSAGES/base.po index 34597724..875d2afb 100644 --- a/ytmusicapi/locales/pt/LC_MESSAGES/base.po +++ b/ytmusicapi/locales/pt/LC_MESSAGES/base.po @@ -18,65 +18,77 @@ msgstr "" "X-Generator: Poedit 3.2.2\n" #: parsers/i18n.py:32 +msgid "album" +msgstr "álbum" + +#: parsers/i18n.py:33 msgid "artist" msgstr "artista" -#: parsers/i18n.py:33 +#: parsers/i18n.py:34 msgid "playlist" msgstr "lista de reprodução" -#: parsers/i18n.py:34 +#: parsers/i18n.py:35 msgid "song" msgstr "música" -#: parsers/i18n.py:35 +#: parsers/i18n.py:36 msgid "video" msgstr "vídeo" -#: parsers/i18n.py:36 +#: parsers/i18n.py:37 msgid "station" msgstr "estação" -#: parsers/i18n.py:37 +#: parsers/i18n.py:38 msgid "profile" msgstr "perfil" -#: parsers/i18n.py:38 +#: parsers/i18n.py:39 msgid "podcast" msgstr "" -#: parsers/i18n.py:39 +#: parsers/i18n.py:40 msgid "episode" msgstr "Episódio" #: parsers/i18n.py:46 +msgid "single" +msgstr "single" + +#: parsers/i18n.py:47 +msgid "ep" +msgstr "ep" + +#: parsers/i18n.py:55 msgid "albums" msgstr "álbuns" -#: parsers/i18n.py:47 +#: parsers/i18n.py:56 msgid "singles" msgstr "solteiros" -#: parsers/i18n.py:48 +#: parsers/i18n.py:57 msgid "shows" msgstr "Audiolivros e programas" -#: parsers/i18n.py:49 +#: parsers/i18n.py:58 msgid "videos" msgstr "vídeos" -#: parsers/i18n.py:50 +#: parsers/i18n.py:59 msgid "playlists" msgstr "listas de reprodução" -#: parsers/i18n.py:51 +#: parsers/i18n.py:60 msgid "related" msgstr "relacionado" -#: parsers/i18n.py:52 +#: parsers/i18n.py:61 msgid "episodes" msgstr "episódios novos" -#: parsers/i18n.py:53 +#: parsers/i18n.py:62 msgid "podcasts" msgstr "podcasts" diff --git a/ytmusicapi/locales/ru/LC_MESSAGES/base.mo b/ytmusicapi/locales/ru/LC_MESSAGES/base.mo index c0d1a213607d4015ebeee8d6636da471b93dc52b..fb73a5ced1a3efaceec3fdaaf0e32cffb54a9876 100644 GIT binary patch delta 540 zcmXxhze~eF7{>88N!3>CuUZGu4i2J=lbcWw7u{U!*1?Dw3Y7*^7ndLi&XW39baZue zS3z(qI0$aKi3sBNX)iB*?~^z0C3m^@ir1xdP$}FRQ6*Q%d$LA0JqF?l$M6})@zps% zpZXmq@B@qZ<@~`Cwa+B=%cy?U)wPkSt#P3RHc<;~xe41?px$-$9%|kJYF-1sv593o z49sRQ#5s(SmR+LySGa^XuHVOsrF=0LdhpRT2Cn|ZMehIM23Fb4B-T+c+;?>Y_56{m zJFb6$90H4&O_AD+LYr62YheB1G3jU)bi;-I4lTwzhF{GdY?jnfPLuk=JhYiSv=Iy2 w$LFV`F|qKh+e*3?#r#@H=OoHaEN+Kc->cufdFx*G>#zDzoGk|r*-NnV4~FbD!~g&Q delta 435 zcmXYtJx>Bb5QgWtQ#kPpf*~dpmYCSuoA?iie*haoA`PJJH6&pkQhrENPOON-emUKnVp@Tond@eNT%gzWT=GIuqUjF9R)1t8m_||=Pk_RKfnTf zbUwov|JBdmJwA5-!#RO#Rb>j?{}hgWa`qnz0`T*6&g49zxS4erB3 zsQ4)?!!xM-mdCH$AHqH2_pok>*$W#L`h**B26ger{iUDh>5^WuNvSc3UNY%Ns-gRm zCZy@8&K4%^VEQQKG8I{4buOuMYhIjRc6!$A_S?OF`W-ahPI3o9+6gP^ARMQS==cxy CqAA1x diff --git a/ytmusicapi/locales/ru/LC_MESSAGES/base.po b/ytmusicapi/locales/ru/LC_MESSAGES/base.po index 7158704e..45e5e89a 100644 --- a/ytmusicapi/locales/ru/LC_MESSAGES/base.po +++ b/ytmusicapi/locales/ru/LC_MESSAGES/base.po @@ -18,65 +18,77 @@ msgstr "" "X-Generator: Poedit 3.2.2\n" #: parsers/i18n.py:32 +msgid "album" +msgstr "альбом" + +#: parsers/i18n.py:33 msgid "artist" msgstr "художник" -#: parsers/i18n.py:33 +#: parsers/i18n.py:34 msgid "playlist" msgstr "плейлист" -#: parsers/i18n.py:34 +#: parsers/i18n.py:35 msgid "song" msgstr "песня" -#: parsers/i18n.py:35 +#: parsers/i18n.py:36 msgid "video" msgstr "видео" -#: parsers/i18n.py:36 +#: parsers/i18n.py:37 msgid "station" msgstr "станция" -#: parsers/i18n.py:37 +#: parsers/i18n.py:38 msgid "profile" msgstr "профиль" -#: parsers/i18n.py:38 +#: parsers/i18n.py:39 msgid "podcast" msgstr "Подкаст" -#: parsers/i18n.py:39 +#: parsers/i18n.py:40 msgid "episode" msgstr "Выпуск" #: parsers/i18n.py:46 +msgid "single" +msgstr "сингл" + +#: parsers/i18n.py:47 +msgid "ep" +msgstr "ep" + +#: parsers/i18n.py:55 msgid "albums" msgstr "альбомы" -#: parsers/i18n.py:47 +#: parsers/i18n.py:56 msgid "singles" msgstr "синглы" -#: parsers/i18n.py:48 +#: parsers/i18n.py:57 msgid "shows" msgstr "Аудиокниги и аудиошоу" -#: parsers/i18n.py:49 +#: parsers/i18n.py:58 msgid "videos" msgstr "ролики" -#: parsers/i18n.py:50 +#: parsers/i18n.py:59 msgid "playlists" msgstr "плейлисты" -#: parsers/i18n.py:51 +#: parsers/i18n.py:60 msgid "related" msgstr "связанные с" -#: parsers/i18n.py:52 +#: parsers/i18n.py:61 msgid "episodes" msgstr "новые выпуски" -#: parsers/i18n.py:53 +#: parsers/i18n.py:62 msgid "podcasts" msgstr "подкасты" diff --git a/ytmusicapi/locales/tr/LC_MESSAGES/base.mo b/ytmusicapi/locales/tr/LC_MESSAGES/base.mo index 3ab7c5b3e68fabb32239a9625b7348253220d693..6256128b44cc5c121b59b7688e5873cd3c30cc46 100644 GIT binary patch delta 527 zcmXw#JxBvV5QX>hcWR735wTDUEz?-qXr+~CEu_1^p@B=#yI9A{UW28bU?+%{7D@yW z!9oxOK?EzoDoqM4{GORSnEmG6?#;~Zk^kd2-;0@JhbD*_;)<9h);$(<1GDfJ=HR{Y z38wHb(1)*Z0Dc(1;2^$Z{uk<8mY>7|q;AtqlBn>sZOp?AzGQv@YJf$kbIY&`SIsY_ zdyQ6%8;~ux3Du|!M_|Rc3&-&LFi(GXNTR|gP!pd*y~MeFe}uZ(GgQGh^Pf|!CDr;?6t=e0r9Y~(INAUJ delta 429 zcmXZXF-yZ>5XSLKQ;k(?i;GZ-vrc{hH%IXcbWFja&^jb3XqO5O;v^UZ2Nx#?C$XcO zogBM#(?vINRp`?HlitDQmkV$1?wv(9(ePuld}~CVY?Alnmfiy%#3?T0nR|{A^(C(0 zwR?vZ>Ibi%Q0GSOD=txwy?)2C+0Z8bVd@7yQ3Jp64}VaNze)>#QH}p`11(%wLtSDU z*KiNjXCL+d0qTNBsKq-NG2asZFhFg1;q?_Vy9hN>FtZ4q(-1XQXrU@uBiBiVmg9!n yuZUHi8m!Qw7I)kIN-woI$vSD4PlLmkol+yHc8?QF+>+>3Ca+3~iD2Ld()h79H`1WB88a z*faJqM*fWn9H4_g#y^}OkFiMSlc@6JcWjYK+%+B`Q{v(*o?;H0IE^>qxF_<&#|#6nIEOt<;=njWeUTWa(Lzh8g;q?y zj=H{J#@uXv?-b%Mney;kBbPA0^ zq1Y1?*AR_Lt|9TfYu;qO=X+--vol}6^c^K{weZl;BvB_$i78?s;6S@@816auVT3<| zC3xaIhh==%zu$QN&i#Y)2@X;B^6wMta|ua&dcl_$44{7e3kNVPn2o?6XH+zsz}Mg$ zoP`y*?D+;9$G2b=#&8U7I}hNDC1%H5)c6)^qkAuS^!%&)56CR}OKC8PS#oJ3HCG== zFQi@?Kto9yR*TXm*C=Os+Knc(=K5-9Bev#ddo6CK@4?FTQlTDHvMcLt^>&^wva_t4 Lc8Ztje7N`r9Z@nB diff --git a/ytmusicapi/locales/ur/LC_MESSAGES/base.po b/ytmusicapi/locales/ur/LC_MESSAGES/base.po index 00b1ac94..60849492 100644 --- a/ytmusicapi/locales/ur/LC_MESSAGES/base.po +++ b/ytmusicapi/locales/ur/LC_MESSAGES/base.po @@ -18,65 +18,77 @@ msgstr "" "X-Generator: Poedit 3.2.2\n" #: parsers/i18n.py:32 +msgid "album" +msgstr "البم" + +#: parsers/i18n.py:33 msgid "artist" msgstr "فنکار" -#: parsers/i18n.py:33 +#: parsers/i18n.py:34 msgid "playlist" msgstr "پلے لسٹ" -#: parsers/i18n.py:34 +#: parsers/i18n.py:35 msgid "song" msgstr "نغمہ" -#: parsers/i18n.py:35 +#: parsers/i18n.py:36 msgid "video" msgstr "ویڈیو" -#: parsers/i18n.py:36 +#: parsers/i18n.py:37 msgid "station" msgstr "اسٹیشن" -#: parsers/i18n.py:37 +#: parsers/i18n.py:38 msgid "profile" msgstr "پروفائ" -#: parsers/i18n.py:38 +#: parsers/i18n.py:39 msgid "podcast" msgstr "پوڈکاسٹ" -#: parsers/i18n.py:39 +#: parsers/i18n.py:40 msgid "episode" msgstr "ایپی سوڈ" #: parsers/i18n.py:46 +msgid "single" +msgstr "واحد" + +#: parsers/i18n.py:47 +msgid "ep" +msgstr "ep" + +#: parsers/i18n.py:55 msgid "albums" msgstr "البمز" -#: parsers/i18n.py:47 +#: parsers/i18n.py:56 msgid "singles" msgstr "سنگلز" -#: parsers/i18n.py:48 +#: parsers/i18n.py:57 msgid "shows" msgstr "آڈیو بکس اور شوز" -#: parsers/i18n.py:49 +#: parsers/i18n.py:58 msgid "videos" msgstr "ویڈیوز" -#: parsers/i18n.py:50 +#: parsers/i18n.py:59 msgid "playlists" msgstr "پلے لسٹس" -#: parsers/i18n.py:51 +#: parsers/i18n.py:60 msgid "related" msgstr "متعلقہ" -#: parsers/i18n.py:52 +#: parsers/i18n.py:61 msgid "episodes" msgstr "تازہ ترین ایپی سوڈز" -#: parsers/i18n.py:53 +#: parsers/i18n.py:62 msgid "podcasts" msgstr "پوڈکاسٹس" diff --git a/ytmusicapi/locales/zh_CN/LC_MESSAGES/base.po b/ytmusicapi/locales/zh_CN/LC_MESSAGES/base.po index 968be539..fe101189 100644 --- a/ytmusicapi/locales/zh_CN/LC_MESSAGES/base.po +++ b/ytmusicapi/locales/zh_CN/LC_MESSAGES/base.po @@ -17,65 +17,77 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: parsers/i18n.py:32 +msgid "album" +msgstr "专辑" + +#: parsers/i18n.py:33 msgid "artist" msgstr "音乐人" -#: parsers/i18n.py:33 +#: parsers/i18n.py:34 msgid "playlist" msgstr "播放列表" -#: parsers/i18n.py:34 +#: parsers/i18n.py:35 msgid "song" msgstr "歌曲" -#: parsers/i18n.py:35 +#: parsers/i18n.py:36 msgid "video" msgstr "视频" -#: parsers/i18n.py:36 +#: parsers/i18n.py:37 msgid "station" msgstr "电台" -#: parsers/i18n.py:37 +#: parsers/i18n.py:38 msgid "profile" msgstr "个人资料" -#: parsers/i18n.py:38 +#: parsers/i18n.py:39 msgid "podcast" msgstr "播客" -#: parsers/i18n.py:39 +#: parsers/i18n.py:40 msgid "episode" msgstr "分集" #: parsers/i18n.py:46 +msgid "single" +msgstr "单曲" + +#: parsers/i18n.py:47 +msgid "ep" +msgstr "迷你专辑" + +#: parsers/i18n.py:55 msgid "albums" msgstr "专辑" -#: parsers/i18n.py:47 +#: parsers/i18n.py:56 msgid "singles" msgstr "单曲" -#: parsers/i18n.py:48 +#: parsers/i18n.py:57 msgid "shows" msgstr "有声读物和节目" -#: parsers/i18n.py:49 +#: parsers/i18n.py:58 msgid "videos" msgstr "视频" -#: parsers/i18n.py:50 +#: parsers/i18n.py:59 msgid "playlists" msgstr "精选" -#: parsers/i18n.py:51 +#: parsers/i18n.py:60 msgid "related" msgstr "粉丝可能还会喜欢" -#: parsers/i18n.py:52 +#: parsers/i18n.py:61 msgid "episodes" msgstr "最新分集" -#: parsers/i18n.py:53 +#: parsers/i18n.py:62 msgid "podcasts" msgstr "播客" diff --git a/ytmusicapi/locales/zh_TW/LC_MESSAGES/base.po b/ytmusicapi/locales/zh_TW/LC_MESSAGES/base.po index 75e833ea..f531c827 100644 --- a/ytmusicapi/locales/zh_TW/LC_MESSAGES/base.po +++ b/ytmusicapi/locales/zh_TW/LC_MESSAGES/base.po @@ -18,65 +18,77 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: parsers/i18n.py:32 +msgid "album" +msgstr "專輯" + +#: parsers/i18n.py:33 msgid "artist" msgstr "藝人" -#: parsers/i18n.py:33 +#: parsers/i18n.py:34 msgid "playlist" msgstr "播放清單" -#: parsers/i18n.py:34 +#: parsers/i18n.py:35 msgid "song" msgstr "歌曲" -#: parsers/i18n.py:35 +#: parsers/i18n.py:36 msgid "video" msgstr "影片" -#: parsers/i18n.py:36 +#: parsers/i18n.py:37 msgid "station" msgstr "電台" -#: parsers/i18n.py:37 +#: parsers/i18n.py:38 msgid "profile" msgstr "個人資料" -#: parsers/i18n.py:38 +#: parsers/i18n.py:39 msgid "podcast" msgstr "" -#: parsers/i18n.py:39 +#: parsers/i18n.py:40 msgid "episode" msgstr "單集" #: parsers/i18n.py:46 +msgid "single" +msgstr "單曲" + +#: parsers/i18n.py:47 +msgid "ep" +msgstr "ep" + +#: parsers/i18n.py:55 msgid "albums" msgstr "專輯" -#: parsers/i18n.py:47 +#: parsers/i18n.py:56 msgid "singles" msgstr "單曲" -#: parsers/i18n.py:48 +#: parsers/i18n.py:57 msgid "shows" msgstr "有聲書與節目" -#: parsers/i18n.py:49 +#: parsers/i18n.py:58 msgid "videos" msgstr "影片" -#: parsers/i18n.py:50 +#: parsers/i18n.py:59 msgid "playlists" msgstr "精選收錄" -#: parsers/i18n.py:51 +#: parsers/i18n.py:60 msgid "related" msgstr "粉絲可能也會喜歡" -#: parsers/i18n.py:52 +#: parsers/i18n.py:61 msgid "episodes" msgstr "最新集數" -#: parsers/i18n.py:53 +#: parsers/i18n.py:62 msgid "podcasts" msgstr "Podcast" diff --git a/ytmusicapi/mixins/search.py b/ytmusicapi/mixins/search.py index 0c831b80..70f6e91b 100644 --- a/ytmusicapi/mixins/search.py +++ b/ytmusicapi/mixins/search.py @@ -208,7 +208,6 @@ def search( for res in section_list: result_type = category = None - search_result_types = self.parser.get_search_result_types() if "musicCardShelfRenderer" in res: top_result = parse_top_result( @@ -234,8 +233,10 @@ def search( else: continue + api_search_result_types = self.parser.get_api_result_types() + search_results.extend( - parse_search_results(shelf_contents, search_result_types, result_type, category) + parse_search_results(shelf_contents, api_search_result_types, result_type, category) ) if filter: # if filter is set, there are continuations @@ -244,7 +245,7 @@ def request_func(additionalParams): return self._send_request(endpoint, body, additionalParams) def parse_func(contents): - return parse_search_results(contents, search_result_types, result_type, category) + return parse_search_results(contents, api_search_result_types, result_type, category) search_results.extend( get_continuations( diff --git a/ytmusicapi/parsers/i18n.py b/ytmusicapi/parsers/i18n.py index 6b1bbf43..6ac8e75d 100644 --- a/ytmusicapi/parsers/i18n.py +++ b/ytmusicapi/parsers/i18n.py @@ -40,6 +40,14 @@ def get_search_result_types(self): _("episode"), ] + @i18n + def get_api_result_types(self): + return [ + _("single"), + _("ep"), + *self.get_search_result_types(), + ] + @i18n def parse_channel_contents(self, results: list) -> dict: # type: ignore[name-defined] diff --git a/ytmusicapi/parsers/search.py b/ytmusicapi/parsers/search.py index df62eb1b..90462aed 100644 --- a/ytmusicapi/parsers/search.py +++ b/ytmusicapi/parsers/search.py @@ -4,8 +4,18 @@ from ._utils import * from .songs import * -UNIQUE_RESULT_TYPES = ["artist", "playlist", "song", "video", "station", "profile", "podcast", "episode"] -ALL_RESULT_TYPES = ["album", *UNIQUE_RESULT_TYPES] +ALL_RESULT_TYPES = [ + "album", + "artist", + "playlist", + "song", + "video", + "station", + "profile", + "podcast", + "episode", +] +API_RESULT_TYPES = ["single", "ep", *ALL_RESULT_TYPES] def get_search_result_type(result_type_local, result_types_local): @@ -61,7 +71,7 @@ def parse_top_result(data, search_result_types): return search_result -def parse_search_result(data, search_result_types, result_type, category): +def parse_search_result(data, api_search_result_types, result_type, category): default_offset = (not result_type or result_type == "album") * 2 search_result = {"category": category} video_type = nav(data, [*PLAY_BUTTON, "playNavigationEndpoint", *NAVIGATION_VIDEO_TYPE], True) @@ -159,7 +169,7 @@ def parse_search_result(data, search_result_types, result_type, category): flex_item = get_flex_column_item(data, 1) runs = flex_item["text"]["runs"] # ignore the first run if it is a type specifier (like "Single" or "Album") - runs_offset = (len(runs[0]) == 1 and runs[0]["text"].lower() in search_result_types) * 2 + runs_offset = (len(runs[0]) == 1 and runs[0]["text"].lower() in api_search_result_types) * 2 song_info = parse_song_runs(runs[runs_offset:]) search_result.update(song_info) @@ -188,9 +198,10 @@ def parse_album_playlistid_if_exists(data: dict[str, Any]) -> Optional[str]: return nav(data, WATCH_PID, True) or nav(data, WATCH_PLAYLIST_ID, True) if data else None -def parse_search_results(results, search_result_types, resultType=None, category=None): +def parse_search_results(results, api_search_result_types, resultType=None, category=None): return [ - parse_search_result(result[MRLIR], search_result_types, resultType, category) for result in results + parse_search_result(result[MRLIR], api_search_result_types, resultType, category) + for result in results ]