πŸ“œ Tutorial: Membuat Detektor "Now Playing" untuk Last.fm dan AIMP di Python
Current time: 10-16-2025, 05:08 AM
Donasi koin to Terzier's
Users browsing this thread: 1 Guest(s)
Author: Terzier
Last Post: Terzier
Replies 2
Views 167

Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
πŸ“œ Tutorial: Membuat Detektor "Now Playing" untuk Last.fm dan AIMP di Python
  • Bagikan post ini ke Sosial Media!
    • Shorcut Sosial Media
    • Copy Paste Link berikut
    • Links
    • BBCode
    • HTML
#1
Code:
import pylast
import time
import os
import threading
import keyboard
import win32gui
import win32process
import psutil

# -------------------------------------------------------------
# KONFIGURASI Last.fm
# -------------------------------------------------------------
API_KEY = '**************************'
API_SECRET = '**************************'
username = '**************************'
output_file = 'D:\\Music Harddisk\\NowPlaying\\nowplaying.txt'

# -------------------------------------------------------------
# FUNGSI Last.fm
# -------------------------------------------------------------
network = pylast.LastFMNetwork(api_key=API_KEY, api_secret=API_SECRET, username=username)
stop_event = threading.Event()

def get_ytm_nowplaying():
    """Mendapatkan lagu yang sedang diputar dari Last.fm."""
    try:
        user = network.get_user(username)
        track = user.get_now_playing()
        if track:
            return f"{track.get_artist().get_name()} - {track.get_title()}"
    except Exception:
        pass
    return None

# -------------------------------------------------------------
# LOGIKA UTAMA
# -------------------------------------------------------------
def monitor_music():
    """Logika utama untuk mendeteksi dan menulis lagu."""
    last_status = None # Variabel untuk menyimpan status sebelumnya

    while not stop_event.is_set():
        now_playing = get_ytm_nowplaying()
        
        # Cek apakah status sekarang berbeda dengan status sebelumnya
        if now_playing != last_status:
            # Jika berbeda, perbarui file dan cetak ke konsol
            with open(output_file, 'w', encoding='utf-8') as f:
                f.write(now_playing if now_playing else "No audio playing")
            
            print(f"Updated: {now_playing if now_playing else 'No audio playing'}")
            
            # Perbarui last_status dengan status yang baru
            last_status = now_playing
        
        time.sleep(5)

def main():
    """Fungsi utama."""
    print("Monitoring music... Press 'C' to stop.")
    monitor_thread = threading.Thread(target=monitor_music)
    monitor_thread.start()
    try:
        keyboard.wait('c')
    except keyboard.KeyboardError:
        pass
    finally:
        stop_event.set()
        monitor_thread.join()
    print("Stopped.")

if __name__ == "__main__":
    main()
Tuhan Yesus itu baikΒ  Angel
Reply
  • Bagikan post ini ke Sosial Media!
    • Shorcut Sosial Media
    • Copy Paste Link berikut
    • Links
    • BBCode
    • HTML
#2
Code:
import pylast
import time
import os
import threading
import keyboard
import sys

# -------------------------------------------------------------
# KONFIGURASI Last.fm
# -------------------------------------------------------------
API_KEY = '**************************'
API_SECRET = '**************************'
username = '**************************'
output_file = 'D:\\Music Harddisk\\WowPlaying\\nowplaying.txt'

# -------------------------------------------------------------
# FUNGSI Last.fm
# -------------------------------------------------------------
network = pylast.LastFMNetwork(api_key=API_KEY, api_secret=API_SECRET, username=username)
stop_event = threading.Event()

def get_ytm_nowplaying():
    """Mendapatkan lagu yang sedang diputar dari Last.fm."""
    try:
        user = network.get_user(username)
        track = user.get_now_playing()
        if track:
            return f"{track.get_artist().get_name()} - {track.get_title()}"
    except Exception:
        pass
    return None

# -------------------------------------------------------------
# LOGIKA UTAMA
# -------------------------------------------------------------
def monitor_music():
    """Logika utama untuk mendeteksi dan menulis lagu."""
    last_status = None
    loading_dots = 0

    while not stop_event.is_set():
        now_playing = get_ytm_nowplaying()
        
        # Jika status lagu berubah
        if now_playing != last_status:
            # Jika ada lagu baru, langsung perbarui
            if now_playing:
                with open(output_file, 'w', encoding='utf-8') as f:
                    f.write(now_playing)
                print(f"Updated: {now_playing}")
                last_status = now_playing
            else:
                # Jika status berubah menjadi 'tidak ada lagu'
                # Maka, atur ulang status agar loading muncul di bawah
                last_status = now_playing

        # Jika tidak ada lagu dan last_status sudah tidak ada lagu
        if not now_playing and last_status == now_playing:
            loading_dots = (loading_dots + 1) % 4
            loading_text = "Loading" + "." * loading_dots
            
            # Tulis "Loading..." ke file dan konsol
            with open(output_file, 'w', encoding='utf-8') as f:
                f.write(loading_text)
            
            # Cetak di konsol
            print(f"Updated: {loading_text}", end='\r')
            sys.stdout.flush()

        time.sleep(1)

def main():
    """Fungsi utama."""
    print("Monitoring music... Press 'C' to stop.")
    monitor_thread = threading.Thread(target=monitor_music)
    monitor_thread.start()
    try:
        keyboard.wait('c')
    except keyboard.KeyboardError:
        pass
    finally:
        stop_event.set()
        monitor_thread.join()
        # Saat berhenti, hapus teks loading
        with open(output_file, 'w', encoding='utf-8') as f:
            f.write("Stopped.")
        print("\nStopped.")

if __name__ == "__main__":
    main()
Tuhan Yesus itu baikΒ  Angel
Reply
  • Bagikan post ini ke Sosial Media!
    • Shorcut Sosial Media
    • Copy Paste Link berikut
    • Links
    • BBCode
    • HTML
#3
Code:
# =============================================================
# SCRIPT DETEKTOR "NOW PLAYING"
# =============================================================
# Script ini berfungsi untuk mendeteksi lagu yang sedang diputar
# melalui Last.fm (untuk YouTube Music) dan menulis informasinya
# ke dalam sebuah file teks. File ini akan dibaca oleh
# aplikasi seperti RadioCaster.

# =============================================================
# LOG PERUBAHAN
# =============================================================
# 1.0 (2025-09-06) - Versi Awal
#    - Berfokus pada deteksi Last.fm.
#    - Menulis "No audio playing" jika tidak ada lagu.
#    - Pengecekan dilakukan setiap 5 detik.

# 1.1 (2025-09-06) - Penyesuaian Sinkronisasi
#    - Menambahkan logika perbandingan status (`last_status`).
#    - Skrip hanya akan memperbarui file dan mencetak "Updated" jika
#      lagu berubah, berhenti, atau mulai diputar.
#    - Menghapus import win32gui, win32process, dan psutil karena
#      fungsi deteksi jendela tidak lagi digunakan di versi ini.

# =============================================================
# LIBRARY YANG DIBUTUHKAN
# =============================================================
import pylast           # Untuk interaksi dengan Last.fm API.
import time             # Untuk jeda (sleep) antar pengecekan.
import os               # Untuk fungsi terkait sistem file.
import keyboard         # Untuk mendeteksi tombol `C` untuk berhenti.
import threading        # Untuk menjalankan monitoring di thread terpisah.
# Catatan: Library win32gui, win32process, dan psutil dihapus di
# versi ini karena kita tidak lagi mendeteksi melalui judul jendela.
# import win32gui
# import win32process
# import psutil

# -------------------------------------------------------------
# KONFIGURASI Last.fm
# -------------------------------------------------------------
API_KEY = '**************************'
API_SECRET = '**************************'
username = '**************************'
# Lokasi file teks output yang akan dibaca oleh RadioCaster.
# Path ini harus SAMA PERSIS dengan yang diatur di RadioCaster & AIMP.
output_file = 'D:\\Music Harddisk\\WowPlaying\\nowplaying.txt'

# -------------------------------------------------------------
# FUNGSI Last.fm
# -------------------------------------------------------------
network = pylast.LastFMNetwork(api_key=API_KEY, api_secret=API_SECRET, username=username)
stop_event = threading.Event()

def get_ytm_nowplaying():
    """Mendapatkan lagu yang sedang diputar dari Last.fm.
    Fungsi ini berfungsi untuk mendeteksi musik yang di-scrobble
    ke Last.fm (biasanya dari YouTube Music).
    """
    try:
        user = network.get_user(username)
        track = user.get_now_playing()
        if track:
            return f"{track.get_artist().get_name()} - {track.get_title()}"
    except Exception:
        # Jika ada error (misalnya, koneksi internet putus),
        # fungsi akan mengembalikan None.
        pass
    return None

# -------------------------------------------------------------
# LOGIKA UTAMA
# -------------------------------------------------------------
def monitor_music():
    """Logika utama untuk mendeteksi dan menulis lagu."""
    # Variabel untuk menyimpan status lagu sebelumnya.
    # Ini digunakan agar file hanya di-update saat ada perubahan.
    last_status = None

    while not stop_event.is_set():
        now_playing = get_ytm_nowplaying()
        
        # Cek apakah status sekarang berbeda dengan status sebelumnya.
        if now_playing != last_status:
            # Jika berbeda, perbarui file dan cetak di konsol.
            with open(output_file, 'w', encoding='utf-8') as f:
                f.write(now_playing if now_playing else "No audio playing")
            
            print(f"Updated: {now_playing if now_playing else 'No audio playing'}")
            
            # Perbarui `last_status` dengan status yang baru.
            last_status = now_playing
        
        # Jeda selama 5 detik sebelum pengecekan berikutnya.
        time.sleep(5)

def main():
    """Fungsi utama untuk menjalankan program."""
    print("Monitoring music... Press 'C' to stop.")
    # Buat thread baru agar monitoring berjalan di latar belakang.
    monitor_thread = threading.Thread(target=monitor_music)
    monitor_thread.start()
    try:
        # Tunggu hingga tombol 'C' ditekan.
        keyboard.wait('c')
    except keyboard.KeyboardError:
        pass
    finally:
        # Jika tombol 'C' ditekan, atur `stop_event` untuk menghentikan thread.
        stop_event.set()
        # Tunggu thread selesai.
        monitor_thread.join()
    print("Stopped.")

if __name__ == "__main__":
    main()
Tuhan Yesus itu baikΒ  Angel
Reply



Was This Thread Useful ? - Please Link To Us
Share
Links
BBCode
HTML


Forum Jump:


Users browsing this thread: 1 Guest(s)