def get_session(): access_token = pynder_config['access_token'] try: access_token = get_token() except: pass session = pynder.Session(pynder_config['id'], access_token) return session
from timeline import home_operation from collections import deque from help import func_help cf = configparser.ConfigParser() cf.read("ConfigParser.conf") if __name__ == '__main__': user = cf.get('user', 'user') password = cf.get('user', 'password') # 设置一个op队列用于存储命令 deque_home = deque(maxlen=1) deque_detail = deque(maxlen=1) token = get_token(user=user, password=password) # 设计一个全局变量position 来标记当前所在位置 global position, home_arg position = 'home' while True: op = input(remind_color("Operate$ ")) if op.startswith('home') or op == '\n': # 将position 置位为home position = 'home' deque_home.append(op) home_arg = home_operation(token, op) elif op == 'clear': os.system('clear')
def get_token(): json = login.get_token(client_id, client_secret, state, code) global access_token, refresh_token access_token = json['access_token'] refresh_token = json['refresh_token'] redirect('/write')
def start(self): if setproctitle: setproctitle('vkplayer') self.ipc.start() self.ipc.broadcast('state_changed', [ self.player.is_downloading, self.player.is_playing, self.current_title_string ]) self.window = Gtk.Window() self.window.resize(600, 400) self.window.set_title('VK audio player') self.window.set_icon_from_file(os.path.join(DIR, 'icons/icon128.png')) self.accels = Gtk.AccelGroup() self.vbox = Gtk.VBox() self.window.add(self.vbox) # self.window.modify_bg(Gtk.StateFlags.NORMAL, Gdk.color_parse('#CCCCCC')) self.header = Gtk.HBox() # self.header.override_background_color(Gtk.StateFlags.NORMAL | Gtk.StateFlags.ACTIVE | Gtk.StateFlags.INSENSITIVE, color) self.header_left = Gtk.HBox() self.header_right = Gtk.VBox() self.header.pack_start(self.header_left, False, True, 0) self.header.pack_start(self.header_right, True, True, 0) self.vbox.pack_start(self.header, False, True, 0) self.controls = Gtk.HBox(spacing=8) self.controls.set_border_width(8) self.header_right.pack_start(self.controls, False, True, 0) img = Gtk.Image() img.set_from_pixbuf( GdkPixbuf.Pixbuf.new_from_file_at_scale( os.path.join(DIR, 'icons/icon-play-128.png'), width=48, height=48, preserve_aspect_ratio=False)) self.play = Gtk.Button('', image=img) self.play.set_always_show_image(True) self.play.set_relief(Gtk.ReliefStyle.NONE) self.play.connect('clicked', self._on_play_clicked) self.controls.pack_start(self.play, False, True, 0) img = Gtk.Image() img.set_from_pixbuf( GdkPixbuf.Pixbuf.new_from_file_at_scale( os.path.join(DIR, 'icons/icon-pause-128.png'), width=48, height=48, preserve_aspect_ratio=False)) self.pause = Gtk.Button('', image=img) self.pause.set_always_show_image(True) self.pause.set_relief(Gtk.ReliefStyle.NONE) self.pause.connect('clicked', self._on_pause_clicked) self.controls.pack_start(self.pause, False, True, 0) img = Gtk.Image() img.set_from_pixbuf( GdkPixbuf.Pixbuf.new_from_file_at_scale( os.path.join(DIR, 'icons/icon-shuffle-128.png'), width=48, height=48, preserve_aspect_ratio=False)) self.random = Gtk.Button('', image=img) self.random.set_always_show_image(True) self.random.set_relief(Gtk.ReliefStyle.NONE) self.random.connect('clicked', self._on_random_clicked) self.controls.pack_start(self.random, False, True, 0) self.controls.pack_start(Gtk.HSeparator(), False, True, 0) self.cover = Gtk.Image() pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale( os.path.join(DIR, 'icons/cover512.jpg'), width=144, height=144, preserve_aspect_ratio=False) self.cover.set_from_pixbuf(pixbuf) # self.cover.connect('clicked', self._on_random_clicked) self.cover.set_size_request(144, 144) self.header_left.pack_start(self.cover, False, True, 0) self.seek_panel = Gtk.VBox() self.controls.pack_start(self.seek_panel, True, True, 0) self.seek_labels = Gtk.HBox() self.seek_panel.pack_start(self.seek_labels, True, True, 10) self.track_title = Gtk.Label('', halign=Gtk.Align.START, valign=Gtk.Align.END) self.track_title.set_use_markup(True) self.track_title.set_markup( '<span font="Roboto 24" weight="300">Idle</span>') self.seek_labels.pack_start(self.track_title, True, True, 0) self.track_time = Gtk.Label('05:00', halign=Gtk.Align.END, valign=Gtk.Align.END) self.track_time.set_use_markup(True) self.track_time.set_markup( '<span font="Roboto 24" weight="100">05:00</span>') self.seek_labels.pack_start(self.track_time, True, True, 0) self.seek_bar = Gtk.Scale(orientation=Gtk.Orientation.HORIZONTAL, adjustment=Gtk.Adjustment(0, 0, 1, 1, 0, 0)) self.seek_bar.set_draw_value(False) self.seek_bar.set_sensitive(False) self.seek_panel.pack_start(self.seek_bar, True, True, 0) self.seek_bar.connect('button-press-event', self._on_seek_start) self.seek_bar.connect('button-release-event', self._on_seek_end) self.precache_progress = Gtk.ProgressBar() self.seek_panel.pack_start(self.precache_progress, True, True, 0) self.volume_scale = Gtk.Scale(orientation=Gtk.Orientation.VERTICAL, adjustment=Gtk.Adjustment( 1, 0, 1, 0.05, 0.05, 0.05), valign=Gtk.Align.CENTER) self.volume_scale.set_inverted(True) self.volume_scale.connect( 'value_changed', lambda *args: self.player.set_volume( self.volume_scale.get_value())) self.volume_scale.set_draw_value(False) self.volume_scale.set_size_request(-1, 64) self.volume_scale.set_value(self.last_volume) self.controls.pack_start(self.volume_scale, False, True, 0) # self.vbox.pack_start(Gtk.VSeparator(), False, True, 0) # self.search_panel = Gtk.HBox(spacing=8) self.search_panel.set_border_width(8) self.header_right.pack_start(self.search_panel, False, True, 0) self.refresh = Gtk.Button('My audio') self.refresh.connect('clicked', self._on_refresh_clicked) accelerator = '<Ctrl>m' key, mod = Gtk.accelerator_parse(accelerator) self.refresh.add_accelerator('activate', self.accels, key, mod, Gtk.AccelFlags.VISIBLE) self.search_panel.pack_start(self.refresh, False, True, 0) self.search_panel.pack_start(Gtk.HSeparator(), False, True, 0) self.query = Gtk.Entry(placeholder_text='Search music') self.query.connect('activate', self._on_search_clicked) accelerator = '<Ctrl>f' key, mod = Gtk.accelerator_parse(accelerator) self.query.add_accelerator('grab-focus', self.accels, key, mod, Gtk.AccelFlags.VISIBLE) self.search_panel.pack_start(self.query, True, True, 0) self.search = Gtk.Button('Search') self.search.connect('clicked', self._on_search_clicked) self.search_panel.pack_start(self.search, False, True, 0) # self.scroll = Gtk.ScrolledWindow() self.scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.ALWAYS) self.vbox.pack_start(self.scroll, True, True, 0) self.spinner = Gtk.Spinner() self.vbox.pack_start(self.spinner, True, False, 0) self.playlist = Gtk.TreeView() self.scroll.add(self.playlist) self.playlist.connect('row-activated', self._on_row_activated) self.playlist_store = Gtk.ListStore(str, str, str, str, int, int, int, bool) self.playlist.set_model(self.playlist_store) img = Gtk.Image() img.set_from_stock(Gtk.STOCK_MEDIA_PLAY, 32) col = Gtk.TreeViewColumn( "", Gtk.CellRendererPixbuf(icon_name='media-playback-start'), visible=7) col.set_expand(False) self.playlist.append_column(col) col = Gtk.TreeViewColumn("Artist", Gtk.CellRendererText( ellipsize=True, family='Roboto, DejaVu Sans', weight=500), text=1) # col.set_expand(True) col.set_sizing(Gtk.TreeViewColumnSizing.FIXED) col.set_fixed_width(250) self.playlist.append_column(col) col = Gtk.TreeViewColumn("Title", Gtk.CellRendererText( ellipsize=True, family='Roboto, DejaVu Sans'), text=0) col.set_expand(True) self.playlist.append_column(col) col = Gtk.TreeViewColumn("Duration", Gtk.CellRendererText(), text=2) col.set_expand(False) self.playlist.append_column(col) self.vbox.show_all() self.window.add_accel_group(self.accels) self.window.maximize() self.window.show_all() seek_height = max(self.seek_bar.get_allocation().height, self.precache_progress.get_allocation().height) self.seek_bar.set_size_request(-1, seek_height) self.precache_progress.set_size_request(-1, seek_height) self.window.connect('delete-event', self._show_or_hide) get_token(self.window, self._on_token_ready) self.set_busy(False) self._update() self._on_download_finished() Keybinder.init() Keybinder.bind('<Ctrl><Alt>Return', self._on_random_clicked) Keybinder.bind( '<Ctrl><Alt>Backspace', lambda *args: (self._on_pause_clicked if self.player.is_playing else self._on_play_clicked)()) self.status_icon = Gtk.StatusIcon() self.status_icon.set_from_file(os.path.join(DIR, 'icons/play.png')) self.status_icon.connect('popup-menu', self._on_popup_menu) self.status_icon.connect('activate', self._show_or_hide) Gtk.main() self.player.stop()
def _start_login_force(self): get_token(self.window, self._on_token_ready, True)
import sys import spotipy import spotipy.util as util from login import get_token sp = spotipy.Spotify(auth=get_token()) sp.trace = False def get_user(): user = sp.current_user() user = user['uri'].split(':') return user[2] #creates new playlit and returns id def create_playlist(name): playlist = sp.user_playlist_create(get_user(), name, public=True) return playlist['id'] def get_playlist(id): return sp.user_playlist(get_user(), playlist_id=id, fields=None) def add_to_playlist(track, playlist_id): sp.user_playlist_add_tracks(get_user(), playlist_id, [track]) #remove a track from playlist