From 0ed209229619fe4a4352ba0590b8ec6c652015d8 Mon Sep 17 00:00:00 2001 From: surfer190 Date: Mon, 7 Aug 2023 21:26:47 +0200 Subject: [PATCH 1/8] Add code to get all release download links --- releases.csv | 382 +++++++++++++++++++++++++++++++++++++++++++++ update_releases.py | 127 +++++++++++++++ 2 files changed, 509 insertions(+) create mode 100644 releases.csv create mode 100644 update_releases.py diff --git a/releases.csv b/releases.csv new file mode 100644 index 0000000..12f0861 --- /dev/null +++ b/releases.csv @@ -0,0 +1,382 @@ +artists,title,link +Lofi Records,1 A.M Chill Session,https://lofigirl.com/wp-content/uploads/2023/05/synthwave-compilation.zip +Lofi Records,1 Am. Study Session,https://lofigirl.com/wp-content/uploads/2022/10/1-A.M-Study-Session.zip +Lofi Records,12 Am. Study Session,https://lofigirl.com/wp-content/uploads/2022/11/12AMStudySession.zip +Lofi Records,2 Am. Study Session,https://lofigirl.com/wp-content/uploads/2022/10/2-AM-Study-Session.zip +Lofi Records,3 Am. Study Session,https://lofigirl.com/wp-content/uploads/2022/11/3-am-study-session.zip +Lofi Records,4 Am. Study Session,https://lofigirl.com/wp-content/uploads/2022/11/4-A.M-Study-Session.zip +towerz hi jude,A Bridge Between,https://lofigirl.com/wp-content/uploads/2022/11/A-bridge-Between.zip +Laffey,A Day At A Time,https://lofigirl.com/wp-content/uploads/2022/11/A-Day-at-a-time.zip +BluntOne Baen Mow,A Day in the Life,https://lofigirl.com/wp-content/uploads/2022/11/Bluntone-x-Bean-Mow-A-Day-in-the-Life.zip +tender spring blurred figures,A Friendly Warmth,https://lofigirl.com/wp-content/uploads/2022/10/A-Friendly-Warmth.zip +cxlt. Nuver,A Moment Away,https://lofigirl.com/wp-content/uploads/2022/11/cxlt.-Nuver-A-Moment-Away.zip +Nadav Cohen,A place above heaven,https://lofigirl.com/wp-content/uploads/2022/11/MP3-aMess-A-place-above-heaven.zip +BVG,A Spirit’s Tale,https://lofigirl.com/wp-content/uploads/2022/11/MP3-BVG-A-Spirits-Tale.zip +kainbeats,A Walk Through the Sky,https://lofigirl.com/wp-content/uploads/2022/10/Kainbeats-A-Walk-Through-the-Sky-.zip +Krynoze,A World After,https://lofigirl.com/wp-content/uploads/2022/10/MP3-Krynoze-A-World-After.zip +DaniSogen,A World of Illusion,https://lofigirl.com/wp-content/uploads/2022/10/MP3-DaniSogen-A-World-of-Illusion.zip +Purrple Cat,Adventure Island,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Purrple-Cat-Adventure-Island.zip +Dimension32,Aeolia,https://lofigirl.com/wp-content/uploads/2022/11/Dimension-32-Aeolia.zip +Akraa Virtua,Aether,https://lofigirl.com/wp-content/uploads/2023/07/Aether.zip +mell-ø Ambulo,Afloat Again,https://lofigirl.com/wp-content/uploads/2022/10/Afloat-Again.zip +cxlt. amies,After All,https://lofigirl.com/wp-content/uploads/2022/11/amies-x-cxlt.-After-All.zip +Blue Wednesday,After Hours,https://lofigirl.com/wp-content/uploads/2022/11/After-Hours.zip +DLJ/Blumen,After Life,https://lofigirl.com/wp-content/uploads/2022/11/DLJ-After-Life.zip +Living Room,After Sunset,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Living-Room-After-Sunset-1.zip +Laffey,After The Rain,https://lofigirl.com/wp-content/uploads/2022/10/MP3-Laffey-After-The-Rain.zip +Living Room,After The Rainbow,https://lofigirl.com/wp-content/uploads/2022/10/Living-Room-After-The-Rainbow.zip +Lofi Records,Afternoon Jazz,https://lofigirl.com/wp-content/uploads/2022/11/Afternoon-Jazz.zip +Flovry tender spring,Ages Ago,https://lofigirl.com/wp-content/uploads/2022/11/Ages-Ago.zip +Phlocalyst/Drxnk Satyr,Aiode,https://lofigirl.com/wp-content/uploads/2022/11/Satyr-x-Phlocalyst-Aiode.zip +Hoogway Softy,Alley Of Trees,https://lofigirl.com/wp-content/uploads/2022/11/MP3-HoogWay-x-Softy-Alley-of-Trees.zip +Mondo Loops Charlee,Amidst the Seven Seas,https://lofigirl.com/wp-content/uploads/2022/10/Charlee-x-Mondo-Loops-Amidst-the-Seven-Seas.zip +kainbeats,Angelic,https://lofigirl.com/wp-content/uploads/2022/10/Angelic.zip +Softy Dimension32,Another Life,https://lofigirl.com/wp-content/uploads/2022/11/softy-x-Dimension-32-Another-Life.zip +Loafy Building,Aquilla,https://lofigirl.com/wp-content/uploads/2023/07/Aquilla.zip +Dreamfield Goson,Arcadia,https://lofigirl.com/wp-content/uploads/2023/05/goson-x-dreamfield.zip +Nadav Cohen,Are we okay?,https://lofigirl.com/wp-content/uploads/2022/11/aMess-Are-we-okay.zip +Phlocalyst/Drxnk Satyr,Argo,https://lofigirl.com/wp-content/uploads/2022/11/Argo.zip +Dosi Wishes and Dreams(Orca),Arodasio,https://lofigirl.com/wp-content/uploads/2023/02/Arodasio.zip +Ticofaces,Ash,https://lofigirl.com/wp-content/uploads/2023/05/Ash.zip +Downtown Binary,Astral,https://lofigirl.com/wp-content/uploads/2023/05/Astral.zip +towerz edelwize,At Long Last,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Towerz-At-Long-Last.zip +kainbeats,Atlantis,https://lofigirl.com/wp-content/uploads/2022/11/Kainbeats-Atlantis.zip +Downtown Binary,Aurora,https://lofigirl.com/wp-content/uploads/2023/05/Aurora.zip +BluntOne,Autumn in Budapest,https://lofigirl.com/wp-content/uploads/2022/10/Autumn-in-Budapest.zip +bhxa,Ayla,https://lofigirl.com/wp-content/uploads/2022/11/Bhxa-Ayla.zip +Miramare Clément Matrat,Azure Blue,https://lofigirl.com/wp-content/uploads/2022/10/Azure-Blue.zip +Solar Body Lawrence Walther,Back to Nature,https://lofigirl.com/wp-content/uploads/2023/02/Back-to-Nature.zip +Elior/Aylior/Epona,Ballerina,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Epona-Ballerina.zip +Tibeauthetraveler Banks,Barbados,https://lofigirl.com/wp-content/uploads/2022/11/Barbados.zip +Cosmic Koala Lucid Keys,Beautiful Days,https://lofigirl.com/wp-content/uploads/2023/01/Beautiful-days.zip +Hoogway,Beauty In All Forms,https://lofigirl.com/wp-content/uploads/2022/11/Beauty-in-all-Forms.zip +brillion,Bedtime Stories Pt. 2,https://lofigirl.com/wp-content/uploads/2022/10/bedtime-stories-pt-2.zip +brillion,Bedtime Stories Pt. 3,https://lofigirl.com/wp-content/uploads/2022/10/Bedtime-Stories-Pt.-3.zip +jhove,Been Thinking,https://lofigirl.com/wp-content/uploads/2022/10/Been-Thinking.zip +Softy Otis Lucid Keys,Before It Snows,https://lofigirl.com/wp-content/uploads/2022/10/Softy-Before-it-snows.zip +hevi,"Before It’s Late, Pt. 2",https://lofigirl.com/wp-content/uploads/2022/11/MP3-Hevi-Before-Its-Late-Pt.-2.zip +hevi,Before It’s Late,https://lofigirl.com/wp-content/uploads/2022/11/before-its-late.zip +Dillan Witherow/juniorodeo,Before Sunrise,https://lofigirl.com/wp-content/uploads/2022/11/Before-Sunrise.zip +jhove,Before You Go,https://lofigirl.com/wp-content/uploads/2022/10/Before-You-Go.zip +Aimless Dillan Witherow/juniorodeo iamalex,Beginnings,https://lofigirl.com/wp-content/uploads/2022/11/Beginnings.zip +Softy Laffey,Belonging,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Laffey-x-Softy-Belonging.zip +Sweet Medicine Mujo,Better Days,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Mujo-x-Sweet-Medicine-Better-Days.zip +No spirit,Between Worlds,https://lofigirl.com/wp-content/uploads/2022/10/No-Spirit-Between-Worlds.zip +steezy prime,Beyond the Pines,https://lofigirl.com/wp-content/uploads/2022/11/beyond-the-pines.zip +kainbeats,Blindsighted,https://lofigirl.com/wp-content/uploads/2022/11/MP3-kainbeats-blindsighted.zip +Lofi Records,Blissful Dreams,https://lofigirl.com/wp-content/uploads/2023/05/Blissful-Dreams.zip +dr niar ENRA,Blue Hour,https://lofigirl.com/wp-content/uploads/2022/11/MP3-ENRA-x-dr.-niar-Blue-Hour.zip +Globuldub,Blue Woods,https://lofigirl.com/wp-content/uploads/2022/11/Blue-Woods.zip +Loafy Building,Butterflies,https://lofigirl.com/wp-content/uploads/2022/11/Loafy-Building-Butterflies.zip +xander,"Cabin Fever, Pt. 2",https://lofigirl.com/wp-content/uploads/2022/10/MP3-xander-Cabin-Fever-Pt.2.zip +xander,Cabin Fever Pt.3,https://lofigirl.com/wp-content/uploads/2023/01/Cabin-fever-pt3.zip +xander,Cabin Fever,https://lofigirl.com/wp-content/uploads/2022/11/Cabin-Fever.zip +Living Room,Calm Land,https://lofigirl.com/wp-content/uploads/2023/04/Calm-Land.zip +Sleepermane ENRA,Calm Lands,https://lofigirl.com/wp-content/uploads/2022/10/Calm-Lands.zip +Glimlip Louk,Can We Talk,https://lofigirl.com/wp-content/uploads/2022/11/Can-We-Talk.zip +Tibeauthetraveler,Cascades,https://lofigirl.com/wp-content/uploads/2022/10/Tibeauthetraveler-Cascades.zip +Refeeld Project AER,Chance Encounter,https://lofigirl.com/wp-content/uploads/2022/10/Chance-Encounter.zip +Mondo Loops Bcalm,Changing Times,https://lofigirl.com/wp-content/uploads/2023/01/Changing-Times.zip +Allem Iversom/Harris Cole dontcry,Chapter Two,https://lofigirl.com/wp-content/uploads/2023/07/Chapter-two.zip +Leavv/Ivylake,Cloud Shapes,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Leavv-Cloud-Shapes.zip +enluv,Cloud Studies,https://lofigirl.com/wp-content/uploads/2022/11/Cloud-Studies.zip +BluntOne,Cloud Surfing,https://lofigirl.com/wp-content/uploads/2022/10/Cloud-Surfing.zip +HM Surf,Cocobolo,https://lofigirl.com/wp-content/uploads/2022/10/Cocobolo.zip +Nothingtosay,Cold Thoughts,https://lofigirl.com/wp-content/uploads/2022/10/Nothingtosay-Cold-Thoughts.zip +Fatb,Conscious Ego,https://lofigirl.com/wp-content/uploads/2022/10/conscious-ego-1.zip +dryhope/Mavine,Contrasts,https://lofigirl.com/wp-content/uploads/2022/10/Contrasts.zip +Lofi Records,Cozy Winter,https://lofigirl.com/wp-content/uploads/2022/11/Cozy-Winter.zip +Yasumu/Plant Guy,Creating Memories,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Yasumu-Creating-Memories.zip +xander,Daydreaming,https://lofigirl.com/wp-content/uploads/2022/11/Daydreaming.zip +M e a d o w,Days Of Tomorrow,https://lofigirl.com/wp-content/uploads/2022/11/Days-of-Tomorrow.zip +Peak Twilight,Departure,https://lofigirl.com/wp-content/uploads/2022/11/Departure.zip +Emil Rottmayer,Descend,https://lofigirl.com/wp-content/uploads/2023/06/Descend.zip +Odd Panda gCoope,Desired Views,https://lofigirl.com/wp-content/uploads/2023/06/Desired-views.zip +Akīn Living Room,Directions,https://lofigirl.com/wp-content/uploads/2022/11/Akin-x-Living-Room-Directions.zip +amies,Discoveries,https://lofigirl.com/wp-content/uploads/2022/11/amies-Discoveries.zip +Blue Wednesday,Discovery,https://lofigirl.com/wp-content/uploads/2022/10/Discovery.zip +no one's perfect,Discrete Landscapes,https://lofigirl.com/wp-content/uploads/2022/10/no-ones-perfect-Discrete-Landscapes.zip +Tibeauthetraveler,Distance Love,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Tibeauthetraverler-Distance-Love.zip +Softy,Distant Images,https://lofigirl.com/wp-content/uploads/2022/11/Distant-Images.zip +Purrple Cat,Distant Worlds II,https://lofigirl.com/wp-content/uploads/2022/11/Purrple-Cat-Distant-Worlds-II.zip +Purrple Cat,Distant Worlds III,https://lofigirl.com/wp-content/uploads/2023/01/Distant-World-III.zip +Purrple Cat,Distant Worlds,https://lofigirl.com/wp-content/uploads/2022/10/Distant-Worlds.zip +Late Era/Oatmello,Dove,https://lofigirl.com/wp-content/uploads/2022/10/Dove.zip +Chris Mazuera/SLo Loris,Dozing,https://lofigirl.com/wp-content/uploads/2022/10/Dozing.zip +jhove,Dream Tapes,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Jhove-dream-tapes.zip +Dreamfield Goson,Dreams of Angels,https://lofigirl.com/wp-content/uploads/2022/11/Goson-x-Dreamfield-Dreams-Of-Angels.zip +kyu,Dreamscapes,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Kayou-Dreamscapes.zip +Sleepermane,Dreamtime,https://lofigirl.com/wp-content/uploads/2022/10/Sleepermane-Dreamtime.zip +kainbeats hevi,Drifting Away,https://lofigirl.com/wp-content/uploads/2022/10/Drifting-away.zip +Claudia Lessing Dario Lessing kanisan,Edda,https://lofigirl.com/wp-content/uploads/2023/01/Edda.zip +Bcalm,Elements,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Bcalm-Elements.zip +DaniSogen,Enchantments,https://lofigirl.com/wp-content/uploads/2022/11/MP3-DaniSogen-Enchantments.zip +Phlocalyst/Drxnk,End of the Road,https://lofigirl.com/wp-content/uploads/2023/04/End-of-the-road.zip +Hoogway,Equation Of Time,https://lofigirl.com/wp-content/uploads/2022/10/Hoogway-Equation-of-Time.zip +Aimless Elijah Lee,Escapade,https://lofigirl.com/wp-content/uploads/2022/10/Escapade.zip +Yasumu/Plant Guy,Escaping Reality,https://lofigirl.com/wp-content/uploads/2022/10/Yasumu-Escaping-Reality.zip +Juliàn,Eternal Youth,https://lofigirl.com/wp-content/uploads/2023/02/Eternal-Youth.zip +ornithology,Ethereal Nights,https://lofigirl.com/wp-content/uploads/2022/11/MP3-SCayos-Ethereal-Nights.zip +Osaki,Evergarden,https://lofigirl.com/wp-content/uploads/2022/11/Osaki-Evergarden.zip +WYS Sweet Medicine,Evermore,https://lofigirl.com/wp-content/uploads/2022/11/Evermore.zip +Kurt Stewart/Kayba Lomme,Explore,https://lofigirl.com/wp-content/uploads/2022/10/Kayba-x-Lomme-Explore-.zip +jhove,falling dreams,https://lofigirl.com/wp-content/uploads/2022/11/Falling-Dreams.zip +Lucid Keys,Fantasia,https://lofigirl.com/wp-content/uploads/2023/02/Fantasia.zip +Casiio,Far Off,https://lofigirl.com/wp-content/uploads/2022/11/Casiio-Far-Off.zip +Eugenio Izzi,Feel Free To Imagine,https://lofigirl.com/wp-content/uploads/2022/11/Feel-free-to-imagine.zip +Pandrezz,Feelin Better,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Pandrezz-Feelin-Better.zip +Bcalm Banks,Feelings Pt.2,https://lofigirl.com/wp-content/uploads/2022/10/Bcalm-x-Banks-Feelings-Pt.2.zip +Bcalm Banks,Feelings,https://lofigirl.com/wp-content/uploads/2022/11/Feelings.zip +Krynoze Juliàn,Finding Answers,https://lofigirl.com/wp-content/uploads/2023/02/Finding-anwsers.zip +kainbeats,Finding Beauty,https://lofigirl.com/wp-content/uploads/2022/11/Finding-Beauty.zip +Another Silent Weekend blurred figures,finding comfort,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Blurred-figured-x-another-silent-weekend-finding-comfort.zip +kainbeats,Finding Light,https://lofigirl.com/wp-content/uploads/2023/01/Finding-Light.zip +møndberg BVG,Floating Dreams,https://lofigirl.com/wp-content/uploads/2022/11/Floating-Dreams.zip +Lawrence Walther,Floating into Serenity,https://lofigirl.com/wp-content/uploads/2022/10/Lawrence-Walther-Floating-into-Serenity.zip +lilac,Florist,https://lofigirl.com/wp-content/uploads/2022/10/Florist.zip +Bcalm,For You,https://lofigirl.com/wp-content/uploads/2022/11/Bcalm-For-You.zip +Mondo Loops,Forest Kingdom,https://lofigirl.com/wp-content/uploads/2022/10/Mondo-Loops-Foret-Kingdom.zip +xander,Forest Of Dreams,https://lofigirl.com/wp-content/uploads/2022/11/xander.-Forest-Of-Dreams.zip +Mondo Loops,Forest Tales,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Mondo-Loops-Forest-Tales.zip +Hoogway,Forever Ago,https://lofigirl.com/wp-content/uploads/2022/10/Forever-Ago.zip +Laffey,Forever Changing,https://lofigirl.com/wp-content/uploads/2022/10/Forever-Changing.zip +vhsdreamers,Foudroie,https://lofigirl.com/wp-content/uploads/2023/06/vhsdreamers.zip +Hoogway,Fragments Of The Moon,https://lofigirl.com/wp-content/uploads/2023/07/Fragments-Of-The-Moon.zip +a[way],Frozen Roses,https://lofigirl.com/wp-content/uploads/2022/10/Frozen-Roses.zip +SPEECHLESS,Future Feelings,https://lofigirl.com/wp-content/uploads/2022/10/Future-feelings.zip +kalaido,Ghosts of the Floating World,https://lofigirl.com/wp-content/uploads/2022/11/Ghost-of-the-Floating-World.zip +BVG,Gilded Voyage,https://lofigirl.com/wp-content/uploads/2023/04/bvg-gilded.zip +Yestalgia,Glowing,https://lofigirl.com/wp-content/uploads/2023/05/Glowing.zip +fourwalls jhove,Golden Hour,https://lofigirl.com/wp-content/uploads/2022/11/Golden-Hour.zip +Project AER,Growth Patterns,https://lofigirl.com/wp-content/uploads/2022/11/Growth-Pattern.zip +steezy prime,Half past three,https://lofigirl.com/wp-content/uploads/2023/06/steezy.zip +No spirit,Happy Moments,https://lofigirl.com/wp-content/uploads/2022/10/No-Spirit-Happy-Moments-.zip +Dosi,Haunted Castle,https://lofigirl.com/wp-content/uploads/2023/01/Haunted-Castle.zip +AJMW,Heading Home,https://lofigirl.com/wp-content/uploads/2022/10/Heading-Home.zip +Team Astro,Hidden Treasure,https://lofigirl.com/wp-content/uploads/2022/10/Team-Astro-Hidden-Treasure.zip +Tatami Construct,Hidden World,https://lofigirl.com/wp-content/uploads/2022/10/Tatami-Construct-Hidden-World.zip +Loafy Building,High Flying,https://lofigirl.com/wp-content/uploads/2022/11/High-Flying.zip +L'Outlander,Homeland,https://lofigirl.com/wp-content/uploads/2022/11/Homeland.zip +Thaehan,Hourglass,https://lofigirl.com/wp-content/uploads/2022/11/Hourglass.zip +Team Astro,Hush,https://lofigirl.com/wp-content/uploads/2022/10/Hush.zip +Chiccote's Beats,Illusion,https://lofigirl.com/wp-content/uploads/2022/10/Illusion.zip +Rudy Raw,Imagenero,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Rudy-Raw-Imagenero.zip +Kinissue,Imperfect,https://lofigirl.com/wp-content/uploads/2022/11/Kinissue-Imperfect.zip +Sleepermane,In Between Cycles,https://lofigirl.com/wp-content/uploads/2022/10/Sleepermane-In-Between-Cycles.zip +Yasumu/Plant Guy,In Harmony With Nature,https://lofigirl.com/wp-content/uploads/2022/11/Plant-Guy-In-Harmony-With-Nature.zip +ENRA,In Motion,https://lofigirl.com/wp-content/uploads/2022/10/In-Motion.zip +Blue Wednesday,In My Head,https://lofigirl.com/wp-content/uploads/2022/10/MP3-Blue-Wednesday-In-My-Head.zip +DaniSogen,In Search of Peace,https://lofigirl.com/wp-content/uploads/2022/11/In-search-of-peace.zip +hevi H.1,Indigo Night,https://lofigirl.com/wp-content/uploads/2022/10/H.1-x-Hevi-Indigo-Night.zip +dryhope/Mavine,Inference,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Mavine-Inference.zip +Bcalm,Innocence,https://lofigirl.com/wp-content/uploads/2022/10/Bcalm-Innoncence.zip +TABAL,Inside Space,https://lofigirl.com/wp-content/uploads/2022/10/Inside-Space.zip +Nothingtosay,Introspective,https://lofigirl.com/wp-content/uploads/2022/10/Introspective.zip +Glimlip dontcry,Jiro Dreams,https://lofigirl.com/wp-content/uploads/2022/10/Jiro-Dreams.zip +Project AER,Journals,https://lofigirl.com/wp-content/uploads/2022/10/MP3-Project-AER-Journals.zip +Nuver,Kalopsia,https://lofigirl.com/wp-content/uploads/2022/10/Nuver-Kalopsia.zip +dryhope/Mavine,Kenopsia,https://lofigirl.com/wp-content/uploads/2022/11/Kenopsia.zip +Azula Dillan Witherow/juniorodeo,Kids,https://lofigirl.com/wp-content/uploads/2022/10/MP3-Dillan-Witherow-x-Azula-Kids.zip +Paxkalito PBdR,Kind of Red,https://lofigirl.com/wp-content/uploads/2023/07/kind-of-red.zip +Kupla,Kingdom in Blue,https://lofigirl.com/wp-content/uploads/2022/10/Kingdom-in-Blue.zip +DLJ/Blumen,La Hague,https://lofigirl.com/wp-content/uploads/2022/11/La-Hague.zip +Tom Doolie,Land of Calm,https://lofigirl.com/wp-content/uploads/2022/11/Land-of-Calm.zip +lilac,Lanterns,https://lofigirl.com/wp-content/uploads/2022/10/Lanterns.zip +TABAL,Last Light,https://lofigirl.com/wp-content/uploads/2022/11/Last-Light-MP3.zip +Two Scents,Lately,https://lofigirl.com/wp-content/uploads/2023/01/Lately.zip +goosetaf,Latibule,https://lofigirl.com/wp-content/uploads/2022/11/Latibule.zip +kokoro C4C,L'aventure EP,https://lofigirl.com/wp-content/uploads/2022/10/LAventure.zip +S N U G,Layover,https://lofigirl.com/wp-content/uploads/2022/10/MP3-S-N-U-G-Layover.zip +Lofi Records,Lazy Sunday,https://lofigirl.com/wp-content/uploads/2022/10/Lazy-Sunday-3.zip +Tibeauthetraveler reysi,Leaving This Place,https://lofigirl.com/wp-content/uploads/2022/10/Tibeauthetraveler-x-reysi-Leaving-This-Place.zip +kanisan Mau,Les jours d’après,https://lofigirl.com/wp-content/uploads/2022/10/Kanisan-x-Mau-Les-jours-dapres.zip +Kupla,Life Forms,https://lofigirl.com/wp-content/uploads/2022/10/Life-Forms.zip +Chau Sara,Lightsaber Bar,https://lofigirl.com/wp-content/uploads/2022/11/Chau-Sara-Lightsaber.zip +swink,Like a Necessity,https://lofigirl.com/wp-content/uploads/2023/04/Like-a-necessity.zip +møndberg,Living Free,https://lofigirl.com/wp-content/uploads/2022/11/mondberg-Living-Free.zip +Lofi Records,Lonely Days,https://lofigirl.com/wp-content/uploads/2023/01/Lonely-Nights.zip +Squeeda,Lost World,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Squeeda-Lost-World.zip +kudo,love you two,https://lofigirl.com/wp-content/uploads/2022/11/love-you-two.zip +Ticofaces,Lunar Isle,https://lofigirl.com/wp-content/uploads/2022/10/MP3-ticofaces-Lunar-Isle.zip +Loafy Building,Maru,https://lofigirl.com/wp-content/uploads/2022/10/Loafy-Building-Maru.zip +L'Outlander,Massa,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Loutlander-Massa.zip +no one's perfect,Measures Of Time,https://lofigirl.com/wp-content/uploads/2022/11/no-ones-perfect-Measures-of-Time.zip +Raimu,Meditative Flow,https://lofigirl.com/wp-content/uploads/2022/10/MP3-Raimu-Mediative-Flow.zip +Tomcbumpz,Melodic Nostalgic,https://lofigirl.com/wp-content/uploads/2022/11/Melodic-Nostalgic.zip +Kupla,Melody Mountain,https://lofigirl.com/wp-content/uploads/2022/11/Melody-Mountain.zip +teafourtwo No spirit,Memories We Made,https://lofigirl.com/wp-content/uploads/2022/11/Memories-we-made.zip +Living Room,Memories,https://lofigirl.com/wp-content/uploads/2022/11/Living-Room-Memories.zip +Ky Akasha,Memory Within A Dream,https://lofigirl.com/wp-content/uploads/2022/10/Memory-within-A-dream.zip +Softy Mondo Loops,Midnight Gazing,https://lofigirl.com/wp-content/uploads/2022/11/Midnight-Gazing.zip +Tenno,Mind Temple,https://lofigirl.com/wp-content/uploads/2022/10/Tenno-Mind-Temple.zip +nogymx,Mirage of the Mind,https://lofigirl.com/wp-content/uploads/2022/11/Nogymx-Mirage-of-the-Mind.zip +Yasumu/Plant Guy,Mirror of Time,https://lofigirl.com/wp-content/uploads/2022/11/Mirror-of-Time.zip +kanisan,"mist, shadows & i",https://lofigirl.com/wp-content/uploads/2022/10/Kanissan-mist-shadows-i.zip +noni,momentary,https://lofigirl.com/wp-content/uploads/2022/11/noni-momentary.zip +Hoogway George Toft - Nowun,Moments To Keep,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Hoogway-x-Nowun-Moments-To-Keep.zip +Leavv/Ivylake,Moonfern,https://lofigirl.com/wp-content/uploads/2022/11/Ivylake-Moonfern.zip +S N U G,Moonglow,https://lofigirl.com/wp-content/uploads/2022/11/Moonglow.zip +Worldtraveller Max Merseny,Morning Coffee,https://lofigirl.com/wp-content/uploads/2023/04/Morning-coffee.zip +Lofi Records,Morning Coffee,https://lofigirl.com/wp-content/uploads/2022/11/Morning-Coffee.zip +Tibeauthetraveler,Motions,https://lofigirl.com/wp-content/uploads/2022/11/Motions.zip +Tibeauthetraveler,Moving On,https://lofigirl.com/wp-content/uploads/2023/01/Moving-on.zip +Dimension32,Mutations,https://lofigirl.com/wp-content/uploads/2022/12/Mutations.zip +Elijah Lee,My Memoir,https://lofigirl.com/wp-content/uploads/2022/11/Elijah-Lee-My-Memoir.zip +Tom Doolie,Naoko,https://lofigirl.com/wp-content/uploads/2022/10/Naoko.zip +Mondo Loops L'aiguille,Nature’s Beauty,https://lofigirl.com/wp-content/uploads/2022/11/Mondo-Loops-x-Laiguille-Natures-Beauty.zip +Eugenio Izzi,Necessary Changes,https://lofigirl.com/wp-content/uploads/2022/11/eugenio-izzi-Necessary-Changes.zip +steezy prime,never alone,https://lofigirl.com/wp-content/uploads/2022/10/Steezy-prime-never-alone.zip +Osaki Tibeauthetraveler,New Beginnings,https://lofigirl.com/wp-content/uploads/2022/10/MP3-Osaki-x-Thibeauthetraveler-New-Beginnings.zip +jhove,new beginnings,https://lofigirl.com/wp-content/uploads/2022/10/jhove-new-beginnings.zip +iamalex Felty,New Day,https://lofigirl.com/wp-content/uploads/2022/11/iamlex-x-felty-New-Day.zip +Mindeliq Neele Harder,New Horizons,https://lofigirl.com/wp-content/uploads/2022/10/MP3-Mindeliq-x-Neele-Harder-New-Horizons.zip +DLJ/Blumen,Night Emotions,https://lofigirl.com/wp-content/uploads/2022/10/Night-Emotions.zip +S N U G Nuver,Nightfall,https://lofigirl.com/wp-content/uploads/2022/11/Nightfall.zip +stream error Lenny Loops,Noctilucent,https://lofigirl.com/wp-content/uploads/2023/02/Noctilucent.zip +cxlt. amies,Nocturne,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Amies-x-cxlt.-Nocturne.zip +Sleepermane Casiio,Nomads,https://lofigirl.com/wp-content/uploads/2022/10/MP3-Casiio-x-Sleepermane-Nomads.zip +WYS,North Pole,https://lofigirl.com/wp-content/uploads/2022/10/North-Pole.zip +Sweet Medicine Mujo,Nostalgia,https://lofigirl.com/wp-content/uploads/2022/10/Nostalgia.zip +swink,Notes From Yesterday,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Swink-Notes-form-Yesterday.zip +amies,Oblivion,https://lofigirl.com/wp-content/uploads/2022/11/Oblivion.zip +dontcry nokiaa,Odyssey,https://lofigirl.com/wp-content/uploads/2022/10/Odyssey.zip +bert,offline,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Bert-offline.zip +less.people,One Day It’s Over,https://lofigirl.com/wp-content/uploads/2022/10/One-day-its-over.zip +Another Silent Weekend blurred figures,one particular moment,https://lofigirl.com/wp-content/uploads/2022/11/one-particular-moment.zip +L'Outlander,One Way Ticket,https://lofigirl.com/wp-content/uploads/2022/11/MP3-loutlander-One-Way-Ticket.zip +less.people,Online Mall Music,https://lofigirl.com/wp-content/uploads/2022/10/Online-Mall-Music.zip +ornithology,Ornithology,https://lofigirl.com/wp-content/uploads/2022/10/MP3-Ornithology-Ornithology.zip +Laffey,Out of Orbit,https://lofigirl.com/wp-content/uploads/2023/02/Out-of-Orbit.zip +epektase j'san,outer space,https://lofigirl.com/wp-content/uploads/2022/11/outer-space.zip +Lucid Green Softy,Overnight,https://lofigirl.com/wp-content/uploads/2022/10/MP3-softy-x-lucid-green-overnight.zip +Sleepermane Casiio,Particles,https://lofigirl.com/wp-content/uploads/2022/11/Particles.zip +dontcry Casiio,Passing By,https://lofigirl.com/wp-content/uploads/2022/11/Casiio-x-DontCry-Passing-By.zip +Phlocalyst/Drxnk Myríad,Patterns,https://lofigirl.com/wp-content/uploads/2023/07/Patterns.zip +Krynoze,Pawmises,https://lofigirl.com/wp-content/uploads/2022/10/Krynoze-Pawmises.zip +Kurt Stewart/Kayba Lomme,Pegan Hill,https://lofigirl.com/wp-content/uploads/2022/11/Pegan-Hill.zip +goosetaf,Perpetual,https://lofigirl.com/wp-content/uploads/2022/10/Perpetual.zip +tender spring Chris Mazuera/SLo Loris,Perspective,https://lofigirl.com/wp-content/uploads/2022/10/Perspective.zip +dontcry nokiaa,Perspectives,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Dontcry-x-Nokiaa-Perspectives.zip +DaniSogen,Place of Purity,https://lofigirl.com/wp-content/uploads/2023/04/Place-of-Purity.zip +Lenny Loops,Places,https://lofigirl.com/wp-content/uploads/2023/01/Places.zip +Ambulo,Polar,https://lofigirl.com/wp-content/uploads/2022/11/Polar.zip +stream error,polaris,https://lofigirl.com/wp-content/uploads/2022/10/stream_error-polaris.zip +HM Surf,Pool Days,https://lofigirl.com/wp-content/uploads/2022/10/Pool-Days.zip +Celestial Alignment,Precious Moments,https://lofigirl.com/wp-content/uploads/2022/11/Precious-Moments.zip +S N U G,Purple Skies,https://lofigirl.com/wp-content/uploads/2022/11/Purple-Skies.zip +So.Lo Goson,QuietPath,https://lofigirl.com/wp-content/uploads/2022/11/So.Lo-x-Goson-QuietPath.zip +S N U G,Quietude,https://lofigirl.com/wp-content/uploads/2022/11/MP3-S-N-U-G-Quietude.zip +TABAL,Rainy Days,https://lofigirl.com/wp-content/uploads/2022/10/MP3-TABAL-Rainy-Days.zip +Eugenio Izzi,Reflections in the moonlight,https://lofigirl.com/wp-content/uploads/2022/11/Reflections-in-the-moonlight.zip +Phlocalyst/Drxnk,Relatives,https://lofigirl.com/wp-content/uploads/2022/11/Relatives.zip +Pandrezz,Relief,https://lofigirl.com/wp-content/uploads/2022/10/Relief.zip +trxxshed,Retro Colors,https://lofigirl.com/wp-content/uploads/2022/11/Retro-Colors.zip +Living Room,Rituals,https://lofigirl.com/wp-content/uploads/2022/11/Rituals.zip +TyLuv,River Glow,https://lofigirl.com/wp-content/uploads/2022/11/River-Glow.zip +TABAL,Riverside Sunset,https://lofigirl.com/wp-content/uploads/2022/11/TABAL-Riverside-Sunset.zip +Chris Mazuera/SLo Loris,Riverside,https://lofigirl.com/wp-content/uploads/2022/10/Riverside.zip +Phlocalyst/Drxnk Mr. Käfer,Roadwalks,https://lofigirl.com/wp-content/uploads/2022/10/Phlocalyst-x-Mr.-Kafer-Roadwalks-.zip +Osaki,Rooftop Memories,https://lofigirl.com/wp-content/uploads/2022/10/Osaki-Rooftop-Memories.zip +kanisan,Rüya,https://lofigirl.com/wp-content/uploads/2022/10/Ruya.zip +eleven,Samsara,https://lofigirl.com/wp-content/uploads/2023/01/Samsara.zip +Drkmnd Production,Satellite Nights,https://lofigirl.com/wp-content/uploads/2022/10/Satellite-Nights.zip +Lawrence Walther Tibeauthetraveler,Scenery,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Tibeauthetraveler-x-lawrence-Scenery.zip +Kinissue,Sea Beams,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Kinissue-Sea-Beams.zip +Ambulo,Sea Forest,https://lofigirl.com/wp-content/uploads/2022/11/Ambulo-Sea-Forest.zip +Softy Wishes and Dreams(Orca),Secrets of Castle,https://lofigirl.com/wp-content/uploads/2023/01/Secret-of-Castle.zip +Ky Akasha,Seeing Beauty in Everything,https://lofigirl.com/wp-content/uploads/2022/10/MP3-Ky-akasha-Seeing-Beauty-in-Everything.zip +Loafy Building,Shelter,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Loafy-Building-Shelter.zip +Softy Kaspa.,Shifting Past,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Kaspa.-x-Softy-Shifting-Past.zip +Softy Pointy features kanisan,Shine On,https://lofigirl.com/wp-content/uploads/2022/11/Shine-On.zip +Dimension32,Silent Emotions,https://lofigirl.com/wp-content/uploads/2022/10/MP3-Dimension-32-Silent-Emotions.zip +Mila Coolness,Silent River,https://lofigirl.com/wp-content/uploads/2022/10/Silent-River.zip +iamalex Felty,Silk,https://lofigirl.com/wp-content/uploads/2022/11/MP3-iamalex-x-Felty-Silk.zip +Late Era/Oatmello,Simple Things,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Oatmello-Simple-Things.zip +Sebastian Kamae / Intoku,Skylines,https://lofigirl.com/wp-content/uploads/2022/12/Skylines.zip +Aso/goodnyght,Sleep Cycles EP,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Aso-Sleep-Cycles-EP.zip +Lofi Records,Sleepless Night,https://lofigirl.com/wp-content/uploads/2022/11/Sleepless-Night.zip +LESKY,Sleepovers,https://lofigirl.com/wp-content/uploads/2022/11/MP3-LESKY-Sleepovers.zip +xander,Sleepwalking,https://lofigirl.com/wp-content/uploads/2023/07/Sleepwalking.zip +towerz,Solemn,https://lofigirl.com/wp-content/uploads/2022/11/Towerz-Solemn.zip +cxlt. amies,Solitude,https://lofigirl.com/wp-content/uploads/2022/10/Solitude.zip +Softy,Sometimes I Wait for You,https://lofigirl.com/wp-content/uploads/2022/10/Sometimes-I-Wait-For-You.zip +cxlt.,Somewhere In Time,https://lofigirl.com/wp-content/uploads/2022/11/Somewhere-in-Time.zip +Raimu,Sons of the Dew,https://lofigirl.com/wp-content/uploads/2022/11/Sons-of-the-Dew.zip +Lofi Records,Soothing Breeze,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Compilation-7-Soothing-Breeze.zip +spencer hunt,Sound Asleep,https://lofigirl.com/wp-content/uploads/2022/10/Sound-asleep.zip +WYS,South Pole,https://lofigirl.com/wp-content/uploads/2023/01/South-Pole.zip +tender spring,"Springtime, with friends",https://lofigirl.com/wp-content/uploads/2022/11/MP3-Tender-Spring-Springtime-with-friends.zip +fourwalls,Staring Contest,https://lofigirl.com/wp-content/uploads/2022/11/Staring-Contest.zip +kudo,Staring Through,https://lofigirl.com/wp-content/uploads/2022/10/Staring-Through.zip +xander Tonion,Stories of Synergy,https://lofigirl.com/wp-content/uploads/2022/11/Tonion-x-xander.-stories-of-synergy.zip +Laffey,Summer Nights,https://lofigirl.com/wp-content/uploads/2022/10/Summer-Nights.zip +hi jude,Sun Swells,https://lofigirl.com/wp-content/uploads/2022/10/MP3-hi-jude-Sun-Swells.zip +Sinnr,Sunday Morning,https://lofigirl.com/wp-content/uploads/2022/11/sinnr-Sunday-Morning.zip +No spirit Wishes and Dreams(Orca),Sunny Hill,https://lofigirl.com/wp-content/uploads/2023/01/Sunny-Hill.zip +Purrple Cat,Sweet Dreams,https://lofigirl.com/wp-content/uploads/2022/10/Sweet-Dreams.zip +Nadav Cohen,Tales from Babylon,https://lofigirl.com/wp-content/uploads/2022/12/Tales-from-Babylon.zip +hevi,talking to myself,https://lofigirl.com/wp-content/uploads/2022/11/Hevi-Talking-to-myself.zip +BVG,Temple Garden,https://lofigirl.com/wp-content/uploads/2022/11/Temple-Garden.zip +Hoffybeats Lenny Loops,Tender Memories,https://lofigirl.com/wp-content/uploads/2022/11/Tender-Memories.zip +Mondo Loops,Terrapin,https://lofigirl.com/wp-content/uploads/2022/10/Terrapin.zip +WYS,The Bad Party,https://lofigirl.com/wp-content/uploads/2022/11/MP3-WYS-The-Bad-Party.zip +Softy no one's perfect,The Beauty Around Us,https://lofigirl.com/wp-content/uploads/2022/10/The-Beatuty-Around-Us.zip +Softy,The Breeze,https://lofigirl.com/wp-content/uploads/2022/11/softy-The-Breeze.zip +Softy,The Day I Passed,https://lofigirl.com/wp-content/uploads/2022/11/Softy-The-Day-I-Passed.zip +DaniSogen,The Gate to Serenity,https://lofigirl.com/wp-content/uploads/2022/10/DaniSogen-The-Gate-to-Serenity.zip +Tenno,The Inner Light,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Tenno-The-Inner-Light.zip +DaniSogen,The Magic Unfolds,https://lofigirl.com/wp-content/uploads/2022/11/DaniSogen-The-Magic-Unfolds.zip +Charlee,The meaning of love,https://lofigirl.com/wp-content/uploads/2023/05/The-meaning-of-love.zip +Tenno,The Prophecy,https://lofigirl.com/wp-content/uploads/2022/10/The-Prophecy.zip +C4C,The Pursuit of Simplicity EP,https://lofigirl.com/wp-content/uploads/2022/11/The-pursuit-of-Simplicity.zip +Allem Iversom/Harris Cole,The Ridge,https://lofigirl.com/wp-content/uploads/2022/10/The-Ridge.zip +towerz hi jude,The Shallows,https://lofigirl.com/wp-content/uploads/2022/11/MP3-hi-jude-x-towerz-the-shallows.zip +Raimu,The Spirit Within,https://lofigirl.com/wp-content/uploads/2022/10/Raimu-The-Spirit-Within.zip +Kaspa.,The Story,https://lofigirl.com/wp-content/uploads/2022/11/The-Story.zip +Cosmic Koala Lucid Keys,The Tale Of The Druids,https://lofigirl.com/wp-content/uploads/2023/01/The-Tale-Of-The-Druids.zip +WYS Sweet Medicine,The Way Back,https://lofigirl.com/wp-content/uploads/2022/11/MP3-WYS-x-Sweet-Medicine-The-Way-Back.zip +kokoro,The Way Home,https://lofigirl.com/wp-content/uploads/2022/10/Kokoro-The-Way-Home.zip +Hoogway,Thin Lines,https://lofigirl.com/wp-content/uploads/2022/10/Thin-Lines.zip +mell-ø,thinking about you,https://lofigirl.com/wp-content/uploads/2022/10/mell-o-thinking-about-you.zip +Team Astro,Three of Us,https://lofigirl.com/wp-content/uploads/2022/11/Team-Astro-Three-of-Us.zip +DLJ/Blumen,Time Capsule,https://lofigirl.com/wp-content/uploads/2022/11/MP3-DLJ-Time-Capsule.zip +dontcry nokiaa,Time In Motion,https://lofigirl.com/wp-content/uploads/2022/11/Time-in-Motion.zip +chief.,Time Remembered,https://lofigirl.com/wp-content/uploads/2022/10/Time-Remembered.zip +mell-ø,Time To Go,https://lofigirl.com/wp-content/uploads/2022/11/MP3-mell-o-Time-To-Go.zip +Chau Sara,Time Travel,https://lofigirl.com/wp-content/uploads/2022/10/MP3-Chau-Sara-Time-Travel.zip +dontcry Bcalm,times we had,https://lofigirl.com/wp-content/uploads/2023/07/times-we-had.zip +Prithvi,Timescapes : Longer Nights,https://lofigirl.com/wp-content/uploads/2022/11/Prithvi-Timescapes.Longer-Nights.zip +jisatsu Nadav Cohen,To the moon and back,https://lofigirl.com/wp-content/uploads/2022/10/aMess-x-jisatsu-To-the-moon-and-back-.zip +Sweet Medicine Krynoze,Tomorrow Comes,https://lofigirl.com/wp-content/uploads/2022/11/Krynoze-x-Sweet-Medicine-Tomorrow-Comes.zip +,Tomorrows That Follow,https://lofigirl.com/wp-content/uploads/2022/10/Tomorrows-That-Follow.zip +G Mills,Tranquility,https://lofigirl.com/wp-content/uploads/2022/10/Tranquility.zip +Squeeda,Transform,https://lofigirl.com/wp-content/uploads/2023/02/Transform.zip +Tibeauthetraveler,Travel Buddies,https://lofigirl.com/wp-content/uploads/2022/11/Tibeauthetraveler-Travel-Buddies.zip +Team Astro,Travelers,https://lofigirl.com/wp-content/uploads/2022/11/Travelers.zip +Sleepermane Casiio,Underneath,https://lofigirl.com/wp-content/uploads/2022/10/Underneath.zip +Sleepermane Casiio,Unexplored,https://lofigirl.com/wp-content/uploads/2022/10/Casiio-x-Sleepermane-Unexplored.zip +Sleepermane,Unfolding,https://lofigirl.com/wp-content/uploads/2022/11/Sleepermane-Unfloding.zip +Yasumu/Plant Guy,Unravel,https://lofigirl.com/wp-content/uploads/2022/12/Unravel.zip +Yasumu/Plant Guy,Until Forever,https://lofigirl.com/wp-content/uploads/2022/10/Until-Forever.zip +towerz,Until Tomorrow,https://lofigirl.com/wp-content/uploads/2022/10/Until-Tomorrow.zip +kyu,Until we meet again,https://lofigirl.com/wp-content/uploads/2022/10/Kayou.-Until-we-meet-again-.zip +Elijah Lee,Vanishing Journey,https://lofigirl.com/wp-content/uploads/2022/11/Vanishing-Journey.zip +Khutko,Violet,https://lofigirl.com/wp-content/uploads/2022/11/Violet.zip +Sebastian Kamae / Intoku Elior/Aylior/Epona,Vondelpark,https://lofigirl.com/wp-content/uploads/2022/10/Vondelpark.zip +Elior/Aylior/Epona,Walls,https://lofigirl.com/wp-content/uploads/2022/10/Walls.zip +Yasumu/Plant Guy,Way of Life,https://lofigirl.com/wp-content/uploads/2022/10/Way-of-Life.zip +Sleepermane Sling Dilly,Weightless,https://lofigirl.com/wp-content/uploads/2022/11/Sling-Dilly-x-Sleepermane-Weightless.zip +lilac,When I Dreamt of You,https://lofigirl.com/wp-content/uploads/2022/11/When-I-dreamt-of-You.zip +hevi,When I’m Gone,https://lofigirl.com/wp-content/uploads/2022/10/MP3-Hevi-When-im-Gone.zip +Tesk / Nvmb.,Wilderness,https://lofigirl.com/wp-content/uploads/2022/11/Wilderness.zip +L'Outlander,Willpower,https://lofigirl.com/wp-content/uploads/2022/11/LOutlander-Willpower.zip +takeo (aka Tysu) spencer hunt,Window Seat,https://lofigirl.com/wp-content/uploads/2022/10/Window-Seat.zip +spencer hunt,Windy City,https://lofigirl.com/wp-content/uploads/2022/10/MP3-Spencer-Hunt-Windy-City.zip +hevi H.1,Winter Getaway,https://lofigirl.com/wp-content/uploads/2023/01/Winter-Getaway.zip +Dr dundiff,Winter Love,https://lofigirl.com/wp-content/uploads/2022/11/Winter-Love.zip +Casiio,Wondering,https://lofigirl.com/wp-content/uploads/2022/11/Wondering.zip +Sitting Duck,Wonderland Chapter 1,https://lofigirl.com/wp-content/uploads/2022/10/Wonderland-Chapter-1.zip +Sitting Duck,Wonderland Chapter II,https://lofigirl.com/wp-content/uploads/2022/11/Wonderland-Chapter-II.zip +Flitz&Suppe Mr. Käfer,Yōkai,https://lofigirl.com/wp-content/uploads/2022/10/Yokai.zip +cxlt.,Your Light,https://lofigirl.com/wp-content/uploads/2022/10/cxlt.-Your-Light-.zip +Sebastian Kamae / Intoku Elior/Aylior/Epona,Zero,https://lofigirl.com/wp-content/uploads/2022/10/Zero.zip diff --git a/update_releases.py b/update_releases.py new file mode 100644 index 0000000..1741623 --- /dev/null +++ b/update_releases.py @@ -0,0 +1,127 @@ +""" +1. Go to https://lofigirl.com/releases/ +2. Get all the releases - artist and release title +3. For each release get the download link +4. Store it in a csv file in the repo +""" +import csv + +from bs4 import BeautifulSoup +import httpx + +RELEASES_URL = "https://lofigirl.com/releases/" + +headers = { + 'user-agent': 'lofigirl-downloader/0.2.0', + 'content-type': 'application/x-www-form-urlencoded' +} + +client = httpx.Client( + headers=headers, + timeout=30.0 +) + +page = 1 + +release_links = set() + +def get_release_links(): + while True: + + response = client.post( + RELEASES_URL, + data={ + "action": "jet_engine_ajax", + "handler": "get_listing", + "query[post_status]": "publish", + "query[found_posts]": "383", + "query[max_num_pages]": "39", + "query[post_type]": "releases", + "query[orderby]": "", + "query[order]": "DESC", + "query[paged]": f"{page}", + "query[posts_per_page]": "50", + "query[suppress_filters]": "false", + "query[jet_smart_filters]": "jet-engine/all-releases", + "page_settings[post_id]": "423", + "page_settings[queried_id]": "17370|WP_Post", + "page_settings[element_id]": "4b7c1a2", + "page_settings[page]": f"{page}", + "listing_type": "elementor" + } + ) + + html_data = response.json().get('data').get('html') + + soup = BeautifulSoup(html_data, 'html.parser') + + links = soup.find_all('a', {'class': 'jet-engine-listing-overlay-link'}) + + if links: + for link in links: + release_links.add(link.get('href')) + else: + print(f'No results for page: {page}') + break + + print(f'Page {page}: done') + page = page + 1 + +def get_release_info(): + + release_links = sorted(list(release_links)) + + all_info = [] + + for link in release_links: + print(link) + response = client.get(link) + + artists = '' + title = '' + + if response.status_code == httpx.codes.OK: + soup = BeautifulSoup(response.content, 'html.parser') + + title_div = soup.find('div', {'data-id': '29d3c6b'}) + if title_div: + title = title_div.text + title = title.strip() + title = title.replace('\n', '') + + artists_div = soup.find('div', {'data-listing-id': '15303'}) + if artists_div: + artists = artists_div.text + artists = artists.strip() + artists = artists.replace('\n', '') + + download = soup.find('div', {'data-id': '311b599'}) + if download: + download_link = download.find('a').get('href') + else: + print('NO DOWNLOAD LINK', artists, '-', title) + continue + + print(artists, '-', title) + all_info.append({ + 'artists': artists, + 'title': title, + 'link': download_link + }) + else: + print(f'Problem: {link}') + + with open('releases.csv', 'w', newline='') as csv_file: + fieldnames = ['artists', 'title', 'link'] + writer = csv.DictWriter(csv_file, fieldnames=fieldnames) + + writer.writeheader() + + for info in all_info: + writer.writerow(info) + +if __name__ == '__main__': + + get_release_links() + + get_release_info() From 55d139becf2496590e13d49c4c6dd6dc446d9041 Mon Sep 17 00:00:00 2001 From: surfer190 Date: Mon, 7 Aug 2023 21:56:20 +0200 Subject: [PATCH 2/8] Add code for new layout --- download.py | 60 +++++++++++ download_releases.py | 249 ------------------------------------------- original.py | 98 ----------------- readme.md | 12 ++- requirements.txt | 7 +- 5 files changed, 73 insertions(+), 353 deletions(-) create mode 100644 download.py delete mode 100644 download_releases.py delete mode 100644 original.py diff --git a/download.py b/download.py new file mode 100644 index 0000000..58a20f6 --- /dev/null +++ b/download.py @@ -0,0 +1,60 @@ +""" +1. Give the user a list of releases to download +2. User selects +""" +import csv +import pathlib + +import httpx + +DOWNLOAD_DIR = pathlib.Path(__file__).parent / 'downloads' + +client = httpx.Client( + headers={ + 'user-agent': 'lofigirl-downloader/0.2.0' + } +) + +def download_file(file_href): + + # Stream the download + # with client.stream("GET", file_href) as reader: + # for data in reader.iter_bytes(): + # print(data) + + file_response = client.get(file_href) + + if file_response.status_code == httpx.codes.OK: + content_type = file_response.headers.get('content-type') + print(content_type) + content_disposition = file_response.headers.get('content-disposition') + print(content_disposition) + + if content_type == 'application/pdf': + extension = 'pdf' + elif content_type == 'image/png': + extension = 'png' + elif content_type == 'image/jpeg': + extension = 'jpg' + elif content_type == 'application/zip': + extension = 'zip' + else: + print(f"Unexpected file extension '{content_type}' for {content_disposition}") + return + + file_name_with_extension = file_href.split('/')[-1] + + with open(DOWNLOAD_DIR / file_name_with_extension, 'wb') as current_file: + current_file.write(file_response.content) + print(f'Completed: {file_href}') + +if __name__ == "__main__": + with open('releases.csv', newline='') as csvfile: + reader = csv.DictReader(csvfile) + for row in reader: + artists = row.get('artists') + title = row.get('title') + link = row.get('link') + + # check if file exists + download_file(link) diff --git a/download_releases.py b/download_releases.py deleted file mode 100644 index a5a9c6e..0000000 --- a/download_releases.py +++ /dev/null @@ -1,249 +0,0 @@ -""" -Coped from reddit: https://www.reddit.com/r/LofiGirl/comments/phtdxb/i_made_a_python_script_to_quickly_download_new/ -""" -from bs4 import BeautifulSoup -import urllib3 -import os -import wget -import eyed3 -from colorama import Fore, Style -import argparse -from collections import namedtuple, OrderedDict - -# URL Configuration -RELEASE_URL = "https://lofigirl.com/blogs/releases" -RELEASE_LINK_PREFIX = "https://lofigirl.com" - -# Release & Sound Definition -Release = namedtuple("Release", ("name","link","artists")) -SoundFile = namedtuple("SoundFile", ("title","link","artists")) -TranslatorGroup = namedtuple("TranslatorGroup", ("title","artist","album")) - -def download_lofi(output_dir, download, release_numbers, translators): - # HTTP Manager - http = urllib3.PoolManager() - - releases = manage_info(http) - - if download: - if release_numbers: - selected_releases = [] - for release_num in release_numbers: - selected_releases.append(releases[release_num]) - releases = selected_releases - - download_releases(http, releases, output_dir, translators=translators) - else: - print("Skipping download. Specify -d with optional release numbers to download") - -def manage_info(http): - - # get html file of releases page - resp = http.request("GET", RELEASE_URL) - soup = BeautifulSoup(resp.data, "html.parser") - - # prepare variables for crunching releases html - releases = [] - - # crunch releases html, look for releases names, artists and URLs - for link in soup.find_all("div", class_="Cv_release_mini_wrap_inner"): - release_link = RELEASE_LINK_PREFIX + link.find("a").get("href") - name = link.find("h2").string - artists = link.find("i").string - releases.append(Release(name, release_link, artists)) - - # remove duplicates in links and names, then reverse all 3 arrays so the newest ones are at the bottom of the command line - releases = list(OrderedDict(((release.link, release) for release in releases)).values()) - releases = list(OrderedDict(((release.name, release) for release in releases)).values()) - releases.reverse() - - # print all releases for the user to choose, get user input - for i, release in enumerate(releases): - print( - Fore.RED - + str(i) - + ". " - + Fore.BLUE - + release.name - + Style.RESET_ALL - + " by " - + Fore.GREEN - + release.artists - ) - print(Style.RESET_ALL) - - return releases - -def download_release(http, release, output_dir, translators): - print(f"Fetching Release: {release.name} by {release.artists}") - - # get html file of user selected release - resp = http.request("GET", release.link) - soup = BeautifulSoup(resp.data, "html.parser") - - # crunch release html for its name and link to its image - album_name = soup.find( - "div", class_="cv_custom_release_album_main_heading" - ).h2.string - image_link = "https:" + str( - soup.find("div", class_="cv_custom_body_image_contents_album_part").a.get( - "href" - ) - ) - - # crunch release html for links, titles and artists of individual songs - sound_files = [] - for link in soup.find_all("div", class_="cv_custom_album_play_contents_inner_part"): - try: - sound_file_link = link.find( - "div", class_="cv_custom_download_icon_part").get( - "data-audio-src" - ) - except AttributeError as error: - print(error) - print("No data source found...skipping") - continue - - sound_file_title=link.find( - "div", class_="cv_custom_custom_content_description" - ).h4.string.strip()[3:].strip() - - try: - sound_file_artists = link.find( - "div", class_="cv_custom_custom_content_description" - ).p.string.strip() - except AttributeError as error: - print(error) - print("Using h4 tag") - sound_file_artists = link.find( - "div", class_="cv_custom_custom_content_description" - ).h4.string.strip() - - sound_files.append(SoundFile(sound_file_title, sound_file_link, sound_file_artists)) - - # show user the links to the credit templates and release, also generate YouTube credits - print(Fore.RED + "Here is the usage policy and credit templates:" + Style.RESET_ALL) - print("https://lofigirl.com/pages/use-the-music") - print(Fore.RED + "Here's the link to the release:" + Style.RESET_ALL) - print(release.link) - print( - Fore.RED - + "And here's the credit template for youtube for an entire album. Note that watch and listen links only show search queries on their respective platforms:" - + Style.RESET_ALL - ) - for sound_file in sound_files: - print("- " + sound_file.artists + " - " + sound_file.title) - print("- Provided by Lofi Girl") - print( - "- Watch: https://www.youtube.com/c/LofiGirl/search?query=" - + album_name.replace(" ", "") - ) - print("- Listen: https://open.spotify.com/search/" + album_name.replace(" ", "")) - - album_name_stripped = album_name.translate(translators.album) - - # make a folder with the name of the album and download the cover into it - album_path = os.path.join(output_dir, album_name_stripped) - try: - os.mkdir(album_path) - except FileExistsError as error: - print(error) - print( - "Folder exists - moving on...delete the folder and rerun for a fresh download" - ) - return - - if not image_link: - breakpoint() - wget.download(image_link, out=os.path.join(album_path, "cover.png")) - - # create credits.txt file with the same content like what is printed into the console above^ - with open(album_path + "/credits.txt", "w") as f: - for sound_file in sound_files: - f.write("- " + sound_file.artists + " - " + sound_file.title + "\n") - f.close() - - # download all songs 1 by 1 into the new folder, access it's metadata and fill album, artist, title and track num tags. Also create a trivial playlist file - f = open(album_path + "/playlist.m3u", "w") - for i, sound_file in enumerate(sound_files): - artist = ( - sound_file.artists - .translate(translators.artist) - .replace("\u2019", "'") - .replace("\u012b", "") - ) - title = ( - sound_file.title - .translate(translators.title) - .replace("\u2019", "'") - .replace("\u012b", "") - ) - - file_basename = f"{artist}-{title}.mp3" - filename = os.path.join(album_path, file_basename) - - if not sound_file.link: - breakpoint() - - wget.download(sound_file.link, out=filename) - audiofile = eyed3.load(filename) - audiofile.tag.album = album_name.replace("\u2019", "'").replace("\u012b", "") - audiofile.tag.artist = ( - sound_file.artists.replace("\u2019", "'").replace("\u012b", "") - ) - audiofile.tag.title = ( - sound_file.title.replace("\u2019", "'").replace("\u012b", "") - ) - audiofile.tag.track_num = i + 1 - - try: - audiofile.tag.save() - except UnicodeEncodeError as error: - breakpoint() - # .replace(u"\u2019", "'") - f.write(filename) - f.close() - - print() - print(Fore.RED + "all done" + Style.RESET_ALL) - -def download_releases(http, releases, output_dir, translators): - print(f"Downloading {len(releases)} releases") - for selected_release in releases: - download_release(http, selected_release, output_dir, translators=translators) - -def cli(): - def is_dir(path): - if os.path.isdir(path): - return path - else: - return NotADirectoryError(f"Supplied path is not a directory: {path}") - - parser = argparse.ArgumentParser(prog=__file__, description="Downloader for lofigirl.com") - parser.add_argument("-o","--output", help="Output folder", type=is_dir, default="downloads", required=True) - parser.add_argument("-d","--download", help="Specify releases to be downloaded. Leave blank for all", type=int, nargs="*") - parser.add_argument("--title-remove", help="Remove all specified characters within the title", type=str, default="") - parser.add_argument("--title-replace", help="Specific characters within the title to be replaced with --title-replace-with", type=str, default="") - parser.add_argument("--title-replace-with", help="Specific characters within the title to replace occurences of --title-replace", type=str, default="") - parser.add_argument("--artist-remove", help="Remove all specified characters within the artist", type=str, default="") - parser.add_argument("--artist-replace", help="Specific characters within the artist to be replaced with --artist-replace-with", type=str, default="") - parser.add_argument("--artist-replace-with", help="Specific characters within the artist to replace occurences of --artist-replace", type=str, default="") - parser.add_argument("--album-remove", help="Remove all specified characters within the album", type=str, default="") - parser.add_argument("--album-replace", help="Specific characters within the album to be replaced with --album-replace-with", type=str, default="") - parser.add_argument("--album-replace-with", help="Specific characters within the album to replace occurences of --album-replace", type=str, default="") - - args = parser.parse_args() - return args - -def translator(replace_characters, replace_with_characters, remove_characters): - return str.maketrans(replace_characters, replace_with_characters, remove_characters) - -if __name__ == "__main__": - args = cli() - - title_translator = translator(args.title_replace, args.title_replace_with, args.title_remove) - artist_translator = translator(args.artist_replace, args.artist_replace_with, args.artist_remove) - album_translator = translator(args.album_replace, args.album_replace_with, args.album_remove) - tg = TranslatorGroup(title_translator, artist_translator, album_translator) - - download_lofi(output_dir=args.output, download=args.download is not None, release_numbers=args.download, translators=tg) diff --git a/original.py b/original.py deleted file mode 100644 index 959c348..0000000 --- a/original.py +++ /dev/null @@ -1,98 +0,0 @@ -from bs4 import BeautifulSoup -import urllib3 -import os -import wget -import eyed3 -from colorama import Fore, Style - -#get html file of releases page -http = urllib3.PoolManager() -resp = http.request("GET","https://lofigirl.com/blogs/releases") -soup = BeautifulSoup(resp.data, 'html.parser') - -#prepare variables for crunching releases html -releases_link_prefix = 'https://lofigirl.com' -releases_links = [] -releases_names = [] -releases_artists = [] - -#crunch releases html, look for releases names, artists and URLs -for link in soup.find_all('div', class_='Cv_release_mini_wrap_inner'): - releases_links.append(releases_link_prefix+link.find('a').get('href')) - releases_names.append(link.find('h2').string) - releases_artists.append(link.find('i').string) - -#remove duplicates in links and names, then reverse all 3 arrays so the newest ones are at the bottom of the command line -releases_links = list(dict.fromkeys(releases_links)) -releases_names = list(dict.fromkeys(releases_names)) -releases_links.reverse() -releases_names.reverse() -releases_artists.reverse() - -#print all releases for the user to choose, get user input -for i in range (0,len(releases_links)): - print(Fore.RED + str(i+1) + '. '+Fore.BLUE+releases_names[i]+Style.RESET_ALL+' by '+Fore.GREEN+releases_artists[i]) -print(Style.RESET_ALL) -selected_release = input('Write number of the release you want to download: ') - -#get html file of user selected release -resp = http.request('GET',releases_links[int(selected_release)-1]) -soup = BeautifulSoup(resp.data, 'html.parser') - -#crunch release html for its name and link to its image -album_name = soup.find('div', class_='cv_custom_release_album_main_heading').h2.string -image_link = 'https:'+str(soup.find('div', class_='cv_custom_body_image_contents_album_part').a.get('href')) - -#crunch release html for links, titles and artists of individual songs -sound_file_links = [] -sound_file_title = [] -sound_file_artist = [] -for link in soup.find_all('div', class_='cv_custom_album_play_contents_inner_part'): - sound_file_links.append(link.find('div', class_='cv_custom_download_icon_part').get('data-audio-src')) - sound_file_title.append(link.find('div', class_='cv_custom_custom_content_description').h4.string.strip()[3:]) - sound_file_artist.append(link.find('div', class_='cv_custom_custom_content_description').p.string.strip()) - -#show user the links to the credit templates and release, also generate YouTube credits -print(Fore.RED+'Here is the usage policy and credit templates:'+Style.RESET_ALL) -print('https://lofigirl.com/pages/use-the-music') -print(Fore.RED+'Here\'s the link to the release:'+Style.RESET_ALL) -print(releases_links[int(selected_release)-1]) -print(Fore.RED+'And here\'s the credit template for youtube for an entire album. Note that watch and listen links only show search queries on their respective platforms:'+Style.RESET_ALL) -for i in range(0,len(sound_file_links)): - print('- '+sound_file_artist[i] + ' - ' + sound_file_title[i]) -print('- Provided by Lofi Girl') -print('- Watch: https://www.youtube.com/c/LofiGirl/search?query='+album_name.replace(' ','')) -print('- Listen: https://open.spotify.com/search/'+album_name.replace(' ','')) - -#make a folder with the name of the album and download the cover into it -os.mkdir(album_name) -wget.download(image_link, out=os.path.join(album_name, 'cover.png')) - -#create credits.txt file with the same content like what is printed into the console above^ -with open(album_name+'/credits.txt','w') as f: - f.write('Here is the usage policy and credit templates:\nhttps://lofigirl.com/pages/use-the-music\nHere\'s the link to the release:\n') - f.write(releases_links[int(selected_release)-1]) - f.write('\nAnd here\'s the credit template for youtube for an entire album. Note that watch and listen links only show search queries on their respective platforms:\n') - for i in range(0,len(sound_file_links)): - f.write('- '+sound_file_artist[i] + ' - ' + sound_file_title[i]+'\n') - f.write('- Provided by Lofi Girl\n') - f.write('- Watch: https://www.youtube.com/c/LofiGirl/search?query='+album_name.replace(' ','')+'\n') - f.write('- Listen: https://open.spotify.com/search/'+album_name.replace(' ','')) - f.close() - -#download all songs 1 by 1 into the new folder, access it's metadata and fill album, artist, title and track num tags. Also create a trivial playlist file -f = open(album_name+'/playlist.m3u','w') -for i in range(0,len(sound_file_links)): - wget.download(sound_file_links[i], out=os.path.join(album_name, sound_file_title[i] + '.mp3')) - audiofile = eyed3.load(os.path.join(album_name, sound_file_title[i] + '.mp3')) - audiofile.tag.album = album_name - audiofile.tag.artist = sound_file_artist[i] - audiofile.tag.title = sound_file_title[i] - audiofile.tag.track_num = i+1 - audiofile.tag.save() - f.write(sound_file_title[i]+'.mp3\n') -f.close() - - -print() -print(Fore.RED+'all done'+Style.RESET_ALL) \ No newline at end of file diff --git a/readme.md b/readme.md index 0cfd8ba..c9a1dd5 100644 --- a/readme.md +++ b/readme.md @@ -9,7 +9,13 @@ Download all lofi girl releases pip install -r requirements.txt - python download_releases.py + python download.py + +### Update CSV + +If new releases are made one can update the csv with: + + python update_releases.py ### Audio Quality @@ -22,6 +28,10 @@ At February 2023: * Size: 12GB * Number of Albums: 324 +At August 2023: + +* Number of Albums: 381 + ### Credit Orignal author: [Deadlibor](https://www.reddit.com/user/Deadlibor/) post on [reddit](https://www.reddit.com/r/LofiGirl/comments/phtdxb/i_made_a_python_script_to_quickly_download_new/) diff --git a/requirements.txt b/requirements.txt index 3ca3be7..dc92cce 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,2 @@ -beautifulsoup4~=4.11.2 -urllib3~=1.26.14 -wget==3.2 -eyed3~=0.9.7 -colorama~=0.4.6 +beautifulsoup4==4.12.2 +httpx==0.24.1 From 1c7a4b6a37040db217e7168753ff50b902e0aacd Mon Sep 17 00:00:00 2001 From: surfer190 Date: Tue, 8 Aug 2023 07:59:52 +0200 Subject: [PATCH 3/8] Skip already downloaded files --- download.py | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/download.py b/download.py index 58a20f6..ad61ab2 100644 --- a/download.py +++ b/download.py @@ -1,9 +1,11 @@ """ 1. Give the user a list of releases to download 2. User selects +3. By default download all """ import csv import pathlib +import sys import httpx @@ -22,6 +24,15 @@ def download_file(file_href): # for data in reader.iter_bytes(): # print(data) + file_name_with_extension = file_href.split('/')[-1] + + file_path = DOWNLOAD_DIR / file_name_with_extension + + # check if zip already exists + if pathlib.Path(file_path).is_file(): + print(f'File exists: {file_path}') + return + file_response = client.get(file_href) if file_response.status_code == httpx.codes.OK: @@ -30,21 +41,13 @@ def download_file(file_href): content_disposition = file_response.headers.get('content-disposition') print(content_disposition) - if content_type == 'application/pdf': - extension = 'pdf' - elif content_type == 'image/png': - extension = 'png' - elif content_type == 'image/jpeg': - extension = 'jpg' - elif content_type == 'application/zip': + if content_type == 'application/zip': extension = 'zip' else: print(f"Unexpected file extension '{content_type}' for {content_disposition}") - return - - file_name_with_extension = file_href.split('/')[-1] + sys.exit(1) - with open(DOWNLOAD_DIR / file_name_with_extension, 'wb') as current_file: + with open(file_path, 'wb') as current_file: current_file.write(file_response.content) print(f'Completed: {file_href}') From 8dfcf0132f74c37aba46ea6e2fcb5d49accf3068 Mon Sep 17 00:00:00 2001 From: surfer190 Date: Tue, 8 Aug 2023 08:22:15 +0200 Subject: [PATCH 4/8] Code format --- download.py | 57 ++++++++++++++--------------- update_releases.py | 90 ++++++++++++++++++++++------------------------ 2 files changed, 70 insertions(+), 77 deletions(-) diff --git a/download.py b/download.py index ad61ab2..42f4cf5 100644 --- a/download.py +++ b/download.py @@ -9,13 +9,10 @@ import httpx -DOWNLOAD_DIR = pathlib.Path(__file__).parent / 'downloads' +DOWNLOAD_DIR = pathlib.Path(__file__).parent / "downloads" + +client = httpx.Client(headers={"user-agent": "lofigirl-downloader/0.2.0"}) -client = httpx.Client( - headers={ - 'user-agent': 'lofigirl-downloader/0.2.0' - } -) def download_file(file_href): @@ -23,41 +20,41 @@ def download_file(file_href): # with client.stream("GET", file_href) as reader: # for data in reader.iter_bytes(): # print(data) - - file_name_with_extension = file_href.split('/')[-1] - + + file_name_with_extension = file_href.split("/")[-1] + file_path = DOWNLOAD_DIR / file_name_with_extension - + # check if zip already exists if pathlib.Path(file_path).is_file(): - print(f'File exists: {file_path}') + print(f"File exists: {file_path}") return - + file_response = client.get(file_href) - + if file_response.status_code == httpx.codes.OK: - content_type = file_response.headers.get('content-type') - print(content_type) - content_disposition = file_response.headers.get('content-disposition') - print(content_disposition) - - if content_type == 'application/zip': - extension = 'zip' + content_type = file_response.headers.get("content-type") + content_disposition = file_response.headers.get("content-disposition") + + if content_type == "application/zip": + extension = "zip" else: - print(f"Unexpected file extension '{content_type}' for {content_disposition}") + print( + f"Unexpected file extension '{content_type}' for {content_disposition}" + ) sys.exit(1) - - with open(file_path, 'wb') as current_file: + + with open(file_path, "wb") as current_file: current_file.write(file_response.content) - print(f'Completed: {file_href}') + print(f"Completed: {file_href}") + if __name__ == "__main__": - with open('releases.csv', newline='') as csvfile: + with open("releases.csv", newline="") as csvfile: reader = csv.DictReader(csvfile) for row in reader: - artists = row.get('artists') - title = row.get('title') - link = row.get('link') - - # check if file exists + artists = row.get("artists") + title = row.get("title") + link = row.get("link") + download_file(link) diff --git a/update_releases.py b/update_releases.py index 1741623..1dadef9 100644 --- a/update_releases.py +++ b/update_releases.py @@ -12,22 +12,20 @@ RELEASES_URL = "https://lofigirl.com/releases/" headers = { - 'user-agent': 'lofigirl-downloader/0.2.0', - 'content-type': 'application/x-www-form-urlencoded' + "user-agent": "lofigirl-downloader/0.2.0", + "content-type": "application/x-www-form-urlencoded", } -client = httpx.Client( - headers=headers, - timeout=30.0 -) +client = httpx.Client(headers=headers, timeout=30.0) page = 1 release_links = set() + def get_release_links(): while True: - + response = client.post( RELEASES_URL, data={ @@ -47,81 +45,79 @@ def get_release_links(): "page_settings[queried_id]": "17370|WP_Post", "page_settings[element_id]": "4b7c1a2", "page_settings[page]": f"{page}", - "listing_type": "elementor" - } + "listing_type": "elementor", + }, ) - html_data = response.json().get('data').get('html') + html_data = response.json().get("data").get("html") - soup = BeautifulSoup(html_data, 'html.parser') + soup = BeautifulSoup(html_data, "html.parser") - links = soup.find_all('a', {'class': 'jet-engine-listing-overlay-link'}) + links = soup.find_all("a", {"class": "jet-engine-listing-overlay-link"}) if links: for link in links: - release_links.add(link.get('href')) + release_links.add(link.get("href")) else: - print(f'No results for page: {page}') + print(f"No results for page: {page}") break - - print(f'Page {page}: done') + + print(f"Page {page}: done") page = page + 1 + def get_release_info(): - + release_links = sorted(list(release_links)) - + all_info = [] - + for link in release_links: print(link) response = client.get(link) - - artists = '' - title = '' + + artists = "" + title = "" if response.status_code == httpx.codes.OK: - soup = BeautifulSoup(response.content, 'html.parser') - - title_div = soup.find('div', {'data-id': '29d3c6b'}) + soup = BeautifulSoup(response.content, "html.parser") + + title_div = soup.find("div", {"data-id": "29d3c6b"}) if title_div: title = title_div.text title = title.strip() - title = title.replace('\n', '') - - artists_div = soup.find('div', {'data-listing-id': '15303'}) + title = title.replace("\n", "") + + artists_div = soup.find("div", {"data-listing-id": "15303"}) if artists_div: artists = artists_div.text artists = artists.strip() - artists = artists.replace('\n', '') - - download = soup.find('div', {'data-id': '311b599'}) + artists = artists.replace("\n", "") + + download = soup.find("div", {"data-id": "311b599"}) if download: - download_link = download.find('a').get('href') + download_link = download.find("a").get("href") else: - print('NO DOWNLOAD LINK', artists, '-', title) + print("NO DOWNLOAD LINK", artists, "-", title) continue - - print(artists, '-', title) - all_info.append({ - 'artists': artists, - 'title': title, - 'link': download_link - }) + + print(artists, "-", title) + all_info.append({"artists": artists, "title": title, "link": download_link}) else: - print(f'Problem: {link}') + print(f"Problem: {link}") - with open('releases.csv', 'w', newline='') as csv_file: - fieldnames = ['artists', 'title', 'link'] + with open("releases.csv", "w", newline="") as csv_file: + fieldnames = ["artists", "title", "link"] writer = csv.DictWriter(csv_file, fieldnames=fieldnames) - + writer.writeheader() - + for info in all_info: writer.writerow(info) -if __name__ == '__main__': + +if __name__ == "__main__": get_release_links() - + get_release_info() From e4d7093087d8e219cd55d952123cc755bd58e7da Mon Sep 17 00:00:00 2001 From: surfer190 Date: Tue, 8 Aug 2023 11:02:56 +0200 Subject: [PATCH 5/8] Update readme --- readme.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index c9a1dd5..8d10a12 100644 --- a/readme.md +++ b/readme.md @@ -30,7 +30,8 @@ At February 2023: At August 2023: -* Number of Albums: 381 +* Size: 12.18 GB (zipped) +* Number of Albums: 378 ### Credit From 88febf02565561ade2d64ddebf2599775eb74b80 Mon Sep 17 00:00:00 2001 From: surfer190 Date: Sat, 16 Sep 2023 09:13:34 +0200 Subject: [PATCH 6/8] Update releases * Fix UnboundLocalError and UnicodeEncodeError --- update_releases.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/update_releases.py b/update_releases.py index 1dadef9..fa83251 100644 --- a/update_releases.py +++ b/update_releases.py @@ -16,16 +16,15 @@ "content-type": "application/x-www-form-urlencoded", } -client = httpx.Client(headers=headers, timeout=30.0) - -page = 1 +client = httpx.Client(headers=headers, timeout=120.0) release_links = set() - def get_release_links(): - while True: + page = 1 + + while True: response = client.post( RELEASES_URL, data={ @@ -68,11 +67,12 @@ def get_release_links(): def get_release_info(): - release_links = sorted(list(release_links)) + # make a variable for function scope - to stop UnboundLocalError + current_release_links = sorted(list(release_links)) all_info = [] - for link in release_links: + for link in current_release_links: print(link) response = client.get(link) @@ -106,7 +106,7 @@ def get_release_info(): else: print(f"Problem: {link}") - with open("releases.csv", "w", newline="") as csv_file: + with open("releases.csv", "w", newline="", encoding='utf-8') as csv_file: fieldnames = ["artists", "title", "link"] writer = csv.DictWriter(csv_file, fieldnames=fieldnames) From ffc9828edd1584eecb566cd224ef88846cae4328 Mon Sep 17 00:00:00 2001 From: surfer190 Date: Sat, 16 Sep 2023 09:15:22 +0200 Subject: [PATCH 7/8] Update releases --- releases.csv | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/releases.csv b/releases.csv index 12f0861..c927d80 100644 --- a/releases.csv +++ b/releases.csv @@ -2,6 +2,7 @@ artists,title,link Lofi Records,1 A.M Chill Session,https://lofigirl.com/wp-content/uploads/2023/05/synthwave-compilation.zip Lofi Records,1 Am. Study Session,https://lofigirl.com/wp-content/uploads/2022/10/1-A.M-Study-Session.zip Lofi Records,12 Am. Study Session,https://lofigirl.com/wp-content/uploads/2022/11/12AMStudySession.zip +Lofi Records,2 A.M Chill Session,https://lofigirl.com/wp-content/uploads/2023/09/2-am-chill-session.zip Lofi Records,2 Am. Study Session,https://lofigirl.com/wp-content/uploads/2022/10/2-AM-Study-Session.zip Lofi Records,3 Am. Study Session,https://lofigirl.com/wp-content/uploads/2022/11/3-am-study-session.zip Lofi Records,4 Am. Study Session,https://lofigirl.com/wp-content/uploads/2022/11/4-A.M-Study-Session.zip @@ -10,6 +11,7 @@ Laffey,A Day At A Time,https://lofigirl.com/wp-content/uploads/2022/11/A-Day-at- BluntOne Baen Mow,A Day in the Life,https://lofigirl.com/wp-content/uploads/2022/11/Bluntone-x-Bean-Mow-A-Day-in-the-Life.zip tender spring blurred figures,A Friendly Warmth,https://lofigirl.com/wp-content/uploads/2022/10/A-Friendly-Warmth.zip cxlt. Nuver,A Moment Away,https://lofigirl.com/wp-content/uploads/2022/11/cxlt.-Nuver-A-Moment-Away.zip +Dinis,"a piece of my heart, for you",https://lofigirl.com/wp-content/uploads/2023/09/a-piece-of-my-heart-for-you.zip Nadav Cohen,A place above heaven,https://lofigirl.com/wp-content/uploads/2022/11/MP3-aMess-A-place-above-heaven.zip BVG,A Spirit’s Tale,https://lofigirl.com/wp-content/uploads/2022/11/MP3-BVG-A-Spirits-Tale.zip kainbeats,A Walk Through the Sky,https://lofigirl.com/wp-content/uploads/2022/10/Kainbeats-A-Walk-Through-the-Sky-.zip @@ -52,6 +54,7 @@ Cosmic Koala Lucid Keys,Beautiful Days,https://lofigirl.com/wp-content/uploads/ Hoogway,Beauty In All Forms,https://lofigirl.com/wp-content/uploads/2022/11/Beauty-in-all-Forms.zip brillion,Bedtime Stories Pt. 2,https://lofigirl.com/wp-content/uploads/2022/10/bedtime-stories-pt-2.zip brillion,Bedtime Stories Pt. 3,https://lofigirl.com/wp-content/uploads/2022/10/Bedtime-Stories-Pt.-3.zip +brillion,Bedtime Stories Pt.4,https://lofigirl.com/wp-content/uploads/2023/09/Bedtime-story-pt-4.zip jhove,Been Thinking,https://lofigirl.com/wp-content/uploads/2022/10/Been-Thinking.zip Softy Otis Lucid Keys,Before It Snows,https://lofigirl.com/wp-content/uploads/2022/10/Softy-Before-it-snows.zip hevi,"Before It’s Late, Pt. 2",https://lofigirl.com/wp-content/uploads/2022/11/MP3-Hevi-Before-Its-Late-Pt.-2.zip @@ -91,7 +94,7 @@ xander,Daydreaming,https://lofigirl.com/wp-content/uploads/2022/11/Daydreaming.z M e a d o w,Days Of Tomorrow,https://lofigirl.com/wp-content/uploads/2022/11/Days-of-Tomorrow.zip Peak Twilight,Departure,https://lofigirl.com/wp-content/uploads/2022/11/Departure.zip Emil Rottmayer,Descend,https://lofigirl.com/wp-content/uploads/2023/06/Descend.zip -Odd Panda gCoope,Desired Views,https://lofigirl.com/wp-content/uploads/2023/06/Desired-views.zip +gCoope,Desired Views,https://lofigirl.com/wp-content/uploads/2023/06/Desired-views.zip Akīn Living Room,Directions,https://lofigirl.com/wp-content/uploads/2022/11/Akin-x-Living-Room-Directions.zip amies,Discoveries,https://lofigirl.com/wp-content/uploads/2022/11/amies-Discoveries.zip Blue Wednesday,Discovery,https://lofigirl.com/wp-content/uploads/2022/10/Discovery.zip @@ -104,10 +107,12 @@ Purrple Cat,Distant Worlds,https://lofigirl.com/wp-content/uploads/2022/10/Dista Late Era/Oatmello,Dove,https://lofigirl.com/wp-content/uploads/2022/10/Dove.zip Chris Mazuera/SLo Loris,Dozing,https://lofigirl.com/wp-content/uploads/2022/10/Dozing.zip jhove,Dream Tapes,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Jhove-dream-tapes.zip +Living Room,Dreamcatcher,https://lofigirl.com/wp-content/uploads/2023/09/Dreamcatcher.zip Dreamfield Goson,Dreams of Angels,https://lofigirl.com/wp-content/uploads/2022/11/Goson-x-Dreamfield-Dreams-Of-Angels.zip kyu,Dreamscapes,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Kayou-Dreamscapes.zip Sleepermane,Dreamtime,https://lofigirl.com/wp-content/uploads/2022/10/Sleepermane-Dreamtime.zip kainbeats hevi,Drifting Away,https://lofigirl.com/wp-content/uploads/2022/10/Drifting-away.zip +Recalibration Machine Kooma/Less Gravity Lawrence Walther,Dune Days,https://lofigirl.com/wp-content/uploads/2023/09/Dune-Days.zip Claudia Lessing Dario Lessing kanisan,Edda,https://lofigirl.com/wp-content/uploads/2023/01/Edda.zip Bcalm,Elements,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Bcalm-Elements.zip DaniSogen,Enchantments,https://lofigirl.com/wp-content/uploads/2022/11/MP3-DaniSogen-Enchantments.zip @@ -142,6 +147,7 @@ Hoogway,Forever Ago,https://lofigirl.com/wp-content/uploads/2022/10/Forever-Ago. Laffey,Forever Changing,https://lofigirl.com/wp-content/uploads/2022/10/Forever-Changing.zip vhsdreamers,Foudroie,https://lofigirl.com/wp-content/uploads/2023/06/vhsdreamers.zip Hoogway,Fragments Of The Moon,https://lofigirl.com/wp-content/uploads/2023/07/Fragments-Of-The-Moon.zip +Softy,Frozen Lands,https://lofigirl.com/wp-content/uploads/2023/09/Frozen-Lands.zip a[way],Frozen Roses,https://lofigirl.com/wp-content/uploads/2022/10/Frozen-Roses.zip SPEECHLESS,Future Feelings,https://lofigirl.com/wp-content/uploads/2022/10/Future-feelings.zip kalaido,Ghosts of the Floating World,https://lofigirl.com/wp-content/uploads/2022/11/Ghost-of-the-Floating-World.zip @@ -172,6 +178,7 @@ dryhope/Mavine,Inference,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Mav Bcalm,Innocence,https://lofigirl.com/wp-content/uploads/2022/10/Bcalm-Innoncence.zip TABAL,Inside Space,https://lofigirl.com/wp-content/uploads/2022/10/Inside-Space.zip Nothingtosay,Introspective,https://lofigirl.com/wp-content/uploads/2022/10/Introspective.zip +HoKø,Jazz in Tokyo,https://lofigirl.com/wp-content/uploads/2023/09/Jazz-in-Tokyo.zip Glimlip dontcry,Jiro Dreams,https://lofigirl.com/wp-content/uploads/2022/10/Jiro-Dreams.zip Project AER,Journals,https://lofigirl.com/wp-content/uploads/2022/10/MP3-Project-AER-Journals.zip Nuver,Kalopsia,https://lofigirl.com/wp-content/uploads/2022/10/Nuver-Kalopsia.zip @@ -257,6 +264,7 @@ Kurt Stewart/Kayba Lomme,Pegan Hill,https://lofigirl.com/wp-content/uploads/202 goosetaf,Perpetual,https://lofigirl.com/wp-content/uploads/2022/10/Perpetual.zip tender spring Chris Mazuera/SLo Loris,Perspective,https://lofigirl.com/wp-content/uploads/2022/10/Perspective.zip dontcry nokiaa,Perspectives,https://lofigirl.com/wp-content/uploads/2022/11/MP3-Dontcry-x-Nokiaa-Perspectives.zip +Casiio Elijah Lee,Phantasm,https://lofigirl.com/wp-content/uploads/2023/09/Phantasm.zip DaniSogen,Place of Purity,https://lofigirl.com/wp-content/uploads/2023/04/Place-of-Purity.zip Lenny Loops,Places,https://lofigirl.com/wp-content/uploads/2023/01/Places.zip Ambulo,Polar,https://lofigirl.com/wp-content/uploads/2022/11/Polar.zip @@ -270,6 +278,7 @@ TABAL,Rainy Days,https://lofigirl.com/wp-content/uploads/2022/10/MP3-TABAL-Rainy Eugenio Izzi,Reflections in the moonlight,https://lofigirl.com/wp-content/uploads/2022/11/Reflections-in-the-moonlight.zip Phlocalyst/Drxnk,Relatives,https://lofigirl.com/wp-content/uploads/2022/11/Relatives.zip Pandrezz,Relief,https://lofigirl.com/wp-content/uploads/2022/10/Relief.zip +Lofi Records,Restful Holidays,https://lofigirl.com/wp-content/uploads/2023/09/summer-compilation.zip trxxshed,Retro Colors,https://lofigirl.com/wp-content/uploads/2022/11/Retro-Colors.zip Living Room,Rituals,https://lofigirl.com/wp-content/uploads/2022/11/Rituals.zip TyLuv,River Glow,https://lofigirl.com/wp-content/uploads/2022/11/River-Glow.zip @@ -314,6 +323,7 @@ hi jude,Sun Swells,https://lofigirl.com/wp-content/uploads/2022/10/MP3-hi-jude-S Sinnr,Sunday Morning,https://lofigirl.com/wp-content/uploads/2022/11/sinnr-Sunday-Morning.zip No spirit Wishes and Dreams(Orca),Sunny Hill,https://lofigirl.com/wp-content/uploads/2023/01/Sunny-Hill.zip Purrple Cat,Sweet Dreams,https://lofigirl.com/wp-content/uploads/2022/10/Sweet-Dreams.zip +Krynoze,Take A Paws,https://lofigirl.com/wp-content/uploads/2023/09/Take-a-Paws.zip Nadav Cohen,Tales from Babylon,https://lofigirl.com/wp-content/uploads/2022/12/Tales-from-Babylon.zip hevi,talking to myself,https://lofigirl.com/wp-content/uploads/2022/11/Hevi-Talking-to-myself.zip BVG,Temple Garden,https://lofigirl.com/wp-content/uploads/2022/11/Temple-Garden.zip @@ -321,6 +331,7 @@ Hoffybeats Lenny Loops,Tender Memories,https://lofigirl.com/wp-content/uploads/ Mondo Loops,Terrapin,https://lofigirl.com/wp-content/uploads/2022/10/Terrapin.zip WYS,The Bad Party,https://lofigirl.com/wp-content/uploads/2022/11/MP3-WYS-The-Bad-Party.zip Softy no one's perfect,The Beauty Around Us,https://lofigirl.com/wp-content/uploads/2022/10/The-Beatuty-Around-Us.zip +Pierson Booth,The Beginning,https://lofigirl.com/wp-content/uploads/2023/09/The-Beginning.zip Softy,The Breeze,https://lofigirl.com/wp-content/uploads/2022/11/softy-The-Breeze.zip Softy,The Day I Passed,https://lofigirl.com/wp-content/uploads/2022/11/Softy-The-Day-I-Passed.zip DaniSogen,The Gate to Serenity,https://lofigirl.com/wp-content/uploads/2022/10/DaniSogen-The-Gate-to-Serenity.zip @@ -329,6 +340,7 @@ DaniSogen,The Magic Unfolds,https://lofigirl.com/wp-content/uploads/2022/11/Dani Charlee,The meaning of love,https://lofigirl.com/wp-content/uploads/2023/05/The-meaning-of-love.zip Tenno,The Prophecy,https://lofigirl.com/wp-content/uploads/2022/10/The-Prophecy.zip C4C,The Pursuit of Simplicity EP,https://lofigirl.com/wp-content/uploads/2022/11/The-pursuit-of-Simplicity.zip +Kinissue,The Realization,https://lofigirl.com/wp-content/uploads/2023/09/The-Realization.zip Allem Iversom/Harris Cole,The Ridge,https://lofigirl.com/wp-content/uploads/2022/10/The-Ridge.zip towerz hi jude,The Shallows,https://lofigirl.com/wp-content/uploads/2022/11/MP3-hi-jude-x-towerz-the-shallows.zip Raimu,The Spirit Within,https://lofigirl.com/wp-content/uploads/2022/10/Raimu-The-Spirit-Within.zip From 9d6591dec8eab9ae5eb0ef0cc5aded0596f6691f Mon Sep 17 00:00:00 2001 From: surfer190 Date: Sat, 16 Sep 2023 09:35:05 +0200 Subject: [PATCH 8/8] Handle unicodeencode error --- download.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/download.py b/download.py index 42f4cf5..140bbb3 100644 --- a/download.py +++ b/download.py @@ -50,7 +50,7 @@ def download_file(file_href): if __name__ == "__main__": - with open("releases.csv", newline="") as csvfile: + with open("releases.csv", newline="", encoding='utf-8') as csvfile: reader = csv.DictReader(csvfile) for row in reader: artists = row.get("artists")