85 lines
3.1 KiB
Python
85 lines
3.1 KiB
Python
import requests
|
|
from bs4 import BeautifulSoup
|
|
from datetime import datetime, timedelta
|
|
import base64
|
|
import argparse
|
|
import random
|
|
import psycopg2 # Afegit per a la connexió amb PostgreSQL
|
|
|
|
# URL de l'emissora amb entropia per evitar la memòria cau
|
|
BASE_URL = "https://emisora.org.es/kiss-fm/"
|
|
URL_WITH_ENTROPY = f"{BASE_URL}?rand={random.randint(0, 100000)}"
|
|
|
|
# Funció per a connectar a la base de dades PostgreSQL
|
|
def connect_db():
|
|
return psycopg2.connect(
|
|
dbname="playlist",
|
|
user="kiss",
|
|
password="PASSWORD", # Substitueix per la teva contrasenya real
|
|
host="localhost"
|
|
)
|
|
|
|
# Procésa el darrer element `li` de `data-playlist-previous-songs`
|
|
def fetch_last_playlist_song():
|
|
headers = {
|
|
'Cache-Control': 'no-cache',
|
|
'Pragma': 'no-cache',
|
|
'User-Agent': 'Mozilla/5.0 (Windows NT 5.1; rv:40.0) Gecko/20100101 Firefox/40.0'
|
|
}
|
|
|
|
response = requests.get(URL_WITH_ENTROPY, headers=headers)
|
|
if response.status_code == 200:
|
|
soup = BeautifulSoup(response.content, 'html.parser')
|
|
last_li = soup.select_one('ul[data-playlist-previous-songs] li:last-child')
|
|
|
|
if last_li:
|
|
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
title = last_li.get('title', 'N/A')
|
|
artist = last_li.find('span', class_='playlist__artist-name').text
|
|
song = last_li.find('span', class_='playlist__song-name').text
|
|
img_tag = last_li.find('img')
|
|
img_src = img_tag['src'] if img_tag else ''
|
|
|
|
# Obtenim les dades de la imatge i les convertim en base64
|
|
if img_src:
|
|
img_response = requests.get(img_src)
|
|
if img_response.status_code == 200:
|
|
img_data = base64.b64encode(img_response.content).decode('utf-8')
|
|
img_md = f""
|
|
else:
|
|
img_md = "No disponible"
|
|
else:
|
|
img_md = "No disponible"
|
|
|
|
# Inserir a la base de dades
|
|
conn = connect_db()
|
|
cursor = conn.cursor()
|
|
cursor.execute(
|
|
"INSERT INTO kissfm (timestamp, title, artist, song, img_md) VALUES (%s, %s, %s, %s, %s)",
|
|
(timestamp, title, artist, song, img_md)
|
|
)
|
|
conn.commit()
|
|
cursor.close()
|
|
conn.close()
|
|
|
|
# Genera un resum diari de la música detectada
|
|
def generate_daily_summary():
|
|
yesterday = (datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d")
|
|
|
|
# Aquí s'hauria d'implementar la lògica per llegir el fitxer de resum diari
|
|
# i desar les dades a la base de dades com en fetch_last_playlist_song()
|
|
|
|
# Analitza els arguments de la línia de comandes
|
|
def main():
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('--resum', action='store_true', help="Generar el resum diari")
|
|
args = parser.parse_args()
|
|
|
|
if args.resum:
|
|
generate_daily_summary() # Aquí cridem a la funció que hauries d'implementar
|
|
else:
|
|
fetch_last_playlist_song()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main() |