Anchadan beri discordni ishlatib kelaman chunki u hozirgi eng "fun" ijtimoiy tarmoqlardan biri. U bir qancha qiziqarli qulayliklarni taklif qiladi. ulardan biri bu Spotify aqqountingizni discord profilingizga ulab qo'yish va u orqali ayni payta eshitayotgan qo'shiqingiz do'stlaringiz ko'rishi mumkin. Yaqinda Instagram ham shunga o'xshash xususiyat qo'shibti: unda siz bitta qo'shiqni tanlab uni follower laringizga tavsiya qilishingiz mumkin. Mani niyatim Discordnikiga o'xshgan narsani telegramda amalga oshirish edi.
Afsuski aniq jarayonni tasvirlab bero olmayman chunki bu proyektni 3 oycha avval boshlab oxiriga yetqazmasdan tashlab qo'ygan edim va bugun uni oxiriga yetqazdim. Shu sababdan ayrim jarayonlar esimdan chiqib ketgan. Ammo umumiy g'oya esimda va buni siz gam qayta yaratishingiz mumkin.
Birinchi navmatda last.fmda aqqount ochib, telefon yoki komputeringizga uning scrobbler dasturini o'rnating. U sizni spotify, soundcloud va boshqa Music Streaming service lardagi eshitgan qo'shiqlaringizni hisobini saqlaydi va uni api orqali olishingiz mumkin. Last.fm api orqali api key oling va uni havfsiz joyda saqlab qo'ying.
Telethon python telegram profilingizni yangilash imkonini beradi. Balkim boshqa api lar ham mavjuddir, lekin man topolganim telethon bo'ldi va uni yetarlicha sodda deb o'yliman. telethonning authentication qismini o'qib qanday profilni o'zgartishni o'rganib olishingiz mumkin. U sizdan Telegram API ID, Telegram API hash ni olishingizni so'raydi. Biz faqat shu ikki api bilan aloqa qilish orqali mo'ljallangan natijaga erisha olamiz.
Quyidagi code har 3 daqiqadi Last.fm dan ohirgi marta man eshitgan qo'shiqni olib, mani telegram bio imga qo'yadi. Mani api keylarim .env faylda joylashgan, sizgaham shuni tavfsiya qilaman. pastagi code yaxshi ko'rsatilmagan bo'lsa githubda ko'rishingiz mumkin. ishlayotgan python code:
from telethon.sync import TelegramClient
from telethon.tl.functions.account import UpdateProfileRequest
import os
from dotenv import load_dotenv
import requests
import pprint
import time
load_dotenv()
FM_API_KEY = os.getenv('FM_API_KEY')
TG_API_ID = os.getenv('TG_API_ID')
TG_API_HASH = os.getenv('TG_API_HASH')
tg_client = TelegramClient('anon', TG_API_ID, TG_API_HASH)
print(tg_client)
headers = {
'user-agent': 'nowPlaying'
}
payload = {
'api_key': FM_API_KEY,
'method': 'user.getrecenttracks',
'user': 'boundless-sher',
'limit': 10,
'format': 'json'
}
async def get_latest_songs():
r = requests.get('https://ws.audioscrobbler.com/2.0', headers=headers, params=payload)
status_code = r.status_code
print('status code', status_code)
if(status_code == 200):
data = r.json()
song_info = {}
last_track = data['recenttracks']['track'][0]
song_name = last_track['name']
artist = last_track['artist']['#text']
song_info['song_name'] = song_name
song_info['artist'] = artist
print('song info', song_info)
return song_info
else:
print('something went wrong with last.fm api, trying again...')
get_latest_songs()
async def update_tg_bio():
song_info = await get_latest_songs()
await tg_client(UpdateProfileRequest(about=f"oxirgi qo'shiq: {song_info['song_name']} - {song_info['artist']}"))
me = await tg_client.get_me()
print(me.stringify())
while(1):
print('main')
with tg_client:
print('updating')
tg_client.loop.run_until_complete(update_tg_bio())
time.sleep(60 * 3)