136 lines
4.9 KiB
Python
136 lines
4.9 KiB
Python
import os
|
|
import random
|
|
import requests
|
|
|
|
# Main code written by Halhadus, optimized and stylized by DeepSeek-R1
|
|
|
|
def randomize(listurl): # Data fetching and cleaning
|
|
musiclist = requests.get(listurl).text.split("\n")
|
|
musiclist = [m.strip() for m in musiclist if m.strip() != ""]
|
|
|
|
# HTML base template
|
|
html = """<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;700&display=swap" rel="stylesheet">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Halhadus' Music List</title>
|
|
<link rel="icon" type="image/png" href="assets/favicon.png">
|
|
<meta name="description" content="Halhadus' Music List">
|
|
<meta property="og:title" content="Halhadus' Music List">
|
|
<meta property="og:description" content="Halhadus' Music List">
|
|
<meta property="og:image" content="assets/favicon.png">
|
|
<meta property="og:url" content="https://halhadus.rocks/musiclist.html">
|
|
<style>
|
|
.music-card {
|
|
background: #2a2a2a;
|
|
border-radius: 8px;
|
|
padding: 15px;
|
|
margin: 15px 0;
|
|
transition: transform 0.2s;
|
|
border: 1px solid #333333;
|
|
}
|
|
.music-card:hover {
|
|
transform: translateY(-2px);
|
|
}
|
|
.play-button {
|
|
background: #333333;
|
|
border: 1px solid #444444;
|
|
border-radius: 5px;
|
|
color: #ffffff;
|
|
padding: 6px 12px;
|
|
cursor: pointer;
|
|
margin-left: 15px;
|
|
font-family: 'JetBrains Mono', monospace;
|
|
font-size: 0.9em;
|
|
}
|
|
.play-button:hover {
|
|
background: #3a3a3a;
|
|
}
|
|
.thumbnail {
|
|
border-radius: 5px;
|
|
margin-top: 12px;
|
|
max-width: 280px;
|
|
border: 1px solid #333333;
|
|
}
|
|
.source-banner {
|
|
background: #2a2a2a;
|
|
padding: 12px;
|
|
border-radius: 8px;
|
|
margin: 20px 0;
|
|
text-align: center;
|
|
border: 1px solid #333333;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body style="background-color: #1f1f1f; color: #ffffff; font-family: 'JetBrains Mono', monospace;">
|
|
<div style="max-width: 800px; margin: 0 auto; padding: 20px;">
|
|
<h1>Music List</h1>
|
|
|
|
<!-- Source Banner --> <div class="source-banner"> <a href="https://git.halhadus.rocks/Halhadus/my-music-list" style="color: #ffffff; text-decoration: none;"> [ 📜 Source Code & History ]
|
|
</a> </div>
|
|
|
|
<!-- Control Buttons -->
|
|
<div style="margin-bottom: 30px; display: flex; gap: 10px;">
|
|
<button onclick="window.location.href = 'https://halhadus.rocks/index.html'"
|
|
class="play-button">
|
|
← Main Page
|
|
</button>
|
|
<button onclick="window.open(document.links[Math.floor(Math.random() * document.links.length)].href)"
|
|
class="play-button">
|
|
Random Track →
|
|
</button>
|
|
</div>"""
|
|
|
|
random.shuffle(musiclist)
|
|
musiccount = 0
|
|
|
|
# Music cards creation
|
|
for music in musiclist:
|
|
try:
|
|
parts = music.split(" --- ")
|
|
if len(parts) != 3:
|
|
continue
|
|
|
|
title, vid, platform = parts
|
|
musiccount += 1
|
|
|
|
# Thumbnail URL
|
|
thumbnail_url = f"https://img.youtube.com/vi/{vid}/hqdefault.jpg"
|
|
|
|
# Determine URL based on platform
|
|
base_url = "music.youtube.com" if platform == "YTM" else "www.youtube.com"
|
|
yt_url = f"https://{base_url}/watch?v={vid}"
|
|
|
|
# HTML block
|
|
html += f"""
|
|
<div class="music-card">
|
|
<div style="margin-bottom: 10px; display: flex; align-items: center;">
|
|
<span style="color: #888; margin-right: 10px;">#{musiccount}</span>
|
|
<span style="flex-grow: 1;">{title}</span>
|
|
<button onclick="window.open('{yt_url}')" class="play-button">
|
|
{platform} →
|
|
</button>
|
|
</div>
|
|
<img src="{thumbnail_url}"
|
|
class="thumbnail"
|
|
alt="{title} Cover Art"
|
|
onerror="this.style.display='none'">
|
|
</div>"""
|
|
|
|
except Exception as e:
|
|
print(f"Error processing: {music} - {str(e)}")
|
|
|
|
# Footer section
|
|
html += f"""
|
|
<div style="margin-top: 40px; text-align: center; color: #666;">
|
|
<div style="margin-bottom: 15px;">
|
|
Total Tracks: {musiccount}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>"""
|
|
|
|
return html
|