from spotipy.oauth2 import SpotifyOAuth import spotipy import vk_api from time import sleep config = { 'vk-default-status': "Статус в ВК, когда в Spotify ничего не играет", 'telegram-default-status': 'О себе в Telegram, когда в Spotify ничего не играет', 'status-update-timeout': 60, 'spotify-client-id': "", 'spotify-client-secret': "", 'spotify-redirect-uri': "", 'spotify-username': "as67lwic16uszxqpd6rbfimol", 'vk-token': "token", 'vk-online-when-listen-spotify': True, 'use-telegram': True, 'telegram-api-id': 1, 'telegram-api-hash': '' } if config['use-telegram']: from telethon.tl.functions.account import UpdateProfileRequest from telethon.sync import TelegramClient telegram = TelegramClient('telegram', config['telegram-api-id'], config['telegram-api-hash']).start() spotify = spotipy.Spotify(auth_manager=SpotifyOAuth(scope="user-read-playback-state user-library-read", client_id=config['spotify-client-id'], client_secret=config['spotify-client-secret'], redirect_uri=config['spotify-redirect-uri'], username=config['spotify-username'])) api = vk_api.VkApi(token=config['vk-token']).get_api() current_status = api.status.get()['text'] def change_status(status): if not status == current_status: api.status.set(text=status[:140]) if config['vk-online-when-listen-spotify']: api.account.setOnline(voip=1) print('Статус в VK обновлен') if config['use-telegram']: telegram(UpdateProfileRequest(about=status[:70])) print('Статус в Telegram обновлен') print(status) def default_status(): api.status.set(text=config['vk-default-status'][:140]) print('Статус в VK обновлен') if config['use-telegram']: telegram(UpdateProfileRequest(about=config['telegram-default-status'][:70])) print('Статус в Telegram обновлен') print('Установлен обычный статус') def calculate_minutes(ms): return str(int(((ms / (1000*60)) % 60))) def calculate_seconds(ms): return str(int((ms / 1000) % 60)) if len(str(int((ms / 1000) % 60))) > 1 else '0'+str(int((ms / 1000) % 60)) while True: current_playing = spotify.current_user_playing_track() if current_playing is None or current_playing["currently_playing_type"] == "ad": default_status() sleep(int(config['status-update-timeout'])*2) continue play_emoji = '▶' if current_playing['is_playing'] == True else '⏸' change_status(play_emoji+'Слушаю Spotify: '+current_playing["item"]["artists"][0]["name"]+' — '+current_playing["item"]["name"]+' ('+calculate_minutes(current_playing['progress_ms'])+':'+calculate_seconds(current_playing['progress_ms'])+'/'+calculate_minutes(current_playing['item']['duration_ms'])+':'+calculate_seconds(current_playing['item']['duration_ms'])+')') sleep(int(config['status-update-timeout'])) Python from spotipy.oauth2 import SpotifyOAuth import spotipy import vk_api from time import sleep config = { 'vk-default-status': "Статус в ВК, когда в Spotify ничего не играет", 'telegram-default-status': 'О себе в Telegram, когда в Spotify ничего не играет', 'status-update-timeout': 60, 'spotify-client-id': "", 'spotify-client-secret': "", 'spotify-redirect-uri': "", 'spotify-username': "as67lwic16uszxqpd6rbfimol", 'vk-token': "token", 'vk-online-when-listen-spotify': True, 'use-telegram': True, 'telegram-api-id': 1, 'telegram-api-hash': '' } if config['use-telegram']: from telethon.tl.functions.account import UpdateProfileRequest from telethon.sync import TelegramClient telegram = TelegramClient('telegram', config['telegram-api-id'], config['telegram-api-hash']).start() spotify = spotipy.Spotify(auth_manager=SpotifyOAuth(scope="user-read-playback-state user-library-read", client_id=config['spotify-client-id'], client_secret=config['spotify-client-secret'], redirect_uri=config['spotify-redirect-uri'], username=config['spotify-username'])) api = vk_api.VkApi(token=config['vk-token']).get_api() current_status = api.status.get()['text'] def change_status(status): if not status == current_status: api.status.set(text=status[:140]) if config['vk-online-when-listen-spotify']: api.account.setOnline(voip=1) print('Статус в VK обновлен') if config['use-telegram']: telegram(UpdateProfileRequest(about=status[:70])) print('Статус в Telegram обновлен') print(status) def default_status(): api.status.set(text=config['vk-default-status'][:140]) print('Статус в VK обновлен') if config['use-telegram']: telegram(UpdateProfileRequest(about=config['telegram-default-status'][:70])) print('Статус в Telegram обновлен') print('Установлен обычный статус') def calculate_minutes(ms): return str(int(((ms / (1000*60)) % 60))) def calculate_seconds(ms): return str(int((ms / 1000) % 60)) if len(str(int((ms / 1000) % 60))) > 1 else '0'+str(int((ms / 1000) % 60)) while True: current_playing = spotify.current_user_playing_track() if current_playing is None or current_playing["currently_playing_type"] == "ad": default_status() sleep(int(config['status-update-timeout'])*2) continue play_emoji = '▶' if current_playing['is_playing'] == True else '⏸' change_status(play_emoji+'Слушаю Spotify: '+current_playing["item"]["artists"][0]["name"]+' — '+current_playing["item"]["name"]+' ('+calculate_minutes(current_playing['progress_ms'])+':'+calculate_seconds(current_playing['progress_ms'])+'/'+calculate_minutes(current_playing['item']['duration_ms'])+':'+calculate_seconds(current_playing['item']['duration_ms'])+')') sleep(int(config['status-update-timeout'])) Использование: Нужно заполнить конфиг, затем, после запуска, войти в Spotify в браузере и войти в Telegram в консоли Конфиг: vk-default-status - Статус в ВК, когда в Spotify ничего не играет telegram-default-status - О себе в Telegram, когда в Spotify ничего не играет status-update-timeout - Количество секунд, спустя которое нужно обновить статус spotify-client-id - Client ID приложения Spotify spotify-client-secret - Client secret приложения Spotify spotify-redirect-uri - redirect uri приложения Spotify spotify-username - Часть ссылки на ваш профиль Spotify vk-token - Токен ВК vk-online-when-listen-spotify - Нужно ли делать вас онлайн в ВК, когда включен Spotify (True/False) use-telegram - Нужно ли обновлять био в телеграм (поставьте False, если хотите автостатус только в ВК) telegram-api-id - API ID приложения Telegram telegram-api-hash - API hash приложения Telegram Где взять параметры, связанные с Spotify Заходим на https://developer.spotify.com/dashboard/, если нужно, авторизуемся. Скорее всего, понадобится ***. Создаем приложение, вводим любое имя и описание, ставим галочку Нажимаем на show client secret Два значения уже получили. Теперь нажимаем edit settings Вводим http://localhost:8888/callback в redirect url. (в конфиге тоже) Для получения ссылки на свой профиль заходим на https://open.spotify.com/, для пользователей из России понадобится ***. Копируем значение после user/. Это spotify-username. Где взять параметры, связанные с Telegram Заходим на https://my.telegram.org/, авторизуемся Создаем приложение Вот и данные Другие скрипты на GitHub
MALWARE, молодец, постарался, получилось классно, только наверное я бы убрал из статуса секунды, а то получается слишком частое обновление, названия трека и исполнителя хватает вполне)
WatchUrr, ну тут система получает трек из айтюнс, это немного не то. Придётся на своем пк хостить, неудобно будет..
Немного переделал код(написал пару try/except:peka:), добавил говнокода. Теперь статус меняется почти сразу, после переключения трека, не флудит сменой статуса если спотик выключен. Убрал статус в тг так как он мне не нужен. Убрал принты все, они мне показались ненужными Spoiler # Cорян за говнокод, но теперь работает как часики и не отключается скрипт через часик работы from spotipy.oauth2 import SpotifyOAuth import spotipy import vk_api from time import sleep config = { 'vk-default-status': "", 'spotify-client-id': "", 'spotify-client-secret': "", 'spotify-redirect-uri': "", 'spotify-username': "", 'vk-token': "", 'vk-online-when-listen-spotify': True, } spotify = spotipy.Spotify(auth_manager=SpotifyOAuth(scope="user-read-playback-state user-library-read", client_id=config['spotify-client-id'], client_secret=config['spotify-client-secret'], redirect_uri=config['spotify-redirect-uri'], username=config['spotify-username'])) api = vk_api.VkApi(token=config['vk-token']).get_api() current_status = api.status.get()['text'] def change_status(status): try: if not status == current_status: api.status.set(text=status[:140]) if config['vk-online-when-listen-spotify']: api.account.setOnline(voip=1) except: print() def default_status(): try: s = api.status.get()['text'] if s == config['vk-default-status']: return else: api.status.set(text=config['vk-default-status'][:140]) except: print() while True: try: current_playing = spotify.current_user_playing_track() if current_playing is None or current_playing["currently_playing_type"] == "ad": default_status() sleep(10) continue s = api.status.get()['text'] play_emoji = '' if current_playing['is_playing'] == True else '' if s == play_emoji+'Слушаю Spotify: '+current_playing["item"]["artists"][0]["name"]+' — '+current_playing["item"]["name"]: sleep(5) else: play_emoji = '' if current_playing['is_playing'] == True else '' change_status(play_emoji+'Слушаю Spotify: '+current_playing["item"]["artists"][0]["name"]+' — '+current_playing["item"]["name"]) except: print() Python # Cорян за говнокод, но теперь работает как часики и не отключается скрипт через часик работы from spotipy.oauth2 import SpotifyOAuth import spotipy import vk_api from time import sleep config = { 'vk-default-status': "", 'spotify-client-id': "", 'spotify-client-secret': "", 'spotify-redirect-uri': "", 'spotify-username': "", 'vk-token': "", 'vk-online-when-listen-spotify': True, } spotify = spotipy.Spotify(auth_manager=SpotifyOAuth(scope="user-read-playback-state user-library-read", client_id=config['spotify-client-id'], client_secret=config['spotify-client-secret'], redirect_uri=config['spotify-redirect-uri'], username=config['spotify-username'])) api = vk_api.VkApi(token=config['vk-token']).get_api() current_status = api.status.get()['text'] def change_status(status): try: if not status == current_status: api.status.set(text=status[:140]) if config['vk-online-when-listen-spotify']: api.account.setOnline(voip=1) except: print() def default_status(): try: s = api.status.get()['text'] if s == config['vk-default-status']: return else: api.status.set(text=config['vk-default-status'][:140]) except: print() while True: try: current_playing = spotify.current_user_playing_track() if current_playing is None or current_playing["currently_playing_type"] == "ad": default_status() sleep(10) continue s = api.status.get()['text'] play_emoji = '' if current_playing['is_playing'] == True else '' if s == play_emoji+'Слушаю Spotify: '+current_playing["item"]["artists"][0]["name"]+' — '+current_playing["item"]["name"]: sleep(5) else: play_emoji = '' if current_playing['is_playing'] == True else '' change_status(play_emoji+'Слушаю Spotify: '+current_playing["item"]["artists"][0]["name"]+' — '+current_playing["item"]["name"]) except: print()