Lastfm ke Bluesky

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)

  1. Buka pengaturan di bsky
  2. Pergi ke Privasi dan Keamanan
  3. Dan pilih Kata Sandi Aplikasi

Untuk lastfm

  1. Buat token API mu di sini
  2. Then copy your apikey
Note
Karena ini hanya memerlukan sedikit penyesuaian agar berfungsi dengan sempurna, Anda bebas mengubahnya.

Dengan Gambar

Preview
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)

Tentang Situs Web Ini

Situs ini adalah situs web pribadi yang berisi portofolio dan pemikiran random.

Tentang Pemilik

Hanya seseorang yang suka menulis, menonton anime, dan mendengarkan lagu saat waktu luang.

Tautkan Aku & Banner.Club

Designed By a Human Not By AI

Sedang Mendengarkan

Loading...

Commision Status

Tutup
lihat status ini dan silakan kunjungi halaman ini jika kamu ingin melihat harga yang saya tawarkan, serta halaman karya untuk melihat contoh lainnya.