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

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)