Skrip ini dibuat dengan bantuan chatGPT dengan beberapa perubahan. Skrip ini mengizinkan kamu untuk memperbarui status mendengarkan dari lastfm ke blusky. Contohnya bisa kamu temukan disini @scrobble.naturbrilian.dpdns.org
Cara mendapatkan Kata Sandi Aplikasi (Bluesky)
- Buka pengaturan di bsky
- Pergi ke Privasi dan Keamanan
- Dan pilih Kata Sandi Aplikasi
Untuk lastfm
- Buat token API mu di sini
- Then copy your apikey
Note
Karena ini hanya memerlukan sedikit penyesuaian agar berfungsi dengan sempurna, Anda bebas mengubahnya.
Dengan Gambar
import time
import requests
from atproto import Client, models
# Ubah kredensial di bawah ini
LASTFM_USER = "Your_Username"
LASTFM_API_KEY = "Your_LastFM_Apikey"
BLUESKY_HANDLE = "Your_Handle_Bsky"
BLUESKY_PASSWORD = "Your_bsky_password"
def get_now_playing(user, api_key):
url = "http://ws.audioscrobbler.com/2.0/"
params = {
"method": "user.getrecenttracks",
"user": user,
"api_key": api_key,
"format": "json",
"limit": 1
}
resp = requests.get(url, params=params).json()
track = resp["recenttracks"]["track"][0]
return track
def main():
client = Client()
client.login(BLUESKY_HANDLE, BLUESKY_PASSWORD)
last_posted = None
while True:
try:
track = get_now_playing(LASTFM_USER, LASTFM_API_KEY)
artist = track["artist"]["#text"]
title = track["name"]
album = track["album"]["#text"]
cover_url = track["image"][-1]["#text"]
unique_id = f"{artist}-{title}"
if unique_id != last_posted:
message = f"Recently Played:
Artist: {artist}
Title: {title}
Album: {album}"
img_data = requests.get(cover_url).content
upload = client.com.atproto.repo.upload_blob(img_data)
embed = models.AppBskyEmbedImages.Main(
images=[models.AppBskyEmbedImages.Image(
image=upload.blob,
alt=f"Album cover for {album}"
)]
)
client.send_post(text=message, embed=embed)
print("Post sukses:", message)
last_posted = unique_id
time.sleep(30)
except Exception as e:
print(" Error:", e)
time.sleep(60)
if __name__ == "__main__":
main()
Hanya teks
import requests, time, datetime
LASTFM_USER = "USERNAMEKAMU"
LASTFM_API_KEY = "APIKEYKAMU"
BSKY_HANDLE = "username.bsky.social"
BSKY_PASS = "APPSPASSWORDKAMU"
last_track = None
while True:
r = requests.get("http://ws.audioscrobbler.com/2.0/", params={
"method": "user.getrecenttracks",
"user": LASTFM_USER,
"api_key": LASTFM_API_KEY,
"format": "json",
"limit": 1
}).json()
track = r["recenttracks"]["track"][0]
if "@attr" in track and track["@attr"].get("nowplaying") == "true":
artist = track["artist"]["#text"]
title = track["name"]
text = f"🎵 Now Playing: {artist} – {title}"
if text != last_track:
# login Bluesky
session = requests.post("https://bsky.social/xrpc/com.atproto.server.createSession",
json={"identifier": BSKY_HANDLE, "password": BSKY_PASS}).json()
headers = {
"Authorization": f"Bearer {session['accessJwt']}",
"Content-Type": "application/json"
}
post = {
"repo": session["did"],
"collection": "app.bsky.feed.post",
"record": {
"text": text,
"createdAt": datetime.datetime.utcnow().isoformat() + "Z"
}
}
requests.post("https://bsky.social/xrpc/com.atproto.repo.createRecord",
headers=headers, json=post)
print("Posted:", text)
last_track = text
time.sleep(30)