From 1f95f0231d77682031ae95b4e058fd893207d26e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BE=9D=E7=91=AA=E8=B2=93?= Date: Sun, 2 Aug 2026 15:44:38 +0800 Subject: [PATCH] Export human-readable songs and artists reports to the derived data layer --- CLAUDE.md | 3 +- README.md | 1 + data/derived/artists.csv | 470 ++++++++++++ data/derived/songs.csv | 884 ++++++++++++++++++++++ docs/decision_log.md | 7 + docs/project_structure.md | 16 +- docs/research_plan.md | 11 +- tools/src/pop_fem_audit_tools/build_db.py | 176 ++++- tools/tests/test_build_db.py | 163 +++- 9 files changed, 1711 insertions(+), 20 deletions(-) create mode 100644 data/derived/artists.csv create mode 100644 data/derived/songs.csv diff --git a/CLAUDE.md b/CLAUDE.md index cd6f7f6..3562b45 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -24,7 +24,8 @@ - `data/source/` holds the immutable hand-placed raw files; `data/captures/` is written only by the fetch commands and the private import script; `data/manual/` is written only by the - user's own hand. + user's own hand; `data/derived/` is written only by the + `build-db` subcommand. - Full lyrics are copyrighted: they stay in `data/captures/lyrics/` (gitignored) and must never be committed or reproduced in full anywhere in the repo. diff --git a/README.md b/README.md index 0a841d8..35dc7ed 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,7 @@ Hot 100(2016–2025)為例的內容分析。 執行子命令,必要輸入以位置引數、選擇性輸入以選項給定(如 `pop-fem-audit-tools build-db ../data/source/yearend_hot100_2016_2025.csv + ../data/derived --lyrics-dir ../data/captures/lyrics --wikidata-csv ../data/captures/artists_wikidata.csv --overrides-csv ../data/manual/artists_overrides.csv`)。 diff --git a/data/derived/artists.csv b/data/derived/artists.csv new file mode 100644 index 0000000..b585e91 --- /dev/null +++ b/data/derived/artists.csv @@ -0,0 +1,470 @@ +Name,Wikidata QID,Gender,Type,Genre,Country,Songs +070 Shake,,,,,,Escapism (2023#48) +2 Chainz,,,,,,Big Bank (2018#63) +21 Savage,,,,,,A Lot (2019#42)|Bank Account (2017#48)|Bartier Cardi (2018#61)|Creepin' (2023#5)|Good Good (2024#79)|Jimmy Cooks (2022#33)|Knife Talk (2021#86/2022#60)|Peaches & Eggplants (2023#94)|Redrum (2024#42)|Rich Flex (2023#14)|Rockstar (2017#56/2018#5)|Spin Bout U (2023#43) +24kGoldn,,,,,,Mood (2020#47/2021#4) +42 Dugg,,,,,,We Paid (2020#57) +4batz,,,,,,Act II: Date @ 8 (2024#80) +5 Seconds of Summer,,,,,,Youngblood (2018#36/2019#33) +50 Cent,,,,,,The Woo (2020#78) +6ix9ine,,,,,,FEFE (2018#31)|Gummo (2018#56)|Swervin (2019#82) +6LACK,,,,,,Calling My Phone (2021#33) +A Boogie wit da Hoodie,,,,,,Drowning (2017#81)|Look Back At It (2019#41)|Swervin (2019#82) +A$AP Ferg,,,,,,Plain Jane (2018#74) +A$AP Rocky,,,,,,No Limit (2018#30) +Adassa,,,,,,We Don't Talk About Bruno (2022#24) +Adele,,,,,,Easy On Me (2022#4)|Hello (2016#7)|Oh My God (2022#72)|Send My Love (To Your New Lover) (2016#26)|Water Under The Bridge (2017#88)|When We Were Young (2016#83) +AJR,,,,,,Bang! (2021#56) +Alessia Cara,,,,,,1-800-273-8255 (2017#31/2018#84)|Here (2016#39)|Scars To Your Beautiful (2017#30)|Stay (2017#17) +Alex Warren,,,,,,Ordinary (2025#7) +Amine,,,,,,Caroline (2017#60) +Anderson .Paak,,,,,,Leave The Door Open (2021#7)|Smokin Out The Window (2022#41) +Andrew Choi,,,,,,Free (2025#92)|Soda Pop (2025#61)|Your Idol (2025#54) +Anne-Marie,,,,,,Friends (2018#26)|Rockabye (2017#44) +Aqua,,,,,,Barbie World (2023#46) +Ariana Grande,,,,,,"34+35 (2021#21)|7 Rings (2019#7)|Boyfriend (2019#98)|Break Up With Your Girlfriend, I'm Bored (2019#36)|Breathin (2019#72)|Dangerous Woman (2016#36)|Die For You (2023#7)|God Is A Woman (2018#62)|Into You (2016#51)|No Tears Left To Cry (2018#20)|Positions (2021#14)|pov (2021#87)|Rain On Me (2020#48)|Save Your Tears (2021#2/2022#40)|Side To Side (2016#77/2017#43)|Stuck With U (2020#80)|Thank U, Next (2019#12)|We Can't Be Friends (Wait For Your Love) (2024#26)|Yes, And? (2024#92)" +Arizona Zervas,,,,,,Roxanne (2020#16) +Artemas,,,,,,I Like The Way You Kiss Me (2024#63) +ATR Son Son,,,,,,Rags2Riches (2020#90) +Audrey Nuna,,,,,,Golden (2025#25)|How It's Done (2025#68)|Takedown (2025#93)|What It Sounds Like (2025#83) +Ava Max,,,,,,Kings & Queens (2021#73)|Sweet But Psycho (2019#23) +Avery Anna,,,,,,Indigo (2025#49) +Ayo,,,,,,Rolex (2017#61) +AzChike,,,,,,Peekaboo (2025#53) +Bad Bunny,,,,,,Baile Inolvidable (2025#70)|Dakiti (2021#28)|Despues de La Playa (2022#78)|DTMF (2025#51)|Efecto (2022#69)|EOO (2025#77)|I Like It (2018#7/2019#69)|Me Porto Bonito (2022#20)|MIA (2019#44)|Monaco (2024#82)|Moscow Mule (2022#44)|Nuevayol (2025#89)|Ojitos Lindos (2022#87)|Party (2022#77)|Te Bote (2018#81)|Titi Me Pregunto (2022#22)|Un x100to (2023#49)|Where She Goes (2023#72)|Yonaguni (2021#83) +Bailey Zimmerman,,,,,,All The Way (2025#33)|Backup Plan (2025#80)|Fall In Love (2022#54)|Religiously (2023#42)|Rock And A Hard Place (2022#70/2023#16)|Where It Ends (2024#87) +Bastille,,,,,,Happier (2018#80/2019#6) +Bazzi,,,,,,Beautiful (2019#95)|Mine (2018#21) +beabadoobee,,,,,,Death Bed (2020#43) +Bebe Rexha,,,,,,"I'm Good (Blue) (2023#10)|Me, Myself & I (2016#19)|Meant To Be (2018#3)" +Becky G,,,,,,MAMIII (2022#59) +BENEE,,,,,,Supalonely (2020#84) +benny blanco,,,,,,Eastside (2018#77/2019#17)|Lonely (2021#65) +Benson Boone,,,,,,Beautiful Things (2024#3/2025#6)|Mystical Magical (2025#47)|Slow It Down (2024#41)|Sorry I'm Here For Someone Else (2025#37) +Beyoncé,,,,,,Break My Soul (2022#38)|Cuff It (2023#29)|Mi Gente (2017#50/2018#99)|Sorry (2016#71)|Texas Hold 'Em (2024#32) +Big Sean,,,,,,Big Bank (2018#63)|Bounce Back (2017#35)|Feels (2017#74) +BigXthaPlug,,,,,,All The Way (2025#33) +Billie Eilish,,,,,,Bad Guy (2019#4/2020#46)|Birds Of A Feather (2024#15/2025#5)|Bury A Friend (2019#73)|Everything I Wanted (2020#18)|Happier Than Ever (2021#94)|Lunch (2024#48)|Therefore I Am (2021#25)|What Was I Made For? (2023#81/2024#46)|When The Party's Over (2019#67)|Wildflower (2024#89/2025#26) +Billy Ray Cyrus,,,,,,Old Town Road (2019#1) +Bipolar Sunshine,,,,,,Middle (2016#80) +Bizarrap,,,,,,"Bzrp Music Sessions, Vol. 53 (2023#96)" +Black Eyed Peas,,,,,,RITMO (Bad Boys For Life) (2020#50) +blackbear,,,,,,Do Re Mi (2017#98)|Hot Girl Bummer (2020#26)|My Ex's Best Friend (2021#23) +Blake Shelton,,,,,,God's Country (2019#53)|Nobody But You (2020#52)|Pour Me A Drink (2024#76) +Blanco Brown,,,,,,Just The Way (2021#88)|The Git Up (2019#56) +BlocBoy JB,,,,,,Look Alive (2018#23) +Blueface,,,,,,Thotiana (2019#47) +Bobby Helms,,,,,,Jingle Bell Rock (2022#86/2023#68/2024#68/2025#81) +Bomba Estereo,,,,,,Ojitos Lindos (2022#87) +Bradley Cooper,,,,,,Shallow (2019#19) +Brandon Lake,,,,,,Hard Fought Hallelujah (2025#84) +Brenda Lee,,,,,,Rockin' Around The Christmas Tree (2021#92/2022#80/2023#60/2024#59/2025#67) +Brendon Urie,,,,,,ME! (2019#43) +Brett Young,,,,,,In Case You Didn't Know (2017#57)|Mercy (2018#95) +BRS Kash,,,,,,Throat Baby (Go Baby) (2021#97) +Bruno Mars,,,,,,24K Magic (2017#16)|APT. (2025#9)|Die With A Smile (2024#62/2025#1)|Finesse (2018#14)|Leave The Door Open (2021#7)|Please Me (2019#37)|Smokin Out The Window (2022#41)|That's What I Like (2017#3)|Wake Up In The Sky (2019#51) +Bryson Tiller,,,,,,Don't (2016#35)|Exchange (2016#53)|Whatever She Wants (2024#58)|Wild Thoughts (2017#18) +BTS,,,,,,Butter (2021#11)|Dynamite (2020#38/2021#41) +Burl Ives,,,,,,A Holly Jolly Christmas (2022#89/2023#71/2024#94) +Calboy,,,,,,Envy Me (2019#59) +Calvin Harris,,,,,,Feels (2017#74)|One Kiss (2018#68)|Slide (2017#71)|This Is What You Came For (2016#17) +Camila Cabello,,,,,,Bad Things (2017#41)|Bam Bam (2022#66)|Beautiful (2019#95)|Havana (2017#96/2018#4)|I Know What You Did Last Summer (2016#86)|My Oh My (2020#37)|Never Be The Same (2018#18)|Senorita (2019#15/2020#44) +Cardi B,,,,,,Bartier Cardi (2018#61)|Be Careful (2018#59)|Bodak Yellow (Money Moves) (2017#24/2018#54)|Clout (2019#87)|Finesse (2018#14)|Girls Like You (2018#10/2019#22)|I Like It (2018#7/2019#69)|Money (2019#38)|MotorSport (2018#34)|No Limit (2018#30)|Please Me (2019#37)|Put It On Da Floor Again (2023#98)|Taki Taki (2019#57)|Tomorrow 2 (2023#70)|Up (2021#26)|WAP (2020#24) +Carly Pearce,,,,,,I Hope You're Happy Now (2020#73) +Carolina Gaitan,,,,,,We Don't Talk About Bruno (2022#24) +Carrie Underwood,,,,,,I'm Gonna Love You (2025#78)|If I Didn't Love You (2021#85)|The Fighter (2017#100) +Cash Cobain,,,,,,Somebody Loves Me (2025#85) +Casper Magico,,,,,,Te Bote (2018#81) +Chance the Rapper,,,,,,Holy (2021#35)|I'm The One (2017#12)|No Brainer (2018#73) +Chappell Roan,,,,,,"Good Luck, Babe! (2024#18/2025#31)|Hot To Go! (2024#53)|Pink Pony Club (2025#10)" +Charlie Puth,,,,,,Attention (2017#22)|How Long (2018#65)|I Hope (2020#12/2021#40)|One Call Away (2016#43)|See You Again (2016#99)|We Don't Talk Anymore (2016#50) +Chase Rice,,,,,,Drinkin' Beer. Talkin' God. Amen. (2021#99)|Eyes On You (2019#96) +Cheat Codes,,,,,,No Promises (2017#91) +Chencho Corleone,,,,,,Me Porto Bonito (2022#20) +Childish Gambino,,,,,,Redbone (2017#25)|This Is America (2018#51) +Chris Brown,,,,,,Back To Sleep (2016#89)|Freaky Friday (2018#55)|Go Crazy (2020#39/2021#19)|No Guidance (2019#21/2020#36)|Residuals (2025#63)|Superhero (Heroes & Villains) (2023#38)|Under The Influence (2023#17) +Chris Stapleton,,,,,,Say Something (2018#85)|Starting Over (2021#53)|White Horse (2024#77)|You Should Probably Leave (2022#79) +Chris Young,,,,,,Famous Friends (2021#69) +City Girls,,,,,,Act Up (2019#68) +CJ,,,,,,Whoopty (2021#50) +CKay,,,,,,Love Nwantiti (Ah Ah Ah) (2022#55) +Clean Bandit,,,,,,Rockabye (2017#44) +Cody Johnson,,,,,,'Til You Can't (2022#34)|I'm Gonna Love You (2025#78)|The Painter (2024#98) +Coi Leray,,,,,,No More Parties (2021#79)|Players (2023#33) +Coldplay,,,,,,Adventure Of A Lifetime (2016#95)|Hymn For The Weekend (2016#73)|Something Just Like This (2017#5) +Cole Swindell,,,,,,Never Say Never (2022#92)|She Had Me At Heads Carolina (2022#46)|Single Saturday Night (2021#95) +Corey Kent,,,,,,Wild As Her (2023#93) +Cris Mj,,,,,,Gata Only (2024#52) +D.R.A.M.,,,,,,Broccoli (2016#34/2017#70) +DaBaby,,,,,,Baby (2019#84)|Beat Box (2021#44)|BOP (2020#29)|Cash Shit (2019#90)|Cry Baby (2021#77)|For The Night (2020#49/2021#32)|My Oh My (2020#37)|Rockstar (2020#5)|Suge (2019#24)|Whats Poppin (2020#13) +Daddy Yankee,,,,,,Con Calma (2019#65)|Despacito (2017#2)|Dura (2018#93) +Daft Punk,,,,,,I Feel It Coming (2017#34)|Starboy (2016#58/2017#20) +Dan,,,,,,"10,000 Hours (2020#23)|All To Myself (2019#97)|Glad You Exist (2021#64)|Speechless (2019#35)|Tequila (2018#32/2019#91)" +Daniel Caesar,,,,,,Peaches (2021#10) +Danny Chung,,,,,,Soda Pop (2025#61)|Your Idol (2025#54) +Darell,,,,,,Te Bote (2018#81) +Dasha,,,,,,Austin (2024#27) +David Guetta,,,,,,I'm Good (Blue) (2023#10) +David Kushner,,,,,,Daylight (2023#62) +Daya,,,,,,"Don't Let Me Down (2016#8)|Hide Away (2016#84)|Sit Still, Look Pretty (2016#78)" +dazy,,,,,,Sunroof (2022#29) +Dean Lewis,,,,,,Be Alright (2019#54) +Demi Lovato,,,,,,No Promises (2017#91)|Sorry Not Sorry (2017#47/2018#64) +Desiigner,,,,,,Panda (2016#6)|Tiimmy Turner (2016#98) +Diane Guerrero,,,,,,We Don't Talk About Bruno (2022#24) +Diplo,,,,,,Close To Me (2019#58) +DJ Khaled,,,,,,Every Chance I Get (2021#59)|For Free (2016#59)|I'm The One (2017#12)|No Brainer (2018#73)|Popstar (2020#66)|Wild Thoughts (2017#18) +DJ Snake,,,,,,Lean On (2016#85)|Let Me Love You (2016#47/2017#46)|Middle (2016#80)|Taki Taki (2019#57) +Djo,,,,,,End Of Beginning (2024#47) +DNCE,,,,,,Cake By The Ocean (2016#18) +Doechii,,,,,,Anxiety (2025#39)|Denial Is A River (2025#75)|What It Is (Block Boy) (2023#76) +Doja Cat,,,,,,34+35 (2021#21)|Agora Hills (2024#17)|Best Friend (2021#29)|Get Into It (Yuh) (2022#68)|I Like You (A Happier Song) (2022#26/2023#75)|Juicy (2020#87)|Kiss Me More (2021#6/2022#90)|Need To Know (2021#46/2022#18)|Paint The Town Red (2023#52/2024#21)|Say So (2020#11)|Streets (2021#67)|Vegas (2022#47)|Woman (2022#21)|You Right (2021#43/2022#45) +Don Toliver,,,,,,Lemonade (2021#51)|No Pole (2025#97) +Dove Cameron,,,,,,Boyfriend (2022#51) +Drake,,,,,,Act II: Date @ 8 (2024#80)|Both (2017#83)|Controlla (2016#41)|Fake Love (2017#37)|First Person Shooter (2024#61)|For Free (2016#59)|God's Plan (2018#1)|Going Bad (2019#18)|Hotline Bling (2016#24)|I'm Upset (2018#86)|IDGAF (2024#83)|In My Feelings (2018#9)|Jimmy Cooks (2022#33)|Jumpman (2016#37)|Knife Talk (2021#86/2022#60)|Laugh Now Cry Later (2020#41/2021#45)|Life Is Good (2020#7)|Look Alive (2018#23)|Meltdown (2023#97)|MIA (2019#44)|Money In The Grave (2019#34)|Nice For What (2018#11)|No Guidance (2019#21/2020#36)|Nokia (2025#24)|Nonstop (2018#52)|One Dance (2016#3)|Passionfruit (2017#65)|Pop Style (2016#82)|Popstar (2020#66)|Rich Baby Daddy (2024#45)|Rich Flex (2023#14)|Search & Rescue (2023#45)|Somebody Loves Me (2025#85)|Spin Bout U (2023#43)|Too Good (2016#29)|Toosie Slide (2020#32)|Wait For U (2022#11/2023#83)|Walk It Talk It (2018#43)|Wants And Needs (2021#47)|Way 2 Sexy (2021#48)|What's Next (2021#68)|Work (2016#4)|Yes Indeed (2018#25)|You're Mines Still (2021#58) +Dua Lipa,,,,,,Break My Heart (2020#33)|Cold Heart (PNAU Remix) (2022#10)|Dance The Night (2023#35/2024#100)|Don't Start Now (2020#4)|Houdini (2024#43)|IDGAF (2018#98)|Levitating (2021#1/2022#42)|New Rules (2018#16)|One Kiss (2018#68)|Sweetest Pie (2022#62)|We're Good (2021#90) +Duncan Laurence,,,,,,Arcade (2021#82) +Dustin Lynch,,,,,,Small Town Boy (2017#94) +Ed Sheeran,,,,,,Bad Habits (2021#15/2022#13)|Bam Bam (2022#66)|Beautiful People (2019#50)|Castle On The Hill (2017#40)|Eyes Closed (2023#64)|I Don't Care (2019#16)|Perfect (2018#2)|Shape Of You (2017#1/2018#71)|Shivers (2022#5) +EJAE,,,,,,Free (2025#92)|Golden (2025#25)|How It's Done (2025#68)|Takedown (2025#93)|What It Sounds Like (2025#83) +Ella Langley,,,,,,Weren't For The Wind (2025#71) +Ella Mai,,,,,,Boo'd Up (2018#15)|Trip (2018#92/2019#80) +Elle King,,,,,,Ex's & Oh's (2016#63) +Ellie Goulding,,,,,,Close To Me (2019#58)|On My Mind (2016#81) +Elton John,,,,,,Cold Heart (PNAU Remix) (2022#10) +Em Beihold,,,,,,Numb Little Bug (2022#32) +Emilee,,,,,,ily (2020#95) +Eminem,,,,,,Godzilla (2020#62)|Houdini (2024#39) +Encanto Cast,,,,,,We Don't Talk About Bruno (2022#24) +Eric Church,,,,,,Does To Me (2020#93)|Hell Of A View (2021#91) +ERNEST,,,,,,Cowgirls (2024#29)|Flower Shops (2022#96) +Eslabon Armado,,,,,,Ella Baila Sola (2023#26) +Fat Joe,,,,,,All The Way Up (2016#87) +Fetty Wap,,,,,,679 (2016#54)|All In My Head (Flex) (2016#93) +Fifth Harmony,,,,,,All In My Head (Flex) (2016#93)|Work From Home (2016#16) +Fifty Fifty,,,,,,Cupid (2023#44) +Flipp Dinero,,,,,,Leave Me Alone (2019#71) +Flo Milli,,,,,,Never Lose Me (2024#49) +Flo Rida,,,,,,My House (2016#14) +Florida Georgia Line,,,,,,Drinkin' Beer. Talkin' God. Amen. (2021#99)|H.O.L.Y. (2016#49)|Lil Bit (2021#70)|Meant To Be (2018#3)|Simple (2018#82)|Talk You Out Of It (2019#94) +FloyyMenor,,,,,,Gata Only (2024#52) +Flume,,,,,,Never Be Like You (2016#60) +Frank Ocean,,,,,,Slide (2017#71) +French Montana,,,,,,All The Way Up (2016#87)|Unforgettable (2017#15) +Fuerza Regida,,,,,,Bebe Dame (2023#73)|Tu Boda (2025#87) +Future,,,,,,Cold (2017#69)|Jumpman (2016#37)|King's Dead (2018#79)|Life Is Good (2020#7)|Like That (2024#14)|Low Life (2016#30)|Mask Off (2017#14)|Puffin On Zootiez (2022#84)|Pushin P (2022#48)|Superhero (Heroes & Villains) (2023#38)|Type Shit (2024#51)|Wait For U (2022#11/2023#83)|Way 2 Sexy (2021#48)|Wicked (2016#97) +G-Eazy,,,,,,"Him & I (2018#45)|Me, Myself & I (2016#19)|No Limit (2018#30)" +Gabby Barrett,,,,,,I Hope (2020#12/2021#40)|The Good Ones (2021#62) +GAYLE,,,,,,abcdefu (2022#17) +Gigi Perez,,,,,,Sailor Song (2025#36) +Giveon,,,,,,Heartbreak Anniversary (2021#31)|Peaches (2021#10) +Glass Animals,,,,,,Heat Waves (2021#16/2022#1) +GloRilla,,,,,,Sticky (2025#41)|Tomorrow 2 (2023#70)|Wanna Be (2024#40)|Whatchu Kno About Me (2025#48)|Yeah Glo! (2024#44) +gnash,,,,,,I Hate U I Love U (2016#38)|Lights Down Low (2018#66) +Gracie Abrams,,,,,,That's So True (2025#14) +Grey,,,,,,Starving (2016#94/2017#82)|The Middle (2018#8) +Grupo Frontera,,,,,,Bebe Dame (2023#73)|Un x100to (2023#49) +Gucci Mane,,,,,,Black Beatles (2017#19)|Both (2017#83)|I Get The Bag (2017#93/2018#72)|Slippery (2017#86)|Wake Up In The Sky (2019#51) +Gunna,,,,,,Drip Too Hard (2019#26)|Fukumean (2023#31/2024#85)|Hot (2020#72)|Lemonade (2021#51)|Pushin P (2022#48)|What Happened To Virgil (2022#83) +Gus Dapperton,,,,,,Supalonely (2020#84) +Gwen Stefani,,,,,,Nobody But You (2020#52) +H.E.R.,,,,,,Slide (2020#99) +Hailee Steinfeld,,,,,,Starving (2016#94/2017#82) +Halsey,,,,,,Bad At Love (2018#27)|Closer (2016#10/2017#7)|Eastside (2018#77/2019#17)|Him & I (2018#45)|Now Or Never (2017#59)|Without Me (2019#3)|You Should Be Sad (2020#82) +HARDY,,,,,,Truck Bed (2024#67)|Wait In The Truck (2023#54) +Harry Styles,,,,,,Adore You (2020#6)|As It Was (2022#2/2023#15)|Late Night Talking (2022#25)|Sign Of The Times (2017#87)|Watermelon Sugar (2020#20) +Hozier,,,,,,Too Sweet (2024#10/2025#34) +Hudson Westbrook,,,,,,House Again (2025#95) +iann dior,,,,,,Mood (2020#47/2021#4) +Ice Spice,,,,,,"Barbie World (2023#46)|Boy's A Liar, Pt. 2 (2023#20)|Karma (2023#27)|Princess Diana (2023#69)" +Imagine Dragons,,,,,,Believer (2017#9/2018#100)|Enemy (2022#15)|Natural (2018#69)|Sucker For Pain (2016#68)|Thunder (2017#51/2018#22)|Whatever It Takes (2018#37) +Infared,,,,,,All The Way Up (2016#87) +Internet Money,,,,,,Lemonade (2021#51) +J Balvin,,,,,,I Like It (2018#7/2019#69)|Mi Gente (2017#50/2018#99)|RITMO (Bad Boys For Life) (2020#50)|X (2018#90) +J. Cole,,,,,,All My Life (2023#25)|First Person Shooter (2024#61)|Middle Child (2019#25)|The London (2019#64) +Jack Harlow,,,,,,First Class (2022#6)|Industry Baby (2021#24/2022#16)|Lovin On Me (2024#5)|Whats Poppin (2020#13) +Jake Scott,,,,,,She Likes It (2022#91) +James Arthur,,,,,,Say You Won't Let Go (2017#11) +James Bay,,,,,,Let It Go (2016#44) +James Blake,,,,,,King's Dead (2018#79) +Jason Aldean,,,,,,Got What I Got (2020#60)|If I Didn't Love You (2021#85)|Trouble With A Heartbreak (2022#88)|Try That In A Small Town (2023#66)|You Make It Easy (2018#70) +Jason Derulo,,,,,,Savage Love (Laxed - Siren Beat) (2020#35)|Swalla (2017#85) +Jawsh 685,,,,,,Savage Love (Laxed - Siren Beat) (2020#35) +Jay Rock,,,,,,King's Dead (2018#79) +Jay Z,,,,,,All The Way Up (2016#87)|Pop Style (2016#82) +Jelly Roll,,,,,,Hard Fought Hallelujah (2025#84)|I Am Not Okay (2024#75/2025#79)|Liar (2025#86)|Need A Favor (2023#34/2024#64)|Save Me (2024#65)|Wild Ones (2024#36) +Jeremih,,,,,,Oui (2016#55) +Jessica Darrow,,,,,,Surface Pressure (2022#53) +Jessie Murph,,,,,,Blue Strips (2025#52)|High Road (2024#81/2025#55)|Wild Ones (2024#36) +Jhay Cortez,,,,,,Dakiti (2021#28) +Jhene Aiko,,,,,,P*$$y Fairy (OTW) (2020#94) +JID,,,,,,Enemy (2022#15) +Jimin,,,,,,Who (2025#57) +JNR CHOI,,,,,,To The Moon! (2022#97) +John Legend,,,,,,Like I'm Gonna Lose You (2016#42) +Joji,,,,,,Glimpse Of Us (2022#52) +Jon Bellion,,,,,,All Time Low (2017#75) +Jon Pardi,,,,,,Last Night Lonely (2022#95) +Jonas Brothers,,,,,,Leave Before You Love Me (2021#63)|Only Human (2019#78/2020#77)|Sucker (2019#10) +Jordan Davis,,,,,,Buy Dirt (2022#49)|Next Thing You Know (2023#47)|What My World Spins Around (2023#91) +JP Saxe,,,,,,If The World Was Ending (2020#56) +Juice WRLD,,,,,,Bandit (2020#63)|Come & Go (2020#54)|Godzilla (2020#62)|Lucid Dreams (2018#12/2019#48)|Robbery (2019#100)|Suicidal (2020#75)|Wishing Well (2020#92) +Juicy J,,,,,,Powerglide (2018#97) +Julia Michaels,,,,,,If The World Was Ending (2020#56)|Issues (2017#29) +Jung Kook,,,,,,Seven (2023#82) +Justin Bieber,,,,,,"10,000 Hours (2020#23)|Anyone (2021#74)|Cold Water (2016#25)|Daisies (2025#60)|Despacito (2017#2)|Essence (2021#60/2022#64)|Ghost (2022#8)|Holy (2021#35)|I Don't Care (2019#16)|I'm The One (2017#12)|Intentions (2020#17)|Let Me Love You (2016#47/2017#46)|Lonely (2021#65)|Love Yourself (2016#1)|No Brainer (2018#73)|Peaches (2021#10)|Sorry (2016#2)|Stay (2021#12/2022#3)|Stuck With U (2020#80)|What Do You Mean? (2016#31)|Yummy (2020#58)" +Justin Timberlake,,,,,,Can't Stop The Feeling! (2016#9/2017#49)|Say Something (2018#85) +JVKE,,,,,,Golden Hour (2023#41) +Kacey Musgraves,,,,,,I Remember Everything (2023#74/2024#9) +Kai,,,,,,Never Be Like You (2016#60) +Kali Uchis,,,,,,Telepatia (2021#49) +Kaliii,,,,,,Area Codes (2023#88) +Kane Brown,,,,,,Be Like That (2020#88)|Bury Me In Georgia (2023#89)|Famous Friends (2021#69)|Good As You (2019#86)|Heaven (2018#53)|Homesick (2020#89)|Like I Love Country Music (2022#85)|Miles On It (2024#34)|One Mississippi (2022#99)|One Thing Right (2019#89)|Thank God (2023#23)|What Ifs (2017#72) +Kanye West,,,,,,Carnival (2024#38)|Pop Style (2016#82) +Karol G,,,,,,MAMIII (2022#59)|Provenza (2022#63)|TQG (2023#65) +Kate Bush,,,,,,Running Up That Hill (A Deal With God) (2022#23) +Katelyn Brown,,,,,,Thank God (2023#23) +Katy Perry,,,,,,Chained To The Rhythm (2017#73)|Con Calma (2019#65)|Feels (2017#74) +Kehlani,,,,,,Folded (2025#98) +Keith Urban,,,,,,One Too Many (2021#81)|The Fighter (2017#100) +Kendrick Lamar,,,,,,30 For 30 (2025#21)|All The Stars (2018#47)|DNA. (2017#62)|Don't Wanna Know (2017#38)|Euphoria (2024#66)|Humble. (2017#4)|King's Dead (2018#79)|Like That (2024#14)|Love. (2018#50)|Loyalty. (2017#66)|Luther (2025#2)|Not Like Us (2024#6/2025#17)|Peekaboo (2025#53)|Pray For Me (2018#40)|Squabble Up (2025#20)|TV Off (2025#15) +Kenny Chesney,,,,,,Get Along (2018#87) +Kent Jones,,,,,,Don't Mind (2016#48) +Kesha,,,,,,Praying (2017#67) +Kevin Gates,,,,,,2 Phones (2016#57)|Really Really (2016#92) +Kevin Woo,,,,,,Soda Pop (2025#61)|Your Idol (2025#54) +Khalid,,,,,,1-800-273-8255 (2017#31/2018#84)|Be Like That (2020#88)|Beautiful People (2019#50)|Better (2019#20)|Eastside (2018#77/2019#17)|Location (2017#21)|Love Lies (2018#19/2019#88)|Talk (2019#8)|Young Dumb & Broke (2017#78/2018#67) +Kid Cudi,,,,,,The Scotts (2020#86) +Kiiara,,,,,,Gold (2016#52) +Kim Petras,,,,,,Unholy (2022#98/2023#11) +Kodak Black,,,,,,Drowning (2017#81)|Super Gremlin (2022#9)|Tunnel Vision (2017#55)|Wake Up In The Sky (2019#51)|What It Is (Block Boy) (2023#76)|ZEZE (2019#31) +Koe Wetzel,,,,,,High Road (2024#81/2025#55) +Kygo,,,,,,It Ain't Me (2017#27) +Kyla,,,,,,One Dance (2016#3) +KYLE,,,,,,iSpy (2017#28) +Lady Gaga,,,,,,Abracadabra (2025#56)|Bloody Mary (2023#99)|Die With A Smile (2024#62/2025#1)|Rain On Me (2020#48)|Shallow (2019#19) +Lainey Wilson,,,,,,Heart Like A Truck (2023#58)|Never Say Never (2022#92)|Save Me (2024#65)|Things A Man Oughta Know (2021#96)|Wait In The Truck (2023#54)|Watermelon Moonshine (2023#100) +Latto,,,,,,Big Energy (2022#7)|Put It On Da Floor Again (2023#98)|Seven (2023#82) +Lauren Alaina,,,,,,What Ifs (2017#72) +Lauren Daigle,,,,,,You Say (2019#60) +Lauren Spencer-Smith,,,,,,Fingers Crossed (2022#75) +Lauv,,,,,,I Like Me Better (2018#35) +Lee Brice,,,,,,I Hope You're Happy Now (2020#73)|One Of Them Girls (2020#68)|Rumor (2019#81) +Lefty Gunplay,,,,,,TV Off (2025#15) +Leon Thomas,,,,,,Mutt (2025#22) +Lewis Capaldi,,,,,,Before You Go (2020#21)|Someone You Loved (2019#27/2020#10) +Liam Payne,,,,,,Strip That Down (2017#36) +Lil Baby,,,,,,Baby (2019#84)|Close Friends (2019#74)|Drip Too Hard (2019#26)|Emotionally Scarred (2020#74)|Every Chance I Get (2021#59)|For The Night (2020#49/2021#32)|In A Minute (2022#43)|On Me (2021#36)|Sum 2 Prove (2020#79)|The Bigger Picture (2020#76)|Wants And Needs (2021#47)|We Paid (2020#57)|Woah (2020#42)|Yes Indeed (2018#25) +Lil Dicky,,,,,,Freaky Friday (2018#55) +Lil Durk,,,,,,All My Life (2023#25)|Back In Blood (2021#39)|Broadway Girls (2022#81)|Every Chance I Get (2021#59)|Laugh Now Cry Later (2020#41/2021#45)|No More Parties (2021#79)|What Happened To Virgil (2022#83) +Lil Mosey,,,,,,Blueberry Faygo (2020#27) +Lil Nas X,,,,,,Industry Baby (2021#24/2022#16)|Montero (Call Me By Your Name) (2021#9)|Old Town Road (2019#1)|Panini (2019#40/2020#71)|Thats What I Want (2022#14) +Lil Pump,,,,,,Gucci Gang (2018#44) +Lil Tecca,,,,,,Dark Thoughts (2025#96)|Ran$om (2019#28) +Lil Tjay,,,,,,Calling My Phone (2021#33)|Mood Swings (2020#81)|Pop Out (2019#45) +Lil Uzi Vert,,,,,,Bad And Boujee (2017#6)|Everybody (2024#71)|Just Wanna Rock (2023#28)|XO TOUR Llif3 (2017#13) +Lil Wayne,,,,,,I'm The One (2017#12)|Sticky (2025#41)|Sucker For Pain (2016#68)|Whats Poppin (2020#13) +Lil Yachty,,,,,,Broccoli (2016#34/2017#70)|iSpy (2017#28) +Lizzo,,,,,,About Damn Time (2022#12)|Good As Hell (2020#31)|Truth Hurts (2019#13/2020#55) +Logic,,,,,,1-800-273-8255 (2017#31/2018#84)|Sucker For Pain (2016#68) +Lola Young,,,,,,Like Him (2025#62)|Messy (2025#28) +Luis Fonsi,,,,,,Despacito (2017#2) +Lukas Graham,,,,,,7 Years (2016#12) +Luke Bryan,,,,,,Buy Dirt (2022#49)|Knockin' Boots (2019#79)|One Margarita (2020#70) +Luke Combs,,,,,,"Ain't No Love In Oklahoma (2024#37)|Backup Plan (2025#80)|Beautiful Crazy (2019#46)|Beer Never Broke My Heart (2019#63)|Better Together (2021#57)|Does To Me (2020#93)|Doin' This (2022#71)|Even Though I'm Leaving (2020#85)|Fast Car (2023#8/2024#23)|Forever After All (2021#18)|Going, Going, Gone (2023#59)|Hurricane (2017#76)|Love You Anyway (2023#36)|Lovin' On You (2020#97)|One Number Away (2018#96)|The Kind Of Love We Make (2022#36)|Where The Wild Things Are (2024#70)" +Machine Gun Kelly,,,,,,Bad Things (2017#41)|My Ex's Best Friend (2021#23) +Maddie,,,,,,Die From A Broken Heart (2020#65) +Mae Muller,,,,,,Better Days (2022#73) +Major Lazer,,,,,,Cold Water (2016#25)|Lean On (2016#85) +Maren Morris,,,,,,Chasing After You (2021#61)|Circles Around This Town (2022#100)|The Bones (2020#9)|The Middle (2018#8) +Mariah Carey,,,,,,All I Want For Christmas Is You (2020#67/2021#78/2022#65/2023#55/2024#54/2025#59) +Mariah The Scientist,,,,,,Burning Blue (2025#58) +Marian Hill,,,,,,Down (2017#90) +Maroon 5,,,,,,Beautiful Mistakes (2021#34)|Cold (2017#69)|Don't Wanna Know (2017#38)|Girls Like You (2018#10/2019#22)|Memories (2020#8)|Wait (2018#58)|What Lovers Do (2017#97/2018#89) +Marshmello,,,,,,Come & Go (2020#54)|Friends (2018#26)|Happier (2018#80/2019#6)|Leave Before You Love Me (2021#63)|Miles On It (2024#34)|One Thing Right (2019#89)|Wolves (2018#60) +Masked Wolf,,,,,,Astronaut In The Ocean (2021#20) +Mauro Castillo,,,,,,We Don't Talk About Bruno (2022#24) +MAX,,,,,,Lights Down Low (2018#66) +Meek Mill,,,,,,Going Bad (2019#18) +Megan Moroney,,,,,,Am I Okay? (2025#66)|Tennessee Orange (2023#67) +Megan Thee Stallion,,,,,,34+35 (2021#21)|Beautiful Mistakes (2021#34)|Body (2021#54)|Cash Shit (2019#90)|Cry Baby (2021#77)|Hot Girl Summer (2019#93)|Savage (2020#15)|Sweetest Pie (2022#62)|Thot Shit (2021#71)|Wanna Be (2024#40)|WAP (2020#24) +Meghan Trainor,,,,,,Like I'm Gonna Lose You (2016#42)|Made You Look (2023#53)|Me Too (2016#62)|No (2016#45) +Metro Boomin,,,,,,Creepin' (2023#5)|Like That (2024#14)|Ric Flair Drip (2018#38)|Superhero (Heroes & Villains) (2023#38)|Type Shit (2024#51) +Migos,,,,,,Bad And Boujee (2017#6)|I Get The Bag (2017#93/2018#72)|MotorSport (2018#34)|Pure Water (2019#55)|Slide (2017#71)|Slippery (2017#86)|Stir Fry (2018#48)|T-Shirt (2017#52)|Walk It Talk It (2018#43) +Miguel,,,,,,Sky Walker (2018#75)|Sure Thing (2023#24) +Mike Posner,,,,,,I Took A Pill In Ibiza (2016#15) +Miley Cyrus,,,,,,Flowers (2023#2/2024#69)|Malibu (2017#89) +Miranda Lambert,,,,,,Bluebird (2020#91) +MNEK,,,,,,Never Forget You (2016#46) +Moneybagg Yo,,,,,,Said Sum (2020#98)|Time Today (2021#76)|Wockesha (2021#42) +Mooski,,,,,,Track Star (2021#75) +Morgan Wallen,,,,,,20 Cigarettes (2025#90)|Ain't That Some (2023#92)|Broadway Girls (2022#81)|Chasin' You (2020#34)|Cowgirls (2024#29)|Everything I Love (2023#56)|Flower Shops (2022#96)|I Ain't Coming Back (2025#72)|I Got Better (2025#40)|I Had Some Help (2024#4/2025#8)|I Wrote The Book (2023#95)|I'm The Problem (2025#13)|Just In Case (2025#18)|Last Night (2023#1/2024#28)|Lies Lies Lies (2024#50)|Love Somebody (2025#11)|More Than My Hometown (2020#96)|One Thing At A Time (2023#37)|Sand In My Boots (2022#58)|Smile (2025#64)|Superman (2025#99)|Thinkin' Bout Me (2023#19/2024#31)|Thought You Should Know (2023#22)|Wasted On You (2022#19)|What I Want (2025#27)|Whiskey Glasses (2019#52)|You Proof (2022#27/2023#12) +Muni Long,,,,,,Hrs And Hrs (2022#57)|Made For Me (2024#56) +Murda Beatz,,,,,,FEFE (2018#31) +Mustard,,,,,,Ballin' (2020#25)|High Fashion (2020#40)|Pure Water (2019#55) +Myles Smith,,,,,,Stargazing (2024#73/2025#29) +Måneskin,,,,,,Beggin' (2021#66) +MØ,,,,,,Cold Water (2016#25)|Lean On (2016#85) +N*E*R*D,,,,,,Lemon (2018#83) +Natanael Cano,,,,,,PRC (2023#90) +Nate Smith,,,,,,Bulletproof (2024#96)|World On Fire (2024#90) +NAV,,,,,,Lemonade (2021#51) +Neckwav,,,,,,Soda Pop (2025#61)|Your Idol (2025#54) +NEIKED,,,,,,Better Days (2022#73) +Nelly,,,,,,Lil Bit (2021#70) +Neton Vega,,,,,,Loco (2025#100) +NF,,,,,,Let You Down (2018#29) +Niall Horan,,,,,,Slow Hands (2017#32) +Nick Jonas,,,,,,Close (2016#66) +Nicki Minaj,,,,,,Barbie World (2023#46)|Big Bank (2018#63)|Down In The DM (2016#69)|Everybody (2024#71)|FEFE (2018#31)|FTCU (2024#88)|Hot Girl Summer (2019#93)|MotorSport (2018#34)|Plain Jane (2018#74)|Princess Diana (2023#69)|Rake It Up (2017#53)|Side To Side (2016#77/2017#43)|Super Freaky Girl (2022#56/2023#79)|Swalla (2017#85) +Nicky Jam,,,,,,Te Bote (2018#81)|X (2018#90) +Nicky Youre,,,,,,Sunroof (2022#29) +Niko Moon,,,,,,Good Time (2021#84) +Nio Garcia,,,,,,Te Bote (2018#81) +NLE Choppa,,,,,,Shotta Flow (2019#92)|Walk Em Down (2020#100) +Noah Kahan,,,,,,Dial Drunk (2023#80)|Stick Season (2024#11) +Normani,,,,,,Dancing With A Stranger (2019#14)|Love Lies (2018#19/2019#88) +O.T. Genasis,,,,,,Cut It (2016#91) +Offset,,,,,,Clout (2019#87)|Ric Flair Drip (2018#38)|Taste (2018#28)|ZEZE (2019#31) +Old Dominion,,,,,,Memory Lane (2023#87)|One Man Band (2020#59) +Oliver Anthony Music,,,,,,Rich Men North Of Richmond (2023#78) +Olivia O'Brien,,,,,,I Hate U I Love U (2016#38) +Olivia Rodrigo,,,,,,Deja Vu (2021#13)|Drivers License (2021#8)|Good 4 U (2021#5/2022#31)|Traitor (2021#38)|Vampire (2023#30/2024#57) +One Direction,,,,,,Perfect (2016#100) +OneRepublic,,,,,,I Ain't Worried (2022#37) +Oscar Maydon,,,,,,Tu Boda (2025#87) +Ozuna,,,,,,Taki Taki (2019#57)|Te Bote (2018#81) +P!nk,,,,,,Just Like Fire (2016#33)|One Too Many (2021#81)|Walk Me Home (2019#99)|What About Us (2017#84) +Panic! At The Disco,,,,,,"Hey Look Ma, I Made It (2019#61)|High Hopes (2019#11)" +Parker McCollum,,,,,,Burn It Down (2024#84)|Handle On You (2023#85) +Parmalee,,,,,,Just The Way (2021#88)|Take My Name (2022#82) +PARTYNEXTDOOR,,,,,,Somebody Loves Me (2025#85) +Paul Russell,,,,,,Lil Boo Thang (2024#78) +Peso Pluma,,,,,,Ella Baila Sola (2023#26)|La Bebe (2023#40)|Por Las Noches (2023#86)|PRC (2023#90) +Pharrell Williams,,,,,,Feels (2017#74) +Pinkfong,,,,,,Baby Shark (2019#75) +PinkPantheress,,,,,,"Boy's A Liar, Pt. 2 (2023#20)" +Playboi Carti,,,,,,Carnival (2024#38)|FE!N (2024#97)|Magnolia (2017#79)|Rather Lie (2025#91)|Timeless (2025#16)|Type Shit (2024#51) +PnB Rock,,,,,,Everyday We Lit (2017#95) +Polo G,,,,,,Better Days (2022#73)|Pop Out (2019#45)|Rapstar (2021#30) +Pooh Shiesty,,,,,,Back In Blood (2021#39)|Beat Box (2021#44) +Pop Smoke,,,,,,Dior (2020#83)|For The Night (2020#49/2021#32)|Mood Swings (2020#81)|The Woo (2020#78)|What You Know Bout Love (2021#22) +Portugal. The Man,,,,,,Feel It Still (2017#45/2018#33) +Post Malone,,,,,,Better Now (2018#13/2019#32)|Chemical (2023#57)|Circles (2019#62/2020#2)|Congratulations (2017#10)|Dial Drunk (2023#80)|Fortnight (2024#22)|Goodbyes (2019#30)|I Ain't Coming Back (2025#72)|I Fall Apart (2018#39)|I Had Some Help (2024#4/2025#8)|I Like You (A Happier Song) (2022#26/2023#75)|One Right Now (2022#30)|Pour Me A Drink (2024#76)|Psycho (2018#6)|Rockstar (2017#56/2018#5)|Sunflower (Spider-Man: Into The Spider-Verse) (2019#2)|White Iverson (2016#65)|Wow. (2019#5) +Powfu,,,,,,Death Bed (2020#43) +Project Pat,,,,,,Knife Talk (2021#86/2022#60) +Quavo,,,,,,Congratulations (2017#10)|I'm The One (2017#12)|Intentions (2020#17)|No Brainer (2018#73)|Strip That Down (2017#36) +Rae Sremmurd,,,,,,Black Beatles (2017#19)|Powerglide (2018#97)|Swang (2017#64) +Rauw Alejandro,,,,,,Party (2022#77)|Todo de Ti (2021#100) +Ravyn Lenae,,,,,,Love Me Not (2025#30) +RAYE,,,,,,Escapism (2023#48) +REI AMI,,,,,,Golden (2025#25)|How It's Done (2025#68)|Takedown (2025#93)|What It Sounds Like (2025#83) +Rema,,,,,,Calm Down (2023#6) +Remy Boyz,,,,,,679 (2016#54) +Remy Ma,,,,,,All The Way Up (2016#87) +Rhenzy Feliz,,,,,,We Don't Talk About Bruno (2022#24) +Rich The Kid,,,,,,Carnival (2024#38)|Plug Walk (2018#57) +Rick Ross,,,,,,Money In The Grave (2019#34) +Rihanna,,,,,,Lemon (2018#83)|Lift Me Up (2023#63)|Love On The Brain (2017#33)|Loyalty. (2017#66)|Needed Me (2016#13)|This Is What You Came For (2016#17)|Too Good (2016#29)|Wild Thoughts (2017#18)|Work (2016#4) +Riley Green,,,,,,Worst Way (2025#35) +Ritt Momney,,,,,,Put Your Records On (2021#93) +Rod Wave,,,,,,Heart On Ice (2020#51)|Rags2Riches (2020#90)|Tombstone (2021#98) +Roddy Ricch,,,,,,Ballin' (2020#25)|High Fashion (2020#40)|Late At Night (2021#72)|Rockstar (2020#5)|The Box (2020#3)|The Woo (2020#78)|Walk Em Down (2020#100) +ROSÉ,,,,,,APT. (2025#9) +Rozes,,,,,,Roses (2016#27) +Russell Dickerson,,,,,,Happen To Me (2025#69)|She Likes It (2022#91) +Ruth B,,,,,,Lost Boy (2016#76) +Ryan Hurd,,,,,,Chasing After You (2021#61) +Sabrina Carpenter,,,,,,Bed Chem (2025#45)|Espresso (2024#7/2025#12)|Feather (2024#25)|Manchild (2025#38)|Please Please Please (2024#16/2025#50)|Taste (2024#86/2025#19) +SAINt JHN,,,,,,Roses (2020#19) +Sam Barber,,,,,,Indigo (2025#49) +Sam Hunt,,,,,,Body Like A Back Road (2017#8)|Hard To Forget (2020#69) +Sam Smith,,,,,,Dancing With A Stranger (2019#14)|How Do You Sleep? (2019#83)|Too Good At Goodbyes (2017#77/2018#49)|Unholy (2022#98/2023#11) +Sam Tompkins,,,,,,To The Moon! (2022#97) +samUIL Lee,,,,,,Soda Pop (2025#61)|Your Idol (2025#54) +Saweetie,,,,,,Best Friend (2021#29)|My Type (2019#76) +Scotty McCreery,,,,,,Damn Strait (2022#93) +Sean Paul,,,,,,Cheap Thrills (2016#11)|Rockabye (2017#44) +Selena Gomez,,,,,,Back To You (2018#41)|Calm Down (2023#6)|Hands To Myself (2016#56)|It Ain't Me (2017#27)|Lose You To Love Me (2020#30)|Same Old Love (2016#40)|Taki Taki (2019#57)|We Don't Talk Anymore (2016#50)|Wolves (2018#60) +Sexyy Red,,,,,,Get It Sexyy (2024#55)|Rich Baby Daddy (2024#45)|Sticky (2025#41)|Whatchu Kno About Me (2025#48) +Shaboozey,,,,,,A Bar Song (Tipsy) (2024#2/2025#3)|Good News (2025#23) +SHAED,,,,,,Trampoline (2019#70/2020#53) +Shakira,,,,,,"Bzrp Music Sessions, Vol. 53 (2023#96)|TQG (2023#65)" +Shawn Mendes,,,,,,I Know What You Did Last Summer (2016#86)|If I Can't Have You (2019#29)|In My Blood (2018#46)|Mercy (2017#54)|Senorita (2019#15/2020#44)|Stitches (2016#23)|There's Nothing Holdin' Me Back (2017#23)|Treat You Better (2016#28/2017#92) +Shay,,,,,,"10,000 Hours (2020#23)|All To Myself (2019#97)|Glad You Exist (2021#64)|Speechless (2019#35)|Tequila (2018#32/2019#91)" +Sheck Wes,,,,,,Mo Bamba (2019#49) +Sia,,,,,,Cheap Thrills (2016#11) +Silento,,,,,,Watch Me (2016#88) +Skip Marley,,,,,,Chained To The Rhythm (2017#73) +Snow,,,,,,Con Calma (2019#65) +Social House,,,,,,Boyfriend (2019#98) +sombr,,,,,,Back To Friends (2025#44)|Undressed (2025#42) +SpotemGottem,,,,,,Beat Box (2021#44) +StaySolidRocky,,,,,,Party Girl (2020#64) +Stephanie Beatriz,,,,,,We Don't Talk About Bruno (2022#24) +Stephen Sanchez,,,,,,Until I Found You (2023#50) +Steve Lacy,,,,,,Bad Habit (2022#28/2023#39) +Summer Walker,,,,,,Good Good (2024#79)|Heart Of A Woman (2025#94) +surf mesa,,,,,,ily (2020#95) +Surfaces,,,,,,Sunday Best (2020#61) +Swae Lee,,,,,,Be Like That (2020#88)|Close To Me (2019#58)|Sunflower (Spider-Man: Into The Spider-Verse) (2019#2)|Unforgettable (2017#15) +SZA,,,,,,30 For 30 (2025#21)|All The Stars (2018#47)|BMF (2025#76)|Good Days (2021#52)|I Hate U (2022#50)|Kill Bill (2023#3)|Kiss Me More (2021#6/2022#90)|Love Galore (2017#80)|Luther (2025#2)|Nobody Gets Me (2023#77)|Rich Baby Daddy (2024#45)|Saturn (2024#19)|Shirt (2023#51)|Snooze (2023#9/2024#20)|What Lovers Do (2017#97/2018#89) +Tae,,,,,,Die From A Broken Heart (2020#65) +Tate McRae,,,,,,Exes (2024#93)|Greedy (2024#13)|Revolving Door (2025#82)|She's All I Wanna Be (2022#94)|Sports Car (2025#46)|What I Want (2025#27)|You Broke Me First. (2021#37) +Taylor Swift,,,,,,All Too Well (Taylor's Version) (2022#76)|Anti-Hero (2023#4)|Cruel Summer (2023#18/2024#12)|Delicate (2018#24)|Down Bad (2024#99)|Fortnight (2024#22)|I Can Do It With A Broken Heart (2024#35)|I Don't Wanna Live Forever (Fifty Shades Darker) (2017#26)|Is It Over Now? (Taylor's Version) [From The Vault] (2024#33)|Karma (2023#27)|Lavender Haze (2023#32)|Look What You Made Me Do (2017#39)|ME! (2019#43)|Wildest Dreams (2016#79)|Willow (2021#55)|You Need To Calm Down (2019#39) +Teddy Swims,,,,,,Bad Dreams (2025#74)|Lose Control (2024#1/2025#4) +Tems,,,,,,Essence (2021#60/2022#64)|Wait For U (2022#11/2023#83) +Teo,,,,,,Rolex (2017#61) +The Chainsmokers,,,,,,Closer (2016#10/2017#7)|Don't Let Me Down (2016#8)|Paris (2017#42)|Roses (2016#27)|Something Just Like This (2017#5) +The Kid LAROI,,,,,,Stay (2021#12/2022#3)|Without You (2021#17) +The Marias,,,,,,No One Noticed (2025#32) +The Weeknd,,,,,,Blinding Lights (2020#1/2021#3)|Call Out My Name (2018#78)|Can't Feel My Face (2016#72)|Creepin' (2023#5)|Cry For Me (2025#73)|Die For You (2023#7)|Heartless (2020#28)|I Feel It Coming (2017#34)|In The Night (2016#61)|Low Life (2016#30)|One Right Now (2022#30)|Pray For Me (2018#40)|Rather Lie (2025#91)|Save Your Tears (2021#2/2022#40)|Starboy (2016#58/2017#20)|Take My Breath (2021#89)|The Hills (2016#32)|Timeless (2025#16)|You Right (2021#43/2022#45) +Thomas Rhett,,,,,,After All The Bars Are Closed (2025#88)|Die A Happy Man (2016#64)|Look What God Gave Her (2019#85)|Marry Me (2018#76)|What's Your Country Song (2021#80) +Tim McGraw,,,,,,Humble And Kind (2016#96) +Tommy Richman,,,,,,Million Dollar Baby (2024#8) +Tones And I,,,,,,Dance Monkey (2020#14) +Toosii,,,,,,Favorite Song (2023#21) +Tory Lanez,,,,,,Luv (2016#70)|Say It (2016#74)|Whats Poppin (2020#13) +Tove Lo,,,,,,Close (2016#66) +Travis Scott,,,,,,Antidote (2016#75)|FE!N (2024#97)|Goosebumps (2017#68)|HIGHEST IN THE ROOM (2020#45)|Love Galore (2017#80)|Meltdown (2023#97)|Sicko Mode (2018#42/2019#9)|Sky Walker (2018#75)|The London (2019#64)|The Scotts (2020#86)|Type Shit (2024#51)|ZEZE (2019#31) +Trevor Daniel,,,,,,Falling (2020#22) +Tucker Wetmore,,,,,,Wind Up Missin' You (2024#95) +twenty one pilots,,,,,,Heathens (2016#21/2017#58)|Ride (2016#20)|Stressed Out (2016#5) +Ty Dolla $ign,,,,,,Carnival (2024#38)|Hot Girl Summer (2019#93)|Psycho (2018#6)|Sucker For Pain (2016#68)|Swalla (2017#85)|Work From Home (2016#16) +Tyga,,,,,,Juicy (2020#87)|Taste (2018#28) +Tyla,,,,,,Water (2024#24) +Tyler Cole,,,,,,Meet Me At Our Spot (2022#74) +Tyler Hubbard,,,,,,5 Foot 9 (2022#67)|Dancin' In The Country (2023#61) +"Tyler, The Creator",,,,,,Like Him (2025#62)|Sticky (2025#41) +Usher,,,,,,Good Good (2024#79)|No Limit (2016#90) +Victoria Monet,,,,,,On My Mama (2024#91) +Walker Hayes,,,,,,AA (2022#61)|Fancy Like (2021#27/2022#35) +Warren Zeiders,,,,,,Pretty Little Poison (2024#60) +Wham!,,,,,,Last Christmas (2023#84/2024#74/2025#65) +WILLOW,,,,,,Meet Me At Our Spot (2022#74) +Willy William,,,,,,Mi Gente (2017#50/2018#99) +Wiz Khalifa,,,,,,See You Again (2016#99)|Sucker For Pain (2016#68) +Wizkid,,,,,,Essence (2021#60/2022#64)|One Dance (2016#3) +X Ambassadors,,,,,,Sucker For Pain (2016#68)|Unsteady (2016#67) +Xavi,,,,,,La Diabla (2024#72) +XXXTENTACION,,,,,,Changes (2018#94)|Look At Me! (2017#99)|Moonlight (2018#88)|Sad! (2018#17) +Yeat,,,,,,IDGAF (2024#83) +YFN Lucci,,,,,,Everyday We Lit (2017#95) +YG,,,,,,Big Bank (2018#63)|Slide (2020#99) +YK Osiris,,,,,,Worth It (2019#77) +Yng Lvcas,,,,,,La Bebe (2023#40) +YNW Melly,,,,,,Murder On My Mind (2019#66)|Suicidal (2020#75) +Yo Gotti,,,,,,Down In The DM (2016#69)|Rake It Up (2017#53) +Young Dolph,,,,,,Cut It (2016#91) +Young Nudy,,,,,,Peaches & Eggplants (2023#94) +Young Thug,,,,,,Go Crazy (2020#39/2021#19)|Goodbyes (2019#30)|Havana (2017#96/2018#4)|Hot (2020#72)|No Limit (2016#90)|Pushin P (2022#48)|The London (2019#64)|Way 2 Sexy (2021#48) +YoungBoy Never Broke Again,,,,,,Bandit (2020#63)|Outside Today (2018#91) +Yung Bleu,,,,,,You're Mines Still (2021#58) +Zacari,,,,,,Love. (2018#50) +Zach Bryan,,,,,,I Remember Everything (2023#74/2024#9)|Pink Skies (2024#30)|Something In The Orange (2022#39/2023#13) +Zach Top,,,,,,I Never Lie (2025#43) +Zara Larsson,,,,,,Never Forget You (2016#46) +Zay Hilfigerrr,,,,,,Juju On That Beat (TZ Anthem) (2017#63) +Zayion McCall,,,,,,Juju On That Beat (TZ Anthem) (2017#63) +Zayn,,,,,,I Don't Wanna Live Forever (Fifty Shades Darker) (2017#26)|Pillowtalk (2016#22) +Zedd,,,,,,Starving (2016#94/2017#82)|Stay (2017#17)|The Middle (2018#8) diff --git a/data/derived/songs.csv b/data/derived/songs.csv new file mode 100644 index 0000000..503ad29 --- /dev/null +++ b/data/derived/songs.csv @@ -0,0 +1,884 @@ +Title,Artists,Positions +'Til You Can't,Cody Johnson,2022#34 +1-800-273-8255,Logic Featuring Alessia Cara & Khalid,2017#31/2018#84 +"10,000 Hours",Dan + Shay & Justin Bieber,2020#23 +2 Phones,Kevin Gates,2016#57 +20 Cigarettes,Morgan Wallen,2025#90 +24K Magic,Bruno Mars,2017#16 +30 For 30,SZA With Kendrick Lamar,2025#21 +34+35,Ariana Grande Feat. Doja Cat & Megan Thee Stallion,2021#21 +5 Foot 9,Tyler Hubbard,2022#67 +679,Fetty Wap Featuring Remy Boyz,2016#54 +7 Rings,Ariana Grande,2019#7 +7 Years,Lukas Graham,2016#12 +A Bar Song (Tipsy),Shaboozey,2024#2/2025#3 +A Holly Jolly Christmas,Burl Ives,2022#89/2023#71/2024#94 +A Lot,21 Savage,2019#42 +AA,Walker Hayes,2022#61 +abcdefu,GAYLE,2022#17 +About Damn Time,Lizzo,2022#12 +Abracadabra,Lady Gaga,2025#56 +Act II: Date @ 8,4batz Featuring Drake,2024#80 +Act Up,City Girls,2019#68 +Adore You,Harry Styles,2020#6 +Adventure Of A Lifetime,Coldplay,2016#95 +After All The Bars Are Closed,Thomas Rhett,2025#88 +Agora Hills,Doja Cat,2024#17 +Ain't No Love In Oklahoma,Luke Combs,2024#37 +Ain't That Some,Morgan Wallen,2023#92 +All I Want For Christmas Is You,Mariah Carey,2020#67/2021#78/2022#65/2023#55/2024#54/2025#59 +All In My Head (Flex),Fifth Harmony Featuring Fetty Wap,2016#93 +All My Life,Lil Durk Featuring J. Cole,2023#25 +All The Stars,Kendrick Lamar & SZA,2018#47 +All The Way,BigXthaPlug Featuring Bailey Zimmerman,2025#33 +All The Way Up,"Fat Joe, Remy Ma & Jay Z Featuring French Montana & Infared",2016#87 +All Time Low,Jon Bellion,2017#75 +All To Myself,Dan + Shay,2019#97 +All Too Well (Taylor's Version),Taylor Swift,2022#76 +Am I Okay?,Megan Moroney,2025#66 +Anti-Hero,Taylor Swift,2023#4 +Antidote,Travis Scott,2016#75 +Anxiety,Doechii,2025#39 +Anyone,Justin Bieber,2021#74 +APT.,ROSE & Bruno Mars,2025#9 +Arcade,Duncan Laurence,2021#82 +Area Codes,Kaliii,2023#88 +As It Was,Harry Styles,2022#2/2023#15 +Astronaut In The Ocean,Masked Wolf,2021#20 +Attention,Charlie Puth,2017#22 +Austin,Dasha,2024#27 +Baby,Lil Baby & DaBaby,2019#84 +Baby Shark,Pinkfong,2019#75 +Back In Blood,Pooh Shiesty Featuring Lil Durk,2021#39 +Back To Friends,sombr,2025#44 +Back To Sleep,Chris Brown,2016#89 +Back To You,Selena Gomez,2018#41 +Backup Plan,Bailey Zimmerman & Luke Combs,2025#80 +Bad And Boujee,Migos Featuring Lil Uzi Vert,2017#6 +Bad At Love,Halsey,2018#27 +Bad Dreams,Teddy Swims,2025#74 +Bad Guy,Billie Eilish,2019#4/2020#46 +Bad Habit,Steve Lacy,2022#28/2023#39 +Bad Habits,Ed Sheeran,2021#15/2022#13 +Bad Things,Machine Gun Kelly x Camila Cabello,2017#41 +Baile Inolvidable,Bad Bunny,2025#70 +Ballin',Mustard & Roddy Ricch,2020#25 +Bam Bam,Camila Cabello Featuring Ed Sheeran,2022#66 +Bandit,Juice WRLD & YoungBoy Never Broke Again,2020#63 +Bang!,AJR,2021#56 +Bank Account,21 Savage,2017#48 +Barbie World,Nicki Minaj & Ice Spice With Aqua,2023#46 +Bartier Cardi,Cardi B Featuring 21 Savage,2018#61 +Be Alright,Dean Lewis,2019#54 +Be Careful,Cardi B,2018#59 +Be Like That,Kane Brown With Swae Lee & Khalid,2020#88 +Beat Box,SpotemGottem Featuring Pooh Shiesty Or DaBaby,2021#44 +Beautiful,Bazzi Featuring Camila Cabello,2019#95 +Beautiful Crazy,Luke Combs,2019#46 +Beautiful Mistakes,Maroon 5 Featuring Megan Thee Stallion,2021#34 +Beautiful People,Ed Sheeran Featuring Khalid,2019#50 +Beautiful Things,Benson Boone,2024#3/2025#6 +Bebe Dame,Fuerza Regida X Grupo Frontera,2023#73 +Bed Chem,Sabrina Carpenter,2025#45 +Beer Never Broke My Heart,Luke Combs,2019#63 +Before You Go,Lewis Capaldi,2020#21 +Beggin',Maneskin,2021#66 +Believer,Imagine Dragons,2017#9/2018#100 +Best Friend,Saweetie Featuring Doja Cat,2021#29 +Better,Khalid,2019#20 +Better Days,NEIKED X Mae Muller X Polo G,2022#73 +Better Now,Post Malone,2018#13/2019#32 +Better Together,Luke Combs,2021#57 +Big Bank,"YG Featuring 2 Chainz, Big Sean & Nicki Minaj",2018#63 +Big Energy,Latto,2022#7 +Birds Of A Feather,Billie Eilish,2024#15/2025#5 +Black Beatles,Rae Sremmurd Featuring Gucci Mane,2017#19 +Blinding Lights,The Weeknd,2020#1/2021#3 +Bloody Mary,Lady Gaga,2023#99 +Blue Strips,Jessie Murph,2025#52 +Blueberry Faygo,Lil Mosey,2020#27 +Bluebird,Miranda Lambert,2020#91 +BMF,SZA,2025#76 +Bodak Yellow (Money Moves),Cardi B,2017#24/2018#54 +Body,Megan Thee Stallion,2021#54 +Body Like A Back Road,Sam Hunt,2017#8 +Boo'd Up,Ella Mai,2018#15 +BOP,DaBaby,2020#29 +Both,Gucci Mane Featuring Drake,2017#83 +Bounce Back,Big Sean,2017#35 +"Boy's A Liar, Pt. 2",PinkPantheress & Ice Spice,2023#20 +Boyfriend,Ariana Grande & Social House,2019#98 +Boyfriend,Dove Cameron,2022#51 +Break My Heart,Dua Lipa,2020#33 +Break My Soul,Beyonce,2022#38 +"Break Up With Your Girlfriend, I'm Bored",Ariana Grande,2019#36 +Breathin,Ariana Grande,2019#72 +Broadway Girls,Lil Durk Featuring Morgan Wallen,2022#81 +Broccoli,D.R.A.M. Featuring Lil Yachty,2016#34/2017#70 +Bulletproof,Nate Smith,2024#96 +Burn It Down,Parker McCollum,2024#84 +Burning Blue,Mariah The Scientist,2025#58 +Bury A Friend,Billie Eilish,2019#73 +Bury Me In Georgia,Kane Brown,2023#89 +Butter,BTS,2021#11 +Buy Dirt,Jordan Davis Featuring Luke Bryan,2022#49 +"Bzrp Music Sessions, Vol. 53",Bizarrap & Shakira,2023#96 +Cake By The Ocean,DNCE,2016#18 +Call Out My Name,The Weeknd,2018#78 +Calling My Phone,Lil Tjay Featuring 6LACK,2021#33 +Calm Down,Rema & Selena Gomez,2023#6 +Can't Feel My Face,The Weeknd,2016#72 +Can't Stop The Feeling!,Justin Timberlake,2016#9/2017#49 +Carnival,¥$: Ye & Ty Dolla $ign Featuring Rich The Kid & Playboi Carti,2024#38 +Caroline,Amine,2017#60 +Cash Shit,Megan Thee Stallion Featuring DaBaby,2019#90 +Castle On The Hill,Ed Sheeran,2017#40 +Chained To The Rhythm,Katy Perry Featuring Skip Marley,2017#73 +Changes,XXXTENTACION,2018#94 +Chasin' You,Morgan Wallen,2020#34 +Chasing After You,Ryan Hurd With Maren Morris,2021#61 +Cheap Thrills,Sia Featuring Sean Paul,2016#11 +Chemical,Post Malone,2023#57 +Circles,Post Malone,2019#62/2020#2 +Circles Around This Town,Maren Morris,2022#100 +Close,Nick Jonas Featuring Tove Lo,2016#66 +Close Friends,Lil Baby,2019#74 +Close To Me,Ellie Goulding X Diplo Featuring Swae Lee,2019#58 +Closer,The Chainsmokers Featuring Halsey,2016#10/2017#7 +Clout,Offset Featuring Cardi B,2019#87 +Cold,Maroon 5 Featuring Future,2017#69 +Cold Heart (PNAU Remix),Elton John & Dua Lipa,2022#10 +Cold Water,Major Lazer Featuring Justin Bieber & MO,2016#25 +Come & Go,Juice WRLD x Marshmello,2020#54 +Con Calma,Daddy Yankee & Katy Perry Featuring Snow,2019#65 +Congratulations,Post Malone Featuring Quavo,2017#10 +Controlla,Drake,2016#41 +Cowgirls,Morgan Wallen Featuring ERNEST,2024#29 +Creepin',"Metro Boomin, The Weeknd & 21 Savage",2023#5 +Cruel Summer,Taylor Swift,2023#18/2024#12 +Cry Baby,Megan Thee Stallion Featuring DaBaby,2021#77 +Cry For Me,The Weeknd,2025#73 +Cuff It,Beyonce,2023#29 +Cupid,Fifty Fifty,2023#44 +Cut It,O.T. Genasis Featuring Young Dolph,2016#91 +Daisies,Justin Bieber,2025#60 +Dakiti,Bad Bunny & Jhay Cortez,2021#28 +Damn Strait,Scotty McCreery,2022#93 +Dance Monkey,Tones And I,2020#14 +Dance The Night,Dua Lipa,2023#35/2024#100 +Dancin' In The Country,Tyler Hubbard,2023#61 +Dancing With A Stranger,Sam Smith & Normani,2019#14 +Dangerous Woman,Ariana Grande,2016#36 +Dark Thoughts,Lil Tecca,2025#96 +Daylight,David Kushner,2023#62 +Death Bed,Powfu Featuring beabadoobee,2020#43 +Deja Vu,Olivia Rodrigo,2021#13 +Delicate,Taylor Swift,2018#24 +Denial Is A River,Doechii,2025#75 +Despacito,Luis Fonsi & Daddy Yankee Featuring Justin Bieber,2017#2 +Despues de La Playa,Bad Bunny,2022#78 +Dial Drunk,Noah Kahan With Post Malone,2023#80 +Die A Happy Man,Thomas Rhett,2016#64 +Die For You,The Weeknd & Ariana Grande,2023#7 +Die From A Broken Heart,Maddie & Tae,2020#65 +Die With A Smile,Lady Gaga & Bruno Mars,2024#62/2025#1 +Dior,Pop Smoke,2020#83 +DNA.,Kendrick Lamar,2017#62 +Do Re Mi,Blackbear,2017#98 +Does To Me,Luke Combs Featuring Eric Church,2020#93 +Doin' This,Luke Combs,2022#71 +Don't,Bryson Tiller,2016#35 +Don't Let Me Down,The Chainsmokers Featuring Daya,2016#8 +Don't Mind,Kent Jones,2016#48 +Don't Start Now,Dua Lipa,2020#4 +Don't Wanna Know,Maroon 5 Featuring Kendrick Lamar,2017#38 +Down,Marian Hill,2017#90 +Down Bad,Taylor Swift,2024#99 +Down In The DM,Yo Gotti Featuring Nicki Minaj,2016#69 +Drinkin' Beer. Talkin' God. Amen.,Chase Rice Featuring Florida Georgia Line,2021#99 +Drip Too Hard,Lil Baby & Gunna,2019#26 +Drivers License,Olivia Rodrigo,2021#8 +Drowning,A Boogie Wit da Hoodie Featuring Kodak Black,2017#81 +DTMF,Bad Bunny,2025#51 +Dura,Daddy Yankee,2018#93 +Dynamite,BTS,2020#38/2021#41 +Eastside,"Benny Blanco, Halsey & Khalid",2018#77/2019#17 +Easy On Me,Adele,2022#4 +Efecto,Bad Bunny,2022#69 +Ella Baila Sola,Eslabon Armado X Peso Pluma,2023#26 +Emotionally Scarred,Lil Baby,2020#74 +End Of Beginning,Djo,2024#47 +Enemy,Imagine Dragons X JID,2022#15 +Envy Me,Calboy,2019#59 +EOO,Bad Bunny,2025#77 +Escapism,RAYE Featuring 070 Shake,2023#48 +Espresso,Sabrina Carpenter,2024#7/2025#12 +Essence,Wizkid Featuring Justin Bieber & Tems,2021#60/2022#64 +Euphoria,Kendrick Lamar,2024#66 +Even Though I'm Leaving,Luke Combs,2020#85 +Every Chance I Get,DJ Khaled Featuring Lil Baby & Lil Durk,2021#59 +Everybody,Nicki Minaj Featuring Lil Uzi Vert,2024#71 +Everyday We Lit,YFN Lucci Featuring PnB Rock,2017#95 +Everything I Love,Morgan Wallen,2023#56 +Everything I Wanted,Billie Eilish,2020#18 +Ex's & Oh's,Elle King,2016#63 +Exchange,Bryson Tiller,2016#53 +Exes,Tate McRae,2024#93 +Eyes Closed,Ed Sheeran,2023#64 +Eyes On You,Chase Rice,2019#96 +Fake Love,Drake,2017#37 +Fall In Love,Bailey Zimmerman,2022#54 +Falling,Trevor Daniel,2020#22 +Famous Friends,Chris Young + Kane Brown,2021#69 +Fancy Like,Walker Hayes,2021#27/2022#35 +Fast Car,Luke Combs,2023#8/2024#23 +Favorite Song,Toosii,2023#21 +FE!N,Travis Scott Featuring Playboi Carti,2024#97 +Feather,Sabrina Carpenter,2024#25 +Feel It Still,Portugal. The Man,2017#45/2018#33 +Feels,"Calvin Harris Featuring Pharrell Williams, Katy Perry & Big Sean",2017#74 +FEFE,6ix9ine Featuring Nicki Minaj & Murda Beatz,2018#31 +Finesse,Bruno Mars & Cardi B,2018#14 +Fingers Crossed,Lauren Spencer-Smith,2022#75 +First Class,Jack Harlow,2022#6 +First Person Shooter,Drake Featuring J. Cole,2024#61 +Flower Shops,ERNEST Featuring Morgan Wallen,2022#96 +Flowers,Miley Cyrus,2023#2/2024#69 +Folded,Kehlani,2025#98 +For Free,DJ Khaled Featuring Drake,2016#59 +For The Night,Pop Smoke Featuring Lil Baby & DaBaby,2020#49/2021#32 +Forever After All,Luke Combs,2021#18 +Fortnight,Taylor Swift Featuring Post Malone,2024#22 +Freaky Friday,Lil Dicky Featuring Chris Brown,2018#55 +Free,Rumi & JINU: EJAE & Andrew Choi,2025#92 +Friends,Marshmello & Anne-Marie,2018#26 +FTCU,Nicki Minaj,2024#88 +Fukumean,Gunna,2023#31/2024#85 +Gata Only,FloyyMenor X Cris Mj,2024#52 +Get Along,Kenny Chesney,2018#87 +Get Into It (Yuh),Doja Cat,2022#68 +Get It Sexyy,Sexyy Red,2024#55 +Ghost,Justin Bieber,2022#8 +Girls Like You,Maroon 5 Featuring Cardi B,2018#10/2019#22 +Glad You Exist,Dan + Shay,2021#64 +Glimpse Of Us,Joji,2022#52 +Go Crazy,Chris Brown & Young Thug,2020#39/2021#19 +God Is A Woman,Ariana Grande,2018#62 +God's Country,Blake Shelton,2019#53 +God's Plan,Drake,2018#1 +Godzilla,Eminem Featuring Juice WRLD,2020#62 +Going Bad,Meek Mill Featuring Drake,2019#18 +"Going, Going, Gone",Luke Combs,2023#59 +Gold,Kiiara,2016#52 +Golden,"HUNTR/X: EJAE, Audrey Nuna & REI AMI",2025#25 +Golden Hour,JVKE,2023#41 +Good 4 U,Olivia Rodrigo,2021#5/2022#31 +Good As Hell,Lizzo,2020#31 +Good As You,Kane Brown,2019#86 +Good Days,SZA,2021#52 +Good Good,"Usher, Summer Walker & 21 Savage",2024#79 +"Good Luck, Babe!",Chappell Roan,2024#18/2025#31 +Good News,Shaboozey,2025#23 +Good Time,Niko Moon,2021#84 +Goodbyes,Post Malone Featuring Young Thug,2019#30 +Goosebumps,Travis Scott,2017#68 +Got What I Got,Jason Aldean,2020#60 +Greedy,Tate McRae,2024#13 +Gucci Gang,Lil Pump,2018#44 +Gummo,6ix9ine,2018#56 +H.O.L.Y.,Florida Georgia Line,2016#49 +Handle On You,Parker McCollum,2023#85 +Hands To Myself,Selena Gomez,2016#56 +Happen To Me,Russell Dickerson,2025#69 +Happier,Marshmello & Bastille,2018#80/2019#6 +Happier Than Ever,Billie Eilish,2021#94 +Hard Fought Hallelujah,Brandon Lake X Jelly Roll,2025#84 +Hard To Forget,Sam Hunt,2020#69 +Havana,Camila Cabello Featuring Young Thug,2017#96/2018#4 +Heart Like A Truck,Lainey Wilson,2023#58 +Heart Of A Woman,Summer Walker,2025#94 +Heart On Ice,Rod Wave,2020#51 +Heartbreak Anniversary,Giveon,2021#31 +Heartless,The Weeknd,2020#28 +Heat Waves,Glass Animals,2021#16/2022#1 +Heathens,twenty one pilots,2016#21/2017#58 +Heaven,Kane Brown,2018#53 +Hell Of A View,Eric Church,2021#91 +Hello,Adele,2016#7 +Here,Alessia Cara,2016#39 +"Hey Look Ma, I Made It",Panic! At The Disco,2019#61 +Hide Away,Daya,2016#84 +High Fashion,Roddy Ricch Featuring Mustard,2020#40 +High Hopes,Panic! At The Disco,2019#11 +High Road,Koe Wetzel & Jessie Murph,2024#81/2025#55 +HIGHEST IN THE ROOM,Travis Scott,2020#45 +Him & I,G-Eazy & Halsey,2018#45 +Holy,Justin Bieber Featuring Chance The Rapper,2021#35 +Homesick,Kane Brown,2020#89 +Hot,Young Thug Featuring Gunna,2020#72 +Hot Girl Bummer,blackbear,2020#26 +Hot Girl Summer,"Megan Thee Stallion, Nicki Minaj & Ty Dolla $ign",2019#93 +Hot To Go!,Chappell Roan,2024#53 +Hotline Bling,Drake,2016#24 +Houdini,Dua Lipa,2024#43 +Houdini,Eminem,2024#39 +House Again,Hudson Westbrook,2025#95 +How Do You Sleep?,Sam Smith,2019#83 +How It's Done,"HUNTR/X: EJAE, Audrey Nuna & REI AMI",2025#68 +How Long,Charlie Puth,2018#65 +Hrs And Hrs,Muni Long,2022#57 +Humble And Kind,Tim McGraw,2016#96 +Humble.,Kendrick Lamar,2017#4 +Hurricane,Luke Combs,2017#76 +Hymn For The Weekend,Coldplay,2016#73 +I Ain't Coming Back,Morgan Wallen Featuring Post Malone,2025#72 +I Ain't Worried,OneRepublic,2022#37 +I Am Not Okay,Jelly Roll,2024#75/2025#79 +I Can Do It With A Broken Heart,Taylor Swift,2024#35 +I Don't Care,Ed Sheeran & Justin Bieber,2019#16 +I Don't Wanna Live Forever (Fifty Shades Darker),Zayn / Taylor Swift,2017#26 +I Fall Apart,Post Malone,2018#39 +I Feel It Coming,The Weeknd Featuring Daft Punk,2017#34 +I Get The Bag,Gucci Mane Featuring Migos,2017#93/2018#72 +I Got Better,Morgan Wallen,2025#40 +I Had Some Help,Post Malone Featuring Morgan Wallen,2024#4/2025#8 +I Hate U,SZA,2022#50 +I Hate U I Love U,gnash Featuring Olivia O'Brien,2016#38 +I Hope,Gabby Barrett Featuring Charlie Puth,2020#12/2021#40 +I Hope You're Happy Now,Carly Pearce & Lee Brice,2020#73 +I Know What You Did Last Summer,Shawn Mendes & Camila Cabello,2016#86 +I Like It,"Cardi B, Bad Bunny & J Balvin",2018#7/2019#69 +I Like Me Better,Lauv,2018#35 +I Like The Way You Kiss Me,Artemas,2024#63 +I Like You (A Happier Song),Post Malone Featuring Doja Cat,2022#26/2023#75 +I Never Lie,Zach Top,2025#43 +I Remember Everything,Zach Bryan Featuring Kacey Musgraves,2023#74/2024#9 +I Took A Pill In Ibiza,Mike Posner,2016#15 +I Wrote The Book,Morgan Wallen,2023#95 +I'm Gonna Love You,Cody Johnson & Carrie Underwood,2025#78 +I'm Good (Blue),David Guetta & Bebe Rexha,2023#10 +I'm The One,"DJ Khaled Featuring Justin Bieber, Quavo, Chance The Rapper & Lil Wayne",2017#12 +I'm The Problem,Morgan Wallen,2025#13 +I'm Upset,Drake,2018#86 +IDGAF,Drake Featuring Yeat,2024#83 +IDGAF,Dua Lipa,2018#98 +If I Can't Have You,Shawn Mendes,2019#29 +If I Didn't Love You,Jason Aldean & Carrie Underwood,2021#85 +If The World Was Ending,JP Saxe Featuring Julia Michaels,2020#56 +ily,surf mesa Featuring Emilee,2020#95 +In A Minute,Lil Baby,2022#43 +In Case You Didn't Know,Brett Young,2017#57 +In My Blood,Shawn Mendes,2018#46 +In My Feelings,Drake,2018#9 +In The Night,The Weeknd,2016#61 +Indigo,Sam Barber Featuring Avery Anna,2025#49 +Industry Baby,Lil Nas X & Jack Harlow,2021#24/2022#16 +Intentions,Justin Bieber Featuring Quavo,2020#17 +Into You,Ariana Grande,2016#51 +Is It Over Now? (Taylor's Version) [From The Vault],Taylor Swift,2024#33 +iSpy,KYLE Featuring Lil Yachty,2017#28 +Issues,Julia Michaels,2017#29 +It Ain't Me,Kygo x Selena Gomez,2017#27 +Jimmy Cooks,Drake Featuring 21 Savage,2022#33 +Jingle Bell Rock,Bobby Helms,2022#86/2023#68/2024#68/2025#81 +Juicy,Doja Cat & Tyga,2020#87 +Juju On That Beat (TZ Anthem),Zay Hilfigerrr & Zayion McCall,2017#63 +Jumpman,Drake & Future,2016#37 +Just In Case,Morgan Wallen,2025#18 +Just Like Fire,P!nk,2016#33 +Just The Way,Parmalee x Blanco Brown,2021#88 +Just Wanna Rock,Lil Uzi Vert,2023#28 +Karma,Taylor Swift Featuring Ice Spice,2023#27 +Kill Bill,SZA,2023#3 +King's Dead,"Jay Rock, Kendrick Lamar, Future & James Blake",2018#79 +Kings & Queens,Ava Max,2021#73 +Kiss Me More,Doja Cat Featuring SZA,2021#6/2022#90 +Knife Talk,Drake Featuring 21 Savage & Project Pat,2021#86/2022#60 +Knockin' Boots,Luke Bryan,2019#79 +La Bebe,Yng Lvcas x Peso Pluma,2023#40 +La Diabla,Xavi,2024#72 +Last Christmas,Wham!,2023#84/2024#74/2025#65 +Last Night,Morgan Wallen,2023#1/2024#28 +Last Night Lonely,Jon Pardi,2022#95 +Late At Night,Roddy Ricch,2021#72 +Late Night Talking,Harry Styles,2022#25 +Laugh Now Cry Later,Drake Featuring Lil Durk,2020#41/2021#45 +Lavender Haze,Taylor Swift,2023#32 +Lean On,Major Lazer & DJ Snake Featuring MO,2016#85 +Leave Before You Love Me,Marshmello X Jonas Brothers,2021#63 +Leave Me Alone,Flipp Dinero,2019#71 +Leave The Door Open,Silk Sonic (Bruno Mars & Anderson .Paak),2021#7 +Lemon,N*E*R*D & Rihanna,2018#83 +Lemonade,Internet Money & Gunna Featuring Don Toliver & NAV,2021#51 +Let It Go,James Bay,2016#44 +Let Me Love You,DJ Snake Featuring Justin Bieber,2016#47/2017#46 +Let You Down,NF,2018#29 +Levitating,Dua Lipa,2021#1/2022#42 +Liar,Jelly Roll,2025#86 +Lies Lies Lies,Morgan Wallen,2024#50 +Life Is Good,Future Featuring Drake,2020#7 +Lift Me Up,Rihanna,2023#63 +Lights Down Low,MAX Featuring gnash,2018#66 +Like Him,"Tyler, The Creator Featuring Lola Young",2025#62 +Like I Love Country Music,Kane Brown,2022#85 +Like I'm Gonna Lose You,Meghan Trainor Featuring John Legend,2016#42 +Like That,"Future, Metro Boomin & Kendrick Lamar",2024#14 +Lil Bit,Nelly & Florida Georgia Line,2021#70 +Lil Boo Thang,Paul Russell,2024#78 +Location,Khalid,2017#21 +Loco,Neton Vega,2025#100 +Lonely,Justin Bieber & benny blanco,2021#65 +Look Alive,BlocBoy JB Featuring Drake,2018#23 +Look At Me!,XXXTentacion,2017#99 +Look Back At It,A Boogie Wit da Hoodie,2019#41 +Look What God Gave Her,Thomas Rhett,2019#85 +Look What You Made Me Do,Taylor Swift,2017#39 +Lose Control,Teddy Swims,2024#1/2025#4 +Lose You To Love Me,Selena Gomez,2020#30 +Lost Boy,Ruth B,2016#76 +Love Galore,SZA Featuring Travis Scott,2017#80 +Love Lies,Khalid & Normani,2018#19/2019#88 +Love Me Not,Ravyn Lenae,2025#30 +Love Nwantiti (Ah Ah Ah),CKay,2022#55 +Love On The Brain,Rihanna,2017#33 +Love Somebody,Morgan Wallen,2025#11 +Love You Anyway,Luke Combs,2023#36 +Love Yourself,Justin Bieber,2016#1 +Love.,Kendrick Lamar Featuring Zacari,2018#50 +Lovin On Me,Jack Harlow,2024#5 +Lovin' On You,Luke Combs,2020#97 +Low Life,Future Featuring The Weeknd,2016#30 +Loyalty.,Kendrick Lamar Featuring Rihanna,2017#66 +Lucid Dreams,Juice WRLD,2018#12/2019#48 +Lunch,Billie Eilish,2024#48 +Luther,Kendrick Lamar & SZA,2025#2 +Luv,Tory Lanez,2016#70 +Made For Me,Muni Long,2024#56 +Made You Look,Meghan Trainor,2023#53 +Magnolia,Playboi Carti,2017#79 +Malibu,Miley Cyrus,2017#89 +MAMIII,Becky G X Karol G,2022#59 +Manchild,Sabrina Carpenter,2025#38 +Marry Me,Thomas Rhett,2018#76 +Mask Off,Future,2017#14 +Me Porto Bonito,Bad Bunny & Chencho Corleone,2022#20 +Me Too,Meghan Trainor,2016#62 +ME!,Taylor Swift Featuring Brendon Urie,2019#43 +"Me, Myself & I",G-Eazy x Bebe Rexha,2016#19 +Meant To Be,Bebe Rexha & Florida Georgia Line,2018#3 +Meet Me At Our Spot,THE ANXIETY: WILLOW & Tyler Cole,2022#74 +Meltdown,Travis Scott Featuring Drake,2023#97 +Memories,Maroon 5,2020#8 +Memory Lane,Old Dominion,2023#87 +Mercy,Brett Young,2018#95 +Mercy,Shawn Mendes,2017#54 +Messy,Lola Young,2025#28 +Mi Gente,J Balvin & Willy William Featuring Beyonce,2017#50/2018#99 +MIA,Bad Bunny Featuring Drake,2019#44 +Middle,DJ Snake Featuring Bipolar Sunshine,2016#80 +Middle Child,J. Cole,2019#25 +Miles On It,Marshmello & Kane Brown,2024#34 +Million Dollar Baby,Tommy Richman,2024#8 +Mine,Bazzi,2018#21 +Mo Bamba,Sheck Wes,2019#49 +Monaco,Bad Bunny,2024#82 +Money,Cardi B,2019#38 +Money In The Grave,Drake Featuring Rick Ross,2019#34 +Montero (Call Me By Your Name),Lil Nas X,2021#9 +Mood,24kGoldn Featuring iann dior,2020#47/2021#4 +Mood Swings,Pop Smoke Featuring Lil Tjay,2020#81 +Moonlight,XXXTENTACION,2018#88 +More Than My Hometown,Morgan Wallen,2020#96 +Moscow Mule,Bad Bunny,2022#44 +MotorSport,"Migos, Nicki Minaj & Cardi B",2018#34 +Murder On My Mind,YNW Melly,2019#66 +Mutt,Leon Thomas,2025#22 +My Ex's Best Friend,Machine Gun Kelly X blackbear,2021#23 +My House,Flo Rida,2016#14 +My Oh My,Camila Cabello Featuring DaBaby,2020#37 +My Type,Saweetie,2019#76 +Mystical Magical,Benson Boone,2025#47 +Natural,Imagine Dragons,2018#69 +Need A Favor,Jelly Roll,2023#34/2024#64 +Need To Know,Doja Cat,2021#46/2022#18 +Needed Me,Rihanna,2016#13 +Never Be Like You,Flume Featuring Kai,2016#60 +Never Be The Same,Camila Cabello,2018#18 +Never Forget You,Zara Larsson & MNEK,2016#46 +Never Lose Me,Flo Milli,2024#49 +Never Say Never,Cole Swindell / Lainey Wilson,2022#92 +New Rules,Dua Lipa,2018#16 +Next Thing You Know,Jordan Davis,2023#47 +Nice For What,Drake,2018#11 +No,Meghan Trainor,2016#45 +No Brainer,"DJ Khaled Featuring Justin Bieber, Chance The Rapper & Quavo",2018#73 +No Guidance,Chris Brown Featuring Drake,2019#21/2020#36 +No Limit,G-Eazy Featuring A$AP Rocky & Cardi B,2018#30 +No Limit,Usher Featuring Young Thug,2016#90 +No More Parties,Coi Leray Featuring Lil Durk,2021#79 +No One Noticed,The Marias,2025#32 +No Pole,Don Toliver,2025#97 +No Promises,Cheat Codes Featuring Demi Lovato,2017#91 +No Tears Left To Cry,Ariana Grande,2018#20 +Nobody But You,Blake Shelton Duet With Gwen Stefani,2020#52 +Nobody Gets Me,SZA,2023#77 +Nokia,Drake,2025#24 +Nonstop,Drake,2018#52 +Not Like Us,Kendrick Lamar,2024#6/2025#17 +Now Or Never,Halsey,2017#59 +Nuevayol,Bad Bunny,2025#89 +Numb Little Bug,Em Beihold,2022#32 +Oh My God,Adele,2022#72 +Ojitos Lindos,Bad Bunny & Bomba Estereo,2022#87 +Old Town Road,Lil Nas X Featuring Billy Ray Cyrus,2019#1 +On Me,Lil Baby,2021#36 +On My Mama,Victoria Monet,2024#91 +On My Mind,Ellie Goulding,2016#81 +One Call Away,Charlie Puth,2016#43 +One Dance,Drake Featuring WizKid & Kyla,2016#3 +One Kiss,Calvin Harris & Dua Lipa,2018#68 +One Man Band,Old Dominion,2020#59 +One Margarita,Luke Bryan,2020#70 +One Mississippi,Kane Brown,2022#99 +One Number Away,Luke Combs,2018#96 +One Of Them Girls,Lee Brice,2020#68 +One Right Now,Post Malone & The Weeknd,2022#30 +One Thing At A Time,Morgan Wallen,2023#37 +One Thing Right,Marshmello & Kane Brown,2019#89 +One Too Many,Keith Urban Duet With P!nk,2021#81 +Only Human,Jonas Brothers,2019#78/2020#77 +Ordinary,Alex Warren,2025#7 +Oui,Jeremih,2016#55 +Outside Today,YoungBoy Never Broke Again,2018#91 +P*$$y Fairy (OTW),Jhene Aiko,2020#94 +Paint The Town Red,Doja Cat,2023#52/2024#21 +Panda,Desiigner,2016#6 +Panini,Lil Nas X,2019#40/2020#71 +Paris,The Chainsmokers,2017#42 +Party,Bad Bunny & Rauw Alejandro,2022#77 +Party Girl,StaySolidRocky,2020#64 +Passionfruit,Drake,2017#65 +Peaches,Justin Bieber Featuring Daniel Caesar & Giveon,2021#10 +Peaches & Eggplants,Young Nudy Featuring 21 Savage,2023#94 +Peekaboo,Kendrick Lamar Featuring AzChike,2025#53 +Perfect,Ed Sheeran,2018#2 +Perfect,One Direction,2016#100 +Pillowtalk,Zayn,2016#22 +Pink Pony Club,Chappell Roan,2025#10 +Pink Skies,Zach Bryan,2024#30 +Plain Jane,A$AP Ferg Featuring Nicki Minaj,2018#74 +Players,Coi Leray,2023#33 +Please Me,Cardi B & Bruno Mars,2019#37 +Please Please Please,Sabrina Carpenter,2024#16/2025#50 +Plug Walk,Rich The Kid,2018#57 +Pop Out,Polo G Featuring Lil Tjay,2019#45 +Pop Style,Drake Featuring The Throne,2016#82 +Popstar,DJ Khaled Featuring Drake,2020#66 +Por Las Noches,Peso Pluma,2023#86 +Positions,Ariana Grande,2021#14 +Pour Me A Drink,Post Malone Featuring Blake Shelton,2024#76 +pov,Ariana Grande,2021#87 +Powerglide,Rae Sremmurd & Juicy J,2018#97 +Pray For Me,The Weeknd & Kendrick Lamar,2018#40 +Praying,Kesha,2017#67 +PRC,Peso Pluma X Natanael Cano,2023#90 +Pretty Little Poison,Warren Zeiders,2024#60 +Princess Diana,Ice Spice & Nicki Minaj,2023#69 +Provenza,Karol G,2022#63 +Psycho,Post Malone Featuring Ty Dolla $ign,2018#6 +Puffin On Zootiez,Future,2022#84 +Pure Water,Mustard & Migos,2019#55 +Pushin P,Gunna & Future Featuring Young Thug,2022#48 +Put It On Da Floor Again,Latto Featuring Cardi B,2023#98 +Put Your Records On,Ritt Momney,2021#93 +Rags2Riches,Rod Wave Featuring ATR Son Son,2020#90 +Rain On Me,Lady Gaga & Ariana Grande,2020#48 +Rake It Up,Yo Gotti Featuring Nicki Minaj,2017#53 +Ran$om,Lil Tecca,2019#28 +Rapstar,Polo G,2021#30 +Rather Lie,Playboi Carti & The Weeknd,2025#91 +Really Really,Kevin Gates,2016#92 +Redbone,Childish Gambino,2017#25 +Redrum,21 Savage,2024#42 +Religiously,Bailey Zimmerman,2023#42 +Residuals,Chris Brown,2025#63 +Revolving Door,Tate McRae,2025#82 +Ric Flair Drip,Offset & Metro Boomin,2018#38 +Rich Baby Daddy,Drake Featuring Sexyy Red & SZA,2024#45 +Rich Flex,Drake & 21 Savage,2023#14 +Rich Men North Of Richmond,Oliver Anthony Music,2023#78 +Ride,twenty one pilots,2016#20 +RITMO (Bad Boys For Life),Black Eyed Peas X J Balvin,2020#50 +Robbery,Juice WRLD,2019#100 +Rock And A Hard Place,Bailey Zimmerman,2022#70/2023#16 +Rockabye,Clean Bandit Featuring Sean Paul & Anne-Marie,2017#44 +Rockin' Around The Christmas Tree,Brenda Lee,2021#92/2022#80/2023#60/2024#59/2025#67 +Rockstar,DaBaby Featuring Roddy Ricch,2020#5 +Rockstar,Post Malone Featuring 21 Savage,2017#56/2018#5 +Rolex,Ayo & Teo,2017#61 +Roses,SAINt JHN,2020#19 +Roses,The Chainsmokers Featuring Rozes,2016#27 +Roxanne,Arizona Zervas,2020#16 +Rumor,Lee Brice,2019#81 +Running Up That Hill (A Deal With God),Kate Bush,2022#23 +Sad!,XXXTENTACION,2018#17 +Said Sum,Moneybagg Yo,2020#98 +Sailor Song,Gigi Perez,2025#36 +Same Old Love,Selena Gomez,2016#40 +Sand In My Boots,Morgan Wallen,2022#58 +Saturn,SZA,2024#19 +Savage,Megan Thee Stallion,2020#15 +Savage Love (Laxed - Siren Beat),Jawsh 685 x Jason Derulo,2020#35 +Save Me,Jelly Roll With Lainey Wilson,2024#65 +Save Your Tears,The Weeknd & Ariana Grande,2021#2/2022#40 +Say It,Tory Lanez,2016#74 +Say So,Doja Cat,2020#11 +Say Something,Justin Timberlake Featuring Chris Stapleton,2018#85 +Say You Won't Let Go,James Arthur,2017#11 +Scars To Your Beautiful,Alessia Cara,2017#30 +Search & Rescue,Drake,2023#45 +See You Again,Wiz Khalifa Featuring Charlie Puth,2016#99 +Send My Love (To Your New Lover),Adele,2016#26 +Senorita,Shawn Mendes & Camila Cabello,2019#15/2020#44 +Seven,Jung Kook Featuring Latto,2023#82 +Shallow,Lady Gaga & Bradley Cooper,2019#19 +Shape Of You,Ed Sheeran,2017#1/2018#71 +She Had Me At Heads Carolina,Cole Swindell,2022#46 +She Likes It,Russell Dickerson & Jake Scott,2022#91 +She's All I Wanna Be,Tate McRae,2022#94 +Shirt,SZA,2023#51 +Shivers,Ed Sheeran,2022#5 +Shotta Flow,NLE Choppa,2019#92 +Sicko Mode,Travis Scott,2018#42/2019#9 +Side To Side,Ariana Grande Featuring Nicki Minaj,2016#77/2017#43 +Sign Of The Times,Harry Styles,2017#87 +Simple,Florida Georgia Line,2018#82 +Single Saturday Night,Cole Swindell,2021#95 +"Sit Still, Look Pretty",Daya,2016#78 +Sky Walker,Miguel Featuring Travis Scott,2018#75 +Slide,Calvin Harris Featuring Frank Ocean & Migos,2017#71 +Slide,H.E.R. Featuring YG,2020#99 +Slippery,Migos Featuring Gucci Mane,2017#86 +Slow Hands,Niall Horan,2017#32 +Slow It Down,Benson Boone,2024#41 +Small Town Boy,Dustin Lynch,2017#94 +Smile,Morgan Wallen,2025#64 +Smokin Out The Window,Silk Sonic (Bruno Mars & Anderson .Paak),2022#41 +Snooze,SZA,2023#9/2024#20 +Soda Pop,"Saja Boys: Andrew Choi, Neckwav, Danny Chung, Kevin Woo & samUIL Lee",2025#61 +Somebody Loves Me,"PARTYNEXTDOOR, Drake & Cash Cobain",2025#85 +Someone You Loved,Lewis Capaldi,2019#27/2020#10 +Something In The Orange,Zach Bryan,2022#39/2023#13 +Something Just Like This,The Chainsmokers & Coldplay,2017#5 +Sorry,Beyonce,2016#71 +Sorry,Justin Bieber,2016#2 +Sorry I'm Here For Someone Else,Benson Boone,2025#37 +Sorry Not Sorry,Demi Lovato,2017#47/2018#64 +Speechless,Dan + Shay,2019#35 +Spin Bout U,Drake & 21 Savage,2023#43 +Sports Car,Tate McRae,2025#46 +Squabble Up,Kendrick Lamar,2025#20 +Starboy,The Weeknd Featuring Daft Punk,2016#58/2017#20 +Stargazing,Myles Smith,2024#73/2025#29 +Starting Over,Chris Stapleton,2021#53 +Starving,Hailee Steinfeld & Grey Featuring Zedd,2016#94/2017#82 +Stay,The Kid LAROI & Justin Bieber,2021#12/2022#3 +Stay,Zedd & Alessia Cara,2017#17 +Stick Season,Noah Kahan,2024#11 +Sticky,"Tyler, The Creator Featuring GloRilla, Sexyy Red & Lil Wayne",2025#41 +Stir Fry,Migos,2018#48 +Stitches,Shawn Mendes,2016#23 +Streets,Doja Cat,2021#67 +Stressed Out,twenty one pilots,2016#5 +Strip That Down,Liam Payne Featuring Quavo,2017#36 +Stuck With U,Ariana Grande & Justin Bieber,2020#80 +Sucker,Jonas Brothers,2019#10 +Sucker For Pain,"Lil Wayne, Wiz Khalifa & Imagine Dragons With Logic & Ty Dolla $ign Feat. X Ambassadors",2016#68 +Suge,DaBaby,2019#24 +Suicidal,YNW Melly & Juice WRLD,2020#75 +Sum 2 Prove,Lil Baby,2020#79 +Sunday Best,Surfaces,2020#61 +Sunflower (Spider-Man: Into The Spider-Verse),Post Malone & Swae Lee,2019#2 +Sunroof,Nicky Youre & dazy,2022#29 +Supalonely,BENEE Featuring Gus Dapperton,2020#84 +Super Freaky Girl,Nicki Minaj,2022#56/2023#79 +Super Gremlin,Kodak Black,2022#9 +Superhero (Heroes & Villains),"Metro Boomin, Future & Chris Brown",2023#38 +Superman,Morgan Wallen,2025#99 +Sure Thing,Miguel,2023#24 +Surface Pressure,Jessica Darrow,2022#53 +Swalla,Jason Derulo Featuring Nicki Minaj & Ty Dolla $ign,2017#85 +Swang,Rae Sremmurd,2017#64 +Sweet But Psycho,Ava Max,2019#23 +Sweetest Pie,Megan Thee Stallion & Dua Lipa,2022#62 +Swervin,A Boogie Wit da Hoodie Featuring 6ix9ine,2019#82 +T-Shirt,Migos,2017#52 +Take My Breath,The Weeknd,2021#89 +Take My Name,Parmalee,2022#82 +Takedown,"HUNTR/X: EJAE, Audrey Nuna & REI AMI",2025#93 +Taki Taki,"DJ Snake Featuring Selena Gomez, Ozuna & Cardi B",2019#57 +Talk,Khalid,2019#8 +Talk You Out Of It,Florida Georgia Line,2019#94 +Taste,Sabrina Carpenter,2024#86/2025#19 +Taste,Tyga Featuring Offset,2018#28 +Te Bote,"Casper Magico, Nio Garcia, Darell, Nicky Jam, Ozuna & Bad Bunny",2018#81 +Telepatia,Kali Uchis,2021#49 +Tennessee Orange,Megan Moroney,2023#67 +Tequila,Dan + Shay,2018#32/2019#91 +Texas Hold 'Em,Beyonce,2024#32 +Thank God,Kane Brown With Katelyn Brown,2023#23 +"Thank U, Next",Ariana Grande,2019#12 +That's So True,Gracie Abrams,2025#14 +That's What I Like,Bruno Mars,2017#3 +Thats What I Want,Lil Nas X,2022#14 +The Bigger Picture,Lil Baby,2020#76 +The Bones,Maren Morris,2020#9 +The Box,Roddy Ricch,2020#3 +The Fighter,Keith Urban Featuring Carrie Underwood,2017#100 +The Git Up,Blanco Brown,2019#56 +The Good Ones,Gabby Barrett,2021#62 +The Hills,The Weeknd,2016#32 +The Kind Of Love We Make,Luke Combs,2022#36 +The London,"Young Thug, J. Cole & Travis Scott",2019#64 +The Middle,"Zedd, Maren Morris & Grey",2018#8 +The Painter,Cody Johnson,2024#98 +The Scotts,"THE SCOTTS, Travis Scott & Kid Cudi",2020#86 +The Woo,Pop Smoke Featuring 50 Cent & Roddy Ricch,2020#78 +There's Nothing Holdin' Me Back,Shawn Mendes,2017#23 +Therefore I Am,Billie Eilish,2021#25 +Things A Man Oughta Know,Lainey Wilson,2021#96 +Thinkin' Bout Me,Morgan Wallen,2023#19/2024#31 +This Is America,Childish Gambino,2018#51 +This Is What You Came For,Calvin Harris Featuring Rihanna,2016#17 +Thot Shit,Megan Thee Stallion,2021#71 +Thotiana,Blueface,2019#47 +Thought You Should Know,Morgan Wallen,2023#22 +Throat Baby (Go Baby),BRS Kash,2021#97 +Thunder,Imagine Dragons,2017#51/2018#22 +Tiimmy Turner,Desiigner,2016#98 +Time Today,Moneybagg Yo,2021#76 +Timeless,The Weeknd & Playboi Carti,2025#16 +Titi Me Pregunto,Bad Bunny,2022#22 +To The Moon!,JNR CHOI & Sam Tompkins,2022#97 +Todo de Ti,Rauw Alejandro,2021#100 +Tombstone,Rod Wave,2021#98 +Tomorrow 2,GloRilla & Cardi B,2023#70 +Too Good,Drake Featuring Rihanna,2016#29 +Too Good At Goodbyes,Sam Smith,2017#77/2018#49 +Too Sweet,Hozier,2024#10/2025#34 +Toosie Slide,Drake,2020#32 +TQG,Karol G x Shakira,2023#65 +Track Star,Mooski,2021#75 +Traitor,Olivia Rodrigo,2021#38 +Trampoline,SHAED,2019#70/2020#53 +Treat You Better,Shawn Mendes,2016#28/2017#92 +Trip,Ella Mai,2018#92/2019#80 +Trouble With A Heartbreak,Jason Aldean,2022#88 +Truck Bed,HARDY,2024#67 +Truth Hurts,Lizzo,2019#13/2020#55 +Try That In A Small Town,Jason Aldean,2023#66 +Tu Boda,Oscar Maydon & Fuerza Regida,2025#87 +Tunnel Vision,Kodak Black,2017#55 +TV Off,Kendrick Lamar Featuring Lefty Gunplay,2025#15 +Type Shit,"Future, Metro Boomin, Travis Scott & Playboi Carti",2024#51 +Un x100to,Grupo Frontera X Bad Bunny,2023#49 +Under The Influence,Chris Brown,2023#17 +Undressed,sombr,2025#42 +Unforgettable,French Montana Featuring Swae Lee,2017#15 +Unholy,Sam Smith & Kim Petras,2022#98/2023#11 +Unsteady,X Ambassadors,2016#67 +Until I Found You,Stephen Sanchez,2023#50 +Up,Cardi B,2021#26 +Vampire,Olivia Rodrigo,2023#30/2024#57 +Vegas,Doja Cat,2022#47 +Wait,Maroon 5,2018#58 +Wait For U,Future Featuring Drake & Tems,2022#11/2023#83 +Wait In The Truck,HARDY Featuring Lainey Wilson,2023#54 +Wake Up In The Sky,Gucci Mane X Bruno Mars X Kodak Black,2019#51 +Walk Em Down,NLE Choppa Featuring Roddy Ricch,2020#100 +Walk It Talk It,Migos Featuring Drake,2018#43 +Walk Me Home,P!nk,2019#99 +Wanna Be,GloRilla & Megan Thee Stallion,2024#40 +Wants And Needs,Drake Featuring Lil Baby,2021#47 +WAP,Cardi B Featuring Megan Thee Stallion,2020#24 +Wasted On You,Morgan Wallen,2022#19 +Watch Me,Silento,2016#88 +Water,Tyla,2024#24 +Water Under The Bridge,Adele,2017#88 +Watermelon Moonshine,Lainey Wilson,2023#100 +Watermelon Sugar,Harry Styles,2020#20 +Way 2 Sexy,Drake Featuring Future & Young Thug,2021#48 +We Can't Be Friends (Wait For Your Love),Ariana Grande,2024#26 +We Don't Talk About Bruno,"Carolina Gaitan, Mauro Castillo, Adassa, Rhenzy Feliz, Diane Guerrero, Stephanie Beatriz & Encanto Cast",2022#24 +We Don't Talk Anymore,Charlie Puth Featuring Selena Gomez,2016#50 +We Paid,Lil Baby & 42 Dugg,2020#57 +We're Good,Dua Lipa,2021#90 +Weren't For The Wind,Ella Langley,2025#71 +What About Us,P!nk,2017#84 +What Do You Mean?,Justin Bieber,2016#31 +What Happened To Virgil,Lil Durk Featuring Gunna,2022#83 +What I Want,Morgan Wallen Featuring Tate McRae,2025#27 +What Ifs,Kane Brown Featuring Lauren Alaina,2017#72 +What It Is (Block Boy),Doechii Featuring Kodak Black,2023#76 +What It Sounds Like,"HUNTR/X: EJAE, Audrey Nuna & REI AMI",2025#83 +What Lovers Do,Maroon 5 Featuring SZA,2017#97/2018#89 +What My World Spins Around,Jordan Davis,2023#91 +What Was I Made For?,Billie Eilish,2023#81/2024#46 +What You Know Bout Love,Pop Smoke,2021#22 +What's Next,Drake,2021#68 +What's Your Country Song,Thomas Rhett,2021#80 +Whatchu Kno About Me,GloRilla & Sexyy Red,2025#48 +Whatever It Takes,Imagine Dragons,2018#37 +Whatever She Wants,Bryson Tiller,2024#58 +Whats Poppin,"Jack Harlow Featuring DaBaby, Tory Lanez & Lil Wayne",2020#13 +When The Party's Over,Billie Eilish,2019#67 +When We Were Young,Adele,2016#83 +Where It Ends,Bailey Zimmerman,2024#87 +Where She Goes,Bad Bunny,2023#72 +Where The Wild Things Are,Luke Combs,2024#70 +Whiskey Glasses,Morgan Wallen,2019#52 +White Horse,Chris Stapleton,2024#77 +White Iverson,Post Malone,2016#65 +Who,Jimin,2025#57 +Whoopty,CJ,2021#50 +Wicked,Future,2016#97 +Wild As Her,Corey Kent,2023#93 +Wild Ones,Jessie Murph & Jelly Roll,2024#36 +Wild Thoughts,DJ Khaled Featuring Rihanna & Bryson Tiller,2017#18 +Wildest Dreams,Taylor Swift,2016#79 +Wildflower,Billie Eilish,2024#89/2025#26 +Willow,Taylor Swift,2021#55 +Wind Up Missin' You,Tucker Wetmore,2024#95 +Wishing Well,Juice WRLD,2020#92 +Without Me,Halsey,2019#3 +Without You,The Kid LAROI,2021#17 +Woah,Lil Baby,2020#42 +Wockesha,Moneybagg Yo,2021#42 +Wolves,Selena Gomez X Marshmello,2018#60 +Woman,Doja Cat,2022#21 +Work,Rihanna Featuring Drake,2016#4 +Work From Home,Fifth Harmony Featuring Ty Dolla $ign,2016#16 +World On Fire,Nate Smith,2024#90 +Worst Way,Riley Green,2025#35 +Worth It,YK Osiris,2019#77 +Wow.,Post Malone,2019#5 +X,Nicky Jam x J Balvin,2018#90 +XO TOUR Llif3,Lil Uzi Vert,2017#13 +Yeah Glo!,GloRilla,2024#44 +Yes Indeed,Lil Baby & Drake,2018#25 +"Yes, And?",Ariana Grande,2024#92 +Yonaguni,Bad Bunny,2021#83 +You Broke Me First.,Tate McRae,2021#37 +You Make It Easy,Jason Aldean,2018#70 +You Need To Calm Down,Taylor Swift,2019#39 +You Proof,Morgan Wallen,2022#27/2023#12 +You Right,Doja Cat & The Weeknd,2021#43/2022#45 +You Say,Lauren Daigle,2019#60 +You Should Be Sad,Halsey,2020#82 +You Should Probably Leave,Chris Stapleton,2022#79 +You're Mines Still,Yung Bleu Featuring Drake,2021#58 +Young Dumb & Broke,Khalid,2017#78/2018#67 +Youngblood,5 Seconds Of Summer,2018#36/2019#33 +Your Idol,"Saja Boys: Andrew Choi, Neckwav, Danny Chung, Kevin Woo & samUIL Lee",2025#54 +Yummy,Justin Bieber,2020#58 +ZEZE,Kodak Black Featuring Travis Scott & Offset,2019#31 diff --git a/docs/decision_log.md b/docs/decision_log.md index e1f6fb6..8f581cd 100644 --- a/docs/decision_log.md +++ b/docs/decision_log.md @@ -141,3 +141,10 @@ - **歌手名正規化**:歌手名大小寫不敏感歸併、存首見拼法; 正名表(casefold 鍵→官方拼法)存官方拼法,含跨拼法合併 ye→Kanye West。 +- **`data/` 增設 `derived/` 衍生層**:`build-db` 建置工作儲存 + 的同一動作產出兩張人讀報表(songs.csv、artists.csv)並 + commit——與 SQLite 同交易語意、驗證通過才寫檔,稽核鏈 + 「committed 輸入+程式→CSV」無中間空缺;為「可再生仍 + commit」的第二例外。報表不含資料庫 ID(內部參照,資料 + 改版會重排,不供引用);關係以內嵌字串呈現——`/` 連同 + 一首歌的多次上榜、`|` 連不同歌曲——欄位一律字母序。 diff --git a/docs/project_structure.md b/docs/project_structure.md index efdcd4b..a4c9f7e 100644 --- a/docs/project_structure.md +++ b/docs/project_structure.md @@ -10,7 +10,7 @@ pop-fem-audit/ │ # 絕不放理論、codebook、預期結果) ├── .gitignore # captures/lyrics/、.env、scratch ├── conference_abstract.md # pilot 摘要(投稿版) -├── data/ # 依生命週期分三層(文字格式) +├── data/ # 依生命週期分層(文字格式) │ ├── source/ # 源頭:手放後不動 │ │ └── yearend_hot100_2016_2025.csv # 原始榜單 │ ├── captures/ # 外部捕捉:只由 fetch 命令與 @@ -20,8 +20,11 @@ pop-fem-audit/ │ │ ├── lyrics_missing.csv # 歌詞缺漏報表 │ │ └── lyrics/ # 歌詞 .txt 快取 │ │ # (gitignored,版權) -│ └── manual/ # 人工著作:只由研究者手寫 -│ └── artists_overrides.csv # 人工核定 / 深度背景 +│ ├── manual/ # 人工著作:只由研究者手寫 +│ │ └── artists_overrides.csv # 人工核定 / 深度背景 +│ └── derived/ # 衍生:只由 build-db 寫入 +│ ├── songs.csv # 歌曲報表(人讀;進 git) +│ └── artists.csv # 歌手報表(人讀;進 git) ├── prompts/ # LLM 定義檔(逐字作為 system prompt) │ └── _v.md # 版本化:screen_v1.md、judge_v2.md… ├── tools/ # 輔助工具子專案(src-layout) @@ -77,9 +80,10 @@ pop-fem-audit/ 論文附錄的引用單位,須可直接指名(如 judge_v2.md)。 - **Commit 判準**:能由「committed 輸入+程式」決定性再生者不 commit(SQLite 工作儲存、LLM 輸入檔);源頭、捕捉、人工著作 - 一律以文字 commit。`results/` 報表是唯一例外(引用穩定性、 - 審稿人零門檻、撰稿期可 diff)。詳見 `research_plan.md` - 「資料儲存與模型」。 + 一律以文字 commit。「可再生仍 commit」的例外有二: + `results/` 報表(引用穩定性、審稿人零門檻、撰稿期可 diff) + 與 `data/derived/` 人讀報表(與工作儲存同一動作產出,稽核 + 鏈無中間空缺)。詳見 `research_plan.md`「資料儲存與模型」。 - **設定**經 pydantic-settings 統一:`.env`(gitignored,範本 `tools/.env.example`)供應 `SQLALCHEMY_DATABASE_URL` 與 `ANTHROPIC_API_KEY`,絕不寫入 repo。 diff --git a/docs/research_plan.md b/docs/research_plan.md index da1f856..07363e5 100644 --- a/docs/research_plan.md +++ b/docs/research_plan.md @@ -41,10 +41,13 @@ 設定經 pydantic-settings(`.env` 供應 `SQLALCHEMY_DATABASE_URL` 與 `ANTHROPIC_API_KEY`)。 歌詞全文入 DB(不進 git 故無版權疑慮)。 - - 報表:論文引用的最終表由 export 產出 CSV 進 `results/` - ——此為「可再生仍 commit」的唯一例外,理由:引用穩定性 - (十年尺度的環境會腐化)、審稿人零門檻、撰稿期數字變動 - 可 diff。 + - 衍生:`build-db` 建置工作儲存的同一動作產出人讀報表 + (`data/derived/` 的 songs.csv、artists.csv,進 git)—— + 與 SQLite 同交易語意,稽核鏈無中間空缺;不含資料庫 ID。 + - 報表:論文引用的最終表由 export 產出 CSV 進 `results/`。 + 衍生與報表為「可再生仍 commit」的兩個例外,理由:引用 + 穩定性(十年尺度的環境會腐化)、審稿人零門檻、撰稿期 + 數字變動可 diff、供人工檢視。 - **資料模型**:`songs`(歌曲實體,含 lyrics nullable 欄位)、 `chart_entries`(1 歌—N 筆榜單紀錄)、`artists`(歌手實體: Wikidata QID、性別、型態、曲風、國籍)、`song_artists` diff --git a/tools/src/pop_fem_audit_tools/build_db.py b/tools/src/pop_fem_audit_tools/build_db.py index 75fa1e7..c697140 100644 --- a/tools/src/pop_fem_audit_tools/build_db.py +++ b/tools/src/pop_fem_audit_tools/build_db.py @@ -5,13 +5,13 @@ """The builder of the SQLite working store. Rebuilds the working store from scratch out of the committed -inputs: the year-end chart CSV, given as the positional -command-line argument, and the optional capture inputs, each -given as an option: the lyrics cache directory, the Wikidata -artist snapshot CSV, and the manual artist overrides CSV. An -omitted option leaves its capture layer unloaded; a given -option whose path does not exist fails the build. Missing -tables +inputs: the year-end chart CSV and the output directory for the +review CSV files, given as the two positional command-line +arguments, and the optional capture inputs, each given as an +option: the lyrics cache directory, the Wikidata artist snapshot +CSV, and the manual artist overrides CSV. An omitted option +leaves its capture layer unloaded; a given option whose path does +not exist fails the build. Missing tables are created on a fresh store; existing tables are never altered, as the schema lifecycle belongs to the migrations. Every rebuild deletes all the rows, loads the data, and validates it in one @@ -38,6 +38,12 @@ collapse onto a single artist row. The stored artist name is the first-seen spelling, except for the names listed in ``CANONICAL_ARTIST_NAMES``, which always store the canonical spelling regardless of which variant is seen first. + +On a successful build, two review CSV files, ``songs.csv`` and +``artists.csv``, are (re)written under the given output directory, +mirroring the stored songs and artists without their IDs; see +`CSVExporter`. A failed build leaves any existing review CSV +files untouched, matching the store rollback. """ import argparse import csv @@ -46,7 +52,7 @@ import sys from collections.abc import Iterable, Sequence from dataclasses import dataclass from pathlib import Path -from typing import Self +from typing import Any, Self import sqlalchemy as sa from sqlalchemy.orm import Session @@ -156,6 +162,9 @@ def parse_args(argv: list[str] | None) -> argparse.Namespace: parser.add_argument( "chart_csv", type=Path, help="the year-end chart CSV file") + parser.add_argument( + "derived_dir", type=Path, + help="the output directory for the review CSV files") parser.add_argument( "--lyrics-dir", type=Path, default=None, help="the lyrics cache directory to load") @@ -527,6 +536,156 @@ def reset_store(session: Session) -> None: session.execute(sa.delete(model)) +class CSVExporter: + """Writes the review CSV files mirroring the working store.""" + + __SONGS_HEADER: tuple[str, ...] = ("Title", "Artists", "Positions") + """The header row of ``songs.csv``, for human readers.""" + __ARTISTS_HEADER: tuple[str, ...] = ( + "Name", "Wikidata QID", "Gender", "Type", "Genre", "Country", + "Songs") + """The header row of ``artists.csv``, for human readers.""" + + def __init__(self, session: Session, derived_dir: Path) -> None: + """Initialize the exporter. + + :param session: The database session with the loaded data + flushed. + :param derived_dir: The output directory for the review CSV + files. + """ + self.__session: Session = session + self.__derived_dir: Path = derived_dir + + def write(self) -> None: + """Write the review CSV files mirroring the loaded data. + + Fully overwrites ``songs.csv`` and ``artists.csv`` under the + output directory, creating it when missing, with normal + minimal CSV quoting. Neither file carries a song or an + artist ID; a multi-valued field is a plain joined string, + itself CSV-quoted as a whole only when its content requires + it: "/" joins the chart appearances of one song, and "|" + joins the distinct songs credited to one artist. + + :return: None. + :raises OSError: When a CSV file cannot be written. + """ + self.__derived_dir.mkdir(parents=True, exist_ok=True) + self.__write_csv( + self.__derived_dir / "songs.csv", self.__SONGS_HEADER, + self.__songs_rows()) + self.__write_csv( + self.__derived_dir / "artists.csv", self.__ARTISTS_HEADER, + self.__artists_rows()) + + @staticmethod + def __write_csv(path: Path, header: Sequence[str], + rows: Iterable[Sequence[str]]) -> None: + """Write a CSV file with LF line endings, fully overwritten. + + :param path: The output CSV file. + :param header: The header row. + :param rows: The data rows, in the given order. + :return: None. + :raises OSError: When the file cannot be written. + """ + with open(path, "w", encoding="utf-8", newline="") as file: + writer: Any = csv.writer(file) + writer.writerow(header) + writer.writerows(rows) + + @staticmethod + def __sorted_chart_entries(song: Song) -> list[ChartEntry]: + """Sort the chart entries of a song by year then rank. + + :param song: The song with its chart entries loaded. + :return: The chart entries, ordered by year then rank. + """ + return sorted( + song.chart_entries, key=lambda x: (x.year, x.rank)) + + @classmethod + def __song_positions(cls, song: Song) -> str: + """Format the chart positions of a song for the songs.csv + value. + + :param song: The song with its chart entries loaded. + :return: The "YEAR#RANK" tokens, ordered by year then rank, + joined by "/". + """ + entries: list[ChartEntry] = cls.__sorted_chart_entries(song) + return "/".join(f"{x.year}#{x.rank}" for x in entries) + + @classmethod + def __formatted_song_positions(cls, song: Song) -> str: + """Format the chart positions of a song for the artists.csv + value. + + :param song: The song with its chart entries loaded. + :return: The "YEAR#RANK" tokens, ordered by year then rank, + joined by "/". + """ + entries: list[ChartEntry] = cls.__sorted_chart_entries(song) + return "/".join(f"{x.year}#{x.rank}" for x in entries) + + def __songs_rows(self) -> list[list[str]]: + """Build the sorted data rows of ``songs.csv``. + + :return: The rows, sorted by the case-folded title, then + the case-folded artist credit. + """ + songs: list[Song] = sorted( + self.__session.scalars(sa.select(Song)), + key=lambda x: (x.title.casefold(), + x.artist_credit.casefold())) + rows: list[list[str]] = [] + song: Song + for song in songs: + row: list[str] = [ + song.title, song.artist_credit, + self.__song_positions(song)] + rows.append(row) + return rows + + @classmethod + def __artist_songs(cls, artist: Artist) -> str: + """Format the credited songs for the artists.csv value. + + :param artist: The artist with its song credits loaded. + :return: The credited songs, each formatted as + "TITLE (YEAR#RANK[/YEAR#RANK...])" with its chart + appearances, sorted alphabetically case-folded by + title, joined by "|". + """ + songs: list[Song] = sorted( + (x.song for x in artist.song_artists), + key=lambda x: x.title.casefold()) + entries: list[str] = [ + f"{song.title} ({cls.__formatted_song_positions(song)})" + for song in songs] + return "|".join(entries) + + def __artists_rows(self) -> list[list[str]]: + """Build the sorted data rows of ``artists.csv``. + + :return: The rows, sorted by the case-folded name. + """ + artists: list[Artist] = sorted( + self.__session.scalars(sa.select(Artist)), + key=lambda x: x.name.casefold()) + rows: list[list[str]] = [] + artist: Artist + for artist in artists: + row: list[str] = [ + artist.name, artist.wikidata_qid or "", + artist.gender or "", artist.type or "", + artist.genre or "", artist.country or "", + self.__artist_songs(artist)] + rows.append(row) + return rows + + def main(argv: list[str] | None = None) -> int: """Rebuild the SQLite working store from the inputs. @@ -562,6 +721,7 @@ def main(argv: list[str] | None = None) -> int: print(f"error: {violation}", file=sys.stderr) return 1 counts = StoreCounts.get_instance(session) + CSVExporter(session, args.derived_dir).write() session.commit() except (OSError, BuildError) as error: session.rollback() diff --git a/tools/tests/test_build_db.py b/tools/tests/test_build_db.py index fc66831..3db5695 100644 --- a/tools/tests/test_build_db.py +++ b/tools/tests/test_build_db.py @@ -3,6 +3,7 @@ # Authors: # imacat@mail.imacat.idv.tw (imacat), 2026/7/31 """Unit tests for the working store builder module.""" +import csv import io import tempfile import unittest @@ -253,6 +254,7 @@ class TestBuildDB(unittest.TestCase): self.addCleanup(tmp.cleanup) self.__dir: Path = Path(tmp.name) self.__chart: Path = self.__dir / "chart.csv" + self.__derived: Path = self.__dir / "derived" self.__lyrics: Path = self.__dir / "lyrics" self.__wikidata: Path = \ self.__dir / "artists_wikidata.csv" @@ -290,9 +292,41 @@ class TestBuildDB(unittest.TestCase): stderr: io.StringIO = io.StringIO() with redirect_stderr(stderr): status: int = build_db.main( - [str(self.__chart), *options]) + [str(self.__chart), str(self.__derived), *options]) return status, stderr.getvalue() + def __read_csv_rows(self, name: str) -> list[list[str]]: + """Read the data rows of a derived CSV file. + + :param name: The CSV file name under the derived directory. + :return: The data rows, the header row excluded. + """ + with open(self.__derived / name, encoding="utf-8", + newline="") as file: + rows: list[list[str]] = list(csv.reader(file)) + return rows[1:] + + def __read_csv_header(self, name: str) -> list[str]: + """Read the header row of a derived CSV file. + + :param name: The CSV file name under the derived directory. + :return: The header row. + """ + with open(self.__derived / name, encoding="utf-8", + newline="") as file: + return next(csv.reader(file)) + + @staticmethod + def __split_joined_field(value: str, + separator: str = "|") -> list[str]: + """Split a joined field into its entries. + + :param value: The joined field value. + :param separator: The join separator. + :return: The entries, in the given order. + """ + return value.split(separator) + def __session(self) -> Session: """Open a database session closed on test cleanup. @@ -594,3 +628,130 @@ class TestBuildDB(unittest.TestCase): self.assertIn(str(self.__overrides), stderr) session: Session = self.__session() self.assertEqual(list(session.scalars(sa.select(Song))), []) + + REVIEW_CHART_CSV: str = ( + "year,rank,title,artist\n" + "2016,1,banana,Artist B\n" + "2016,2,\"Me, Myself & I\",Billie\n" + "2017,1,\"Me, Myself & I\",Billie\n" + "2017,2,Apple,Artist A\n") + """The chart CSV fixture exercising the review CSV ordering, + positions, and the outer-field comma quoting.""" + + def test_derived_dir_created_when_missing(self) -> None: + """Test that the derived directory is created when + missing.""" + self.assertFalse(self.__derived.exists()) + self.assertEqual(self.__run_build()[0], 0) + self.assertTrue(self.__derived.is_dir()) + self.assertTrue((self.__derived / "songs.csv").is_file()) + self.assertTrue((self.__derived / "artists.csv").is_file()) + + def test_songs_csv_written(self) -> None: + """Test the songs.csv header, the rows, the title + ordering, and the "/"-joined "positions" value.""" + self.__write_chart(self.REVIEW_CHART_CSV) + self.assertEqual(self.__run_build()[0], 0) + self.assertEqual( + self.__read_csv_header("songs.csv"), + ["Title", "Artists", "Positions"]) + rows: list[list[str]] = self.__read_csv_rows("songs.csv") + self.assertEqual( + [row[:2] for row in rows], + [["Apple", "Artist A"], + ["banana", "Artist B"], + ["Me, Myself & I", "Billie"]]) + self.assertEqual( + [self.__split_joined_field(row[2], "/") for row in rows], + [["2017#2"], ["2016#1"], ["2016#2", "2017#1"]]) + + def test_songs_csv_uses_minimal_quoting(self) -> None: + """Test that songs.csv uses normal minimal CSV quoting: a + numeric-looking title is written unquoted, like every other + field not otherwise requiring quoting.""" + self.__write_chart( + "year,rank,title,artist\n" + "2016,1,679,Artist A\n" + "2016,2,filler,Filler Artist\n" + "2017,1,filler2,Filler Artist Two\n" + "2017,2,filler3,Filler Artist Three\n") + self.assertEqual(self.__run_build()[0], 0) + content: str = (self.__derived / "songs.csv").read_text( + encoding="utf-8") + self.assertIn("679,Artist A,2016#1", content) + + def test_artists_csv_written(self) -> None: + """Test the artists.csv header, the rows, the name + ordering, and the "|"-joined "TITLE (YEAR#RANK...)" song + encoding.""" + self.__write_chart(self.REVIEW_CHART_CSV) + self.assertEqual(self.__run_build()[0], 0) + self.assertEqual( + self.__read_csv_header("artists.csv"), + ["Name", "Wikidata QID", "Gender", "Type", "Genre", + "Country", "Songs"]) + rows: list[list[str]] = self.__read_csv_rows("artists.csv") + self.assertEqual( + [row[0] for row in rows], + ["Artist A", "Artist B", "Billie"]) + self.assertEqual( + [self.__split_joined_field(row[6]) for row in rows], + [["Apple (2017#2)"], + ["banana (2016#1)"], + ["Me, Myself & I (2016#2/2017#1)"]]) + + def test_artists_csv_songs_field_quoted_for_comma_title( + self) -> None: + """Test that the outer "Songs" field is CSV-quoted as a + whole when the joined value contains a comma, from a + comma-bearing credited title.""" + self.__write_chart(self.REVIEW_CHART_CSV) + self.assertEqual(self.__run_build()[0], 0) + content: str = (self.__derived / "artists.csv").read_text( + encoding="utf-8") + self.assertIn( + '"Me, Myself & I (2016#2/2017#1)"', content) + self.assertIn("Apple (2017#2)\n", content) + + def test_derived_csvs_have_no_ids(self) -> None: + """Test that neither derived CSV file exposes a song or an + artist ID column.""" + self.assertEqual(self.__run_build()[0], 0) + self.assertNotIn( + "id", self.__read_csv_header("songs.csv")) + self.assertNotIn( + "id", self.__read_csv_header("artists.csv")) + + def test_derived_csvs_have_crlf_line_endings(self) -> None: + """Test that the derived CSV files use CRLF line + endings.""" + self.assertEqual(self.__run_build()[0], 0) + raw: bytes = (self.__derived / "songs.csv").read_bytes() + self.assertGreater(raw.count(b"\r\n"), 0) + self.assertEqual(raw.count(b"\r"), raw.count(b"\r\n")) + self.assertEqual(raw.count(b"\n"), raw.count(b"\r\n")) + + def test_failed_build_leaves_derived_csvs_untouched(self) -> None: + """Test that a failed build does not touch the existing + derived CSV files.""" + self.assertEqual(self.__run_build()[0], 0) + songs_before: str = (self.__derived / "songs.csv").read_text( + encoding="utf-8") + artists_before: str = \ + (self.__derived / "artists.csv").read_text( + encoding="utf-8") + self.__write_chart( + "year,rank,title,artist\n" + "2016,1,Hello,Adele\n") + status: int + stderr: str + status, stderr = self.__run_build() + self.assertNotEqual(status, 0) + self.assertEqual( + (self.__derived / "songs.csv").read_text( + encoding="utf-8"), + songs_before) + self.assertEqual( + (self.__derived / "artists.csv").read_text( + encoding="utf-8"), + artists_before)