Package pyechonest :: Module playlist
[hide private]
[frames] | no frames]

Source Code for Module pyechonest.playlist

  1  #!/usr/bin/env python 
  2  # encoding: utf-8 
  3   
  4  """ 
  5  Copyright (c) 2010 The Echo Nest. All rights reserved. 
  6  Created by Tyler Williams on 2010-04-25. 
  7   
  8  The Playlist module loosely covers http://developer.echonest.com/docs/v4/playlist.html 
  9  Refer to the official api documentation if you are unsure about something. 
 10  """ 
 11   
 12  import util 
 13  from proxies import PlaylistProxy, BetaPlaylistProxy 
 14  from song import Song 
 15  import catalog 
 16   
17 -class Playlist(PlaylistProxy):
18 """ 19 A Dynamic Playlist object 20 21 Attributes: 22 session_id (str): Playlist Session ID 23 24 song (song object): The current song 25 26 info (dictionary): Information about this playlist 27 28 Example: 29 >>> p = Playlist(type='artist-radio', artist=['ida maria', 'florence + the machine']) 30 >>> p 31 <Dynamic Playlist - 9c210205d4784144b4fa90770fa55d0b> 32 >>> p.song 33 <song - Later On> 34 >>> p.get_next_song() 35 <song - Overall> 36 >>> 37 38 """ 39
40 - def __init__(self, session_id=None, type='artist', artist_pick='song_hotttnesss-desc', variety=.5, artist_id=None, artist=None, \ 41 song_id=None, track_id=None, description=None, style=None, mood=None, \ 42 max_tempo=None, min_tempo=None, max_duration=None, \ 43 min_duration=None, max_loudness=None, min_loudness=None, max_danceability=None, min_danceability=None, \ 44 max_energy=None, min_energy=None, artist_max_familiarity=None, artist_min_familiarity=None, \ 45 artist_max_hotttnesss=None, artist_min_hotttnesss=None, song_max_hotttnesss=None, song_min_hotttnesss=None, \ 46 min_longitude=None, max_longitude=None, min_latitude=None, max_latitude=None, adventurousness=0.2, \ 47 mode=None, key=None, buckets=[], sort=None, limit=False, 48 dmca=False, chain_xspf=False, \ 49 seed_catalog=None, steer=None, source_catalog=None, steer_description=None, test_new_things=None, rank_type=None, 50 artist_start_year_after=None, artist_start_year_before=None, artist_end_year_after=None, artist_end_year_before=None):
51 """ 52 Args: 53 54 Kwargs: 55 type (str): a string representing the playlist type ('artist', 'artist-radio', ...) 56 57 artist_pick (str): How songs should be chosen for each artist 58 59 variety (float): A number between 0 and 1 specifying the variety of the playlist 60 61 artist_id (str): the artist_id 62 63 artist (str): the name of an artist 64 65 song_id (str): the song_id 66 67 track_id (str): the track_id 68 69 description (str): A string describing the artist and song 70 71 style (str): A string describing the style/genre of the artist and song 72 73 mood (str): A string describing the mood of the artist and song 74 75 results (int): An integer number of results to return 76 77 max_tempo (float): The max tempo of song results 78 79 min_tempo (float): The min tempo of song results 80 81 max_duration (float): The max duration of song results 82 83 min_duration (float): The min duration of song results 84 85 max_loudness (float): The max loudness of song results 86 87 min_loudness (float): The min loudness of song results 88 89 artist_max_familiarity (float): A float specifying the max familiarity of artists to search for 90 91 artist_min_familiarity (float): A float specifying the min familiarity of artists to search for 92 93 artist_max_hotttnesss (float): A float specifying the max hotttnesss of artists to search for 94 95 artist_min_hotttnesss (float): A float specifying the max hotttnesss of artists to search for 96 97 song_max_hotttnesss (float): A float specifying the max hotttnesss of songs to search for 98 99 song_min_hotttnesss (float): A float specifying the max hotttnesss of songs to search for 100 101 max_energy (float): The max energy of song results 102 103 min_energy (float): The min energy of song results 104 105 max_dancibility (float): The max dancibility of song results 106 107 min_dancibility (float): The min dancibility of song results 108 109 mode (int): 0 or 1 (minor or major) 110 111 key (int): 0-11 (c, c-sharp, d, e-flat, e, f, f-sharp, g, a-flat, a, b-flat, b) 112 113 max_latitude (float): A float specifying the max latitude of artists to search for 114 115 min_latitude (float): A float specifying the min latitude of artists to search for 116 117 max_longitude (float): A float specifying the max longitude of artists to search for 118 119 min_longitude (float): A float specifying the min longitude of artists to search for 120 121 adventurousness (float): A float ranging from 0 for old favorites to 1.0 for unheard music according to a seed_catalog 122 123 sort (str): A string indicating an attribute and order for sorting the results 124 125 buckets (list): A list of strings specifying which buckets to retrieve 126 127 limit (bool): A boolean indicating whether or not to limit the results to one of the id spaces specified in buckets 128 129 seed_catalog (str or Catalog): A Catalog object or catalog id to use as a seed 130 131 source_catalog (str or Catalog): A Catalog object or catalog id 132 133 steer (str): A steering value to determine the target song attributes 134 135 steer_description (str): A steering value to determine the target song description term attributes 136 137 rank_type (str): A string denoting the desired ranking for description searches, either 'relevance' or 'familiarity' 138 139 artist_start_year_before (int): Returned songs's artists will have started recording music before this year. 140 141 artist_start_year_after (int): Returned songs's artists will have started recording music after this year. 142 143 artist_end_year_before (int): Returned songs's artists will have stopped recording music before this year. 144 145 artist_end_year_after (int): Returned songs's artists will have stopped recording music after this year. 146 147 Returns: 148 A dynamic playlist object 149 150 151 """ 152 limit = str(limit).lower() 153 dmca = str(dmca).lower() 154 chain_xspf = str(chain_xspf).lower() 155 156 if isinstance(seed_catalog, catalog.Catalog): 157 seed_catalog = seed_catalog.id 158 159 if isinstance(source_catalog, catalog.Catalog): 160 source_catalog = source_catalog.id 161 162 kwargs = locals() 163 kwargs['bucket'] = kwargs['buckets'] 164 del kwargs['buckets'] 165 del kwargs['self'] 166 del kwargs['session_id'] 167 168 super(Playlist, self).__init__(session_id, **kwargs)
169
170 - def __repr__(self):
171 return "<Dynamic Playlist - %s>" % self.session_id.encode('utf-8')
172 173 # def __str__(self): 174 # return self.name.encode('utf-8') 175
176 - def get_next_song(self, **kwargs):
177 """Get the next song in the playlist 178 179 Args: 180 181 Kwargs: 182 183 Returns: 184 A song object 185 186 Example: 187 188 >>> p = playlist.Playlist(type='artist-radio', artist=['ida maria', 'florence + the machine']) 189 >>> p.get_next_song() 190 <song - She Said> 191 >>> 192 193 """ 194 response = self.get_attribute('dynamic', session_id=self.session_id, **kwargs) 195 self.cache['songs'] = response['songs'] 196 # we need this to fix up all the dict keys to be strings, not unicode objects 197 fix = lambda x : dict((str(k), v) for (k,v) in x.iteritems()) 198 if len(self.cache['songs']): 199 return Song(**fix(self.cache['songs'][0])) 200 else: 201 return None
202
203 - def get_current_song(self):
204 """Get the current song in the playlist 205 206 Args: 207 208 Kwargs: 209 210 Returns: 211 A song object 212 213 Example: 214 215 >>> p = playlist.Playlist(type='artist-radio', artist=['ida maria', 'florence + the machine']) 216 >>> p.song 217 <song - Later On> 218 >>> p.get_current_song() 219 <song - Later On> 220 >>> 221 222 """ 223 # we need this to fix up all the dict keys to be strings, not unicode objects 224 if not 'songs' in self.cache: 225 self.get_next_song() 226 if len(self.cache['songs']): 227 return Song(**util.fix(self.cache['songs'][0])) 228 else: 229 return None
230 231 song = property(get_current_song) 232
233 - def session_info(self):
234 """Get information about the playlist 235 236 Args: 237 238 Kwargs: 239 240 Returns: 241 A dict with diagnostic information about the currently running playlist 242 243 Example: 244 245 >>> p = playlist.Playlist(type='artist-radio', artist=['ida maria', 'florence + the machine']) 246 >>> p.info 247 { 248 u 'terms': [{ 249 u 'frequency': 1.0, 250 u 'name': u 'rock' 251 }, 252 { 253 u 'frequency': 0.99646542152360207, 254 u 'name': u 'pop' 255 }, 256 { 257 u 'frequency': 0.90801905502131963, 258 u 'name': u 'indie' 259 }, 260 { 261 u 'frequency': 0.90586455490260576, 262 u 'name': u 'indie rock' 263 }, 264 { 265 u 'frequency': 0.8968907243373172, 266 u 'name': u 'alternative' 267 }, 268 [...] 269 { 270 u 'frequency': 0.052197425644931635, 271 u 'name': u 'easy listening' 272 }], 273 u 'description': [], 274 u 'seed_songs': [], 275 u 'banned_artists': [], 276 u 'rules': [{ 277 u 'rule': u "Don't put two copies of the same song in a playlist." 278 }, 279 { 280 u 'rule': u 'Give preference to artists that are not already in the playlist' 281 }], 282 u 'session_id': u '9c1893e6ace04c8f9ce745f38b35ff95', 283 u 'seeds': [u 'ARI4XHX1187B9A1216', u 'ARNCHOP121318C56B8'], 284 u 'skipped_songs': [], 285 u 'banned_songs': [], 286 u 'playlist_type': u 'artist-radio', 287 u 'seed_catalogs': [], 288 u 'rated_songs': [], 289 u 'history': [{ 290 u 'artist_id': u 'ARN6QMG1187FB56C8D', 291 u 'artist_name': u 'Laura Marling', 292 u 'id': u 'SOMSHNP12AB018513F', 293 u 'served_time': 1291412277.204201, 294 u 'title': u 'Hope In The Air' 295 }] 296 } 297 298 >>> p.session_info() 299 (same result as above) 300 >>> 301 302 """ 303 return self.get_attribute("session_info", session_id=self.session_id)
304 305 info = property(session_info)
306 307
308 -def basic(type='artist-radio', artist_id=None, artist=None, song_id=None, song=None, track_id=None, 309 dmca=False, results=15, buckets=None, limit=False):
310 """Get a basic playlist 311 312 Args: 313 314 Kwargs: 315 type (str): a string representing the playlist type ('artist-radio' or 'song-radio') 316 317 artist_id (str): the artist_id to seed the playlist 318 319 artist (str): the name of an artist to seed the playlist 320 321 song_id (str): a song_id to seed the playlist 322 323 song (str): the name of a song to seed the playlist 324 325 track_id (str): the name of a track to seed the playlist 326 327 dmca (bool): make the playlist dmca-compliant 328 329 results (int): desired length of the playlist 330 331 buckets (list): A list of strings specifying which buckets to retrieve 332 333 limit (bool): Whether results should be restricted to any idspaces given in the buckets parameter 334 """ 335 336 limit = str(limit).lower() 337 dmca = str(dmca).lower() 338 339 kwargs = locals() 340 kwargs['bucket'] = kwargs['buckets'] 341 del kwargs['buckets'] 342 343 result = util.callm("%s/%s" % ('playlist', 'basic'), kwargs) 344 return [Song(**util.fix(s_dict)) for s_dict in result['response']['songs']]
345 346
347 -def static(type='artist', artist_pick='song_hotttnesss-desc', variety=.5, artist_id=None, artist=None, \ 348 song_id=None, track_id=None, description=None, style=None, mood=None, \ 349 results=15, max_tempo=None, min_tempo=None, max_duration=None, \ 350 min_duration=None, max_loudness=None, min_loudness=None, max_danceability=None, min_danceability=None, \ 351 max_energy=None, min_energy=None, artist_max_familiarity=None, artist_min_familiarity=None, \ 352 artist_max_hotttnesss=None, artist_min_hotttnesss=None, song_max_hotttnesss=None, song_min_hotttnesss=None, \ 353 min_longitude=None, max_longitude=None, min_latitude=None, max_latitude=None, adventurousness=0.2, \ 354 mode=None, key=None, buckets=[], sort=None, limit=False, seed_catalog=None, source_catalog=None, rank_type=None, test_new_things=None, 355 artist_start_year_after=None, artist_start_year_before=None, artist_end_year_after=None, artist_end_year_before=None,dmca=False, distribution=None, song_type=None):
356 """Get a static playlist 357 358 Args: 359 360 Kwargs: 361 type (str): a string representing the playlist type ('artist', 'artist-radio', ...) 362 363 artist_pick (str): How songs should be chosen for each artist 364 365 variety (float): A number between 0 and 1 specifying the variety of the playlist 366 367 artist_id (str): the artist_id 368 369 artist (str): the name of an artist 370 371 song_id (str): the song_id 372 373 track_id (str): the track id 374 375 description (str): A string describing the artist and song 376 377 style (str): A string describing the style/genre of the artist and song 378 379 mood (str): A string describing the mood of the artist and song 380 381 results (int): An integer number of results to return 382 383 max_tempo (float): The max tempo of song results 384 385 min_tempo (float): The min tempo of song results 386 387 max_duration (float): The max duration of song results 388 389 min_duration (float): The min duration of song results 390 391 max_loudness (float): The max loudness of song results 392 393 min_loudness (float): The min loudness of song results 394 395 artist_max_familiarity (float): A float specifying the max familiarity of artists to search for 396 397 artist_min_familiarity (float): A float specifying the min familiarity of artists to search for 398 399 artist_max_hotttnesss (float): A float specifying the max hotttnesss of artists to search for 400 401 artist_min_hotttnesss (float): A float specifying the max hotttnesss of artists to search for 402 403 song_max_hotttnesss (float): A float specifying the max hotttnesss of songs to search for 404 405 song_min_hotttnesss (float): A float specifying the max hotttnesss of songs to search for 406 407 max_energy (float): The max energy of song results 408 409 min_energy (float): The min energy of song results 410 411 max_dancibility (float): The max dancibility of song results 412 413 min_dancibility (float): The min dancibility of song results 414 415 mode (int): 0 or 1 (minor or major) 416 417 key (int): 0-11 (c, c-sharp, d, e-flat, e, f, f-sharp, g, a-flat, a, b-flat, b) 418 419 max_latitude (float): A float specifying the max latitude of artists to search for 420 421 min_latitude (float): A float specifying the min latitude of artists to search for 422 423 max_longitude (float): A float specifying the max longitude of artists to search for 424 425 min_longitude (float): A float specifying the min longitude of artists to search for 426 427 adventurousness (float): A float ranging from 0 for old favorites to 1.0 for unheard music according to a seed_catalog 428 429 sort (str): A string indicating an attribute and order for sorting the results 430 431 buckets (list): A list of strings specifying which buckets to retrieve 432 433 limit (bool): A boolean indicating whether or not to limit the results to one of the id spaces specified in buckets 434 435 seed_catalog (str or Catalog): An Artist Catalog object or Artist Catalog id to use as a seed 436 437 source_catalog (str or Catalog): A Catalog object or catalog id 438 439 rank_type (str): A string denoting the desired ranking for description searches, either 'relevance' or 'familiarity' 440 441 artist_start_year_before (int): Returned songs's artists will have started recording music before this year. 442 443 artist_start_year_after (int): Returned songs's artists will have started recording music after this year. 444 445 artist_end_year_before (int): Returned songs's artists will have stopped recording music before this year. 446 447 artist_end_year_after (int): Returned songs's artists will have stopped recording music after this year. 448 449 distribution (str): Affects the range of artists returned and how many songs each artsits will have in the playlist realative to how similar they are to the seed. (wandering, focused) 450 451 song_type (str): A string or list of strings of the type of songs allowed. The only valid song type at the moment is 'christmas'. 452 Valid formats are 'song_type', 'song_type:true', 'song_type:false', or 'song_type:any'. 453 454 Returns: 455 A list of Song objects 456 457 Example: 458 459 >>> p = playlist.static(type='artist-radio', artist=['ida maria', 'florence + the machine']) 460 >>> p 461 [<song - Pickpocket>, 462 <song - Self-Taught Learner>, 463 <song - Maps>, 464 <song - Window Blues>, 465 <song - That's Not My Name>, 466 <song - My Lover Will Go>, 467 <song - Home Sweet Home>, 468 <song - Stella & God>, 469 <song - Don't You Want To Share The Guilt?>, 470 <song - Forget About It>, 471 <song - Dull Life>, 472 <song - This Trumpet In My Head>, 473 <song - Keep Your Head>, 474 <song - One More Time>, 475 <song - Knights in Mountain Fox Jackets>] 476 >>> 477 478 """ 479 limit = str(limit).lower() 480 481 if seed_catalog and isinstance(seed_catalog, catalog.Catalog): 482 seed_catalog = seed_catalog.id 483 484 if source_catalog and isinstance(source_catalog, catalog.Catalog): 485 source_catalog = source_catalog.id 486 dmca = str(dmca).lower() 487 kwargs = locals() 488 kwargs['bucket'] = kwargs['buckets'] 489 del kwargs['buckets'] 490 491 result = util.callm("%s/%s" % ('playlist', 'static'), kwargs) 492 return [Song(**util.fix(s_dict)) for s_dict in result['response']['songs']]
493
494 -class BetaPlaylist(BetaPlaylistProxy):
495 """ 496 A Beta Dynamic Playlist object. 497 498 Attributes: 499 500 Example: 501 """ 502
503 - def __init__( 504 self, 505 session_id=None, 506 type=None, 507 artist_pick=None, 508 variety=None, 509 artist_id=None, 510 artist=None, 511 song_id=None, 512 track_id=None, 513 description=None, 514 style=None, 515 mood=None, 516 max_tempo=None, 517 min_tempo=None, 518 max_duration=None, 519 min_duration=None, 520 max_loudness=None, 521 min_loudness=None, 522 max_danceability=None, 523 min_danceability=None, 524 max_energy=None, 525 min_energy=None, 526 artist_max_familiarity=None, 527 artist_min_familiarity=None, 528 artist_max_hotttnesss=None, 529 artist_min_hotttnesss=None, 530 song_max_hotttnesss=None, 531 song_min_hotttnesss=None, 532 min_longitude=None, 533 max_longitude=None, 534 min_latitude=None, 535 max_latitude=None, 536 adventurousness=None, 537 mode=None, 538 key=None, 539 buckets=[], 540 sort=None, 541 limit=False, 542 seed_catalog=None, 543 source_catalog=None, 544 rank_type=None, 545 test_new_things=None, 546 artist_start_year_after=None, 547 artist_start_year_before=None, 548 artist_end_year_after=None, 549 artist_end_year_before=None, 550 dmca=False, 551 distribution=None, 552 song_type=None, 553 ):
554 555 limit = str(limit).lower() 556 dmca = str(dmca).lower() 557 558 if isinstance(seed_catalog, catalog.Catalog): 559 seed_catalog = seed_catalog.id 560 561 super(BetaPlaylist, self).__init__( 562 session_id=session_id, 563 type=type, 564 artist_pick=artist_pick, 565 variety=variety, 566 artist_id=artist_id, 567 artist=artist, 568 song_id=song_id, 569 track_id=track_id, 570 description=description, 571 style=style, 572 mood=mood, 573 max_tempo=max_tempo, 574 min_tempo=min_tempo, 575 max_duration=max_duration, 576 min_duration=min_duration, 577 max_loudness=max_loudness, 578 min_loudness=min_loudness, 579 max_danceability=max_danceability, 580 min_danceability=min_danceability, 581 max_energy=max_energy, 582 min_energy=min_energy, 583 artist_max_familiarity=artist_max_familiarity, 584 artist_min_familiarity=artist_min_familiarity, 585 artist_max_hotttnesss=artist_max_hotttnesss, 586 artist_min_hotttnesss=artist_min_hotttnesss, 587 song_max_hotttnesss=song_max_hotttnesss, 588 song_min_hotttnesss=song_min_hotttnesss, 589 min_longitude=min_longitude, 590 max_longitude=max_longitude, 591 min_latitude=min_latitude, 592 max_latitude=max_latitude, 593 adventurousness=adventurousness, 594 mode=mode, 595 key=key, 596 buckets=buckets, 597 sort=sort, 598 limit=limit, 599 seed_catalog=seed_catalog, 600 source_catalog=source_catalog, 601 rank_type=rank_type, 602 test_new_things=test_new_things, 603 artist_start_year_after=artist_start_year_after, 604 artist_start_year_before=artist_start_year_before, 605 artist_end_year_after=artist_end_year_after, 606 artist_end_year_before=artist_end_year_before, 607 dmca=dmca, 608 distribution=distribution, 609 song_type=song_type, 610 )
611
612 - def __repr__(self):
613 return "<Beta Dynamic Playlist - %s>" % self.session_id.encode('utf-8')
614
615 - def get_next_songs(self, results=None, lookahead=None):
616 response = self.get_attribute( 617 method='next', 618 session_id=self.session_id, 619 results=results, 620 lookahead=lookahead 621 ) 622 self.cache['songs'] = response['songs'] 623 self.cache['lookahead'] = response['lookahead'] 624 if len(self.cache['songs']): 625 songs = self.cache['songs'][:] 626 songs = [Song(**util.fix(song)) for song in songs] 627 return songs 628 else: 629 return None
630
631 - def get_current_songs(self):
632 if not 'songs' in self.cache: 633 self.get_next_songs(results=1) 634 if len(self.cache['songs']): 635 songs = self.cache['songs'][:] 636 songs = [Song(**util.fix(song)) for song in songs] 637 638 return songs 639 else: 640 return None
641
642 - def get_lookahead_songs(self):
643 if not 'lookahead' in self.cache: 644 return None 645 if len(self.cache['lookahead']): 646 lookahead = self.cache['lookahead'][:] 647 lookahead = [Song(**util.fix(song)) for song in lookahead] 648 649 return lookahead 650 else: 651 return None
652 653 songs = property(get_current_songs) 654
655 - def info(self):
656 return self.get_attribute("info", session_id=self.session_id)
657
658 - def delete(self):
659 self.get_attribute("delete", session_id=self.session_id) 660 return True
661
662 - def restart( 663 self, 664 type=None, 665 artist_pick=None, 666 variety=None, 667 artist_id=None, 668 artist=None, 669 song_id=None, 670 track_id=None, 671 description=None, 672 style=None, 673 mood=None, 674 max_tempo=None, 675 min_tempo=None, 676 max_duration=None, 677 min_duration=None, 678 max_loudness=None, 679 min_loudness=None, 680 max_danceability=None, 681 min_danceability=None, 682 max_energy=None, 683 min_energy=None, 684 artist_max_familiarity=None, 685 artist_min_familiarity=None, 686 artist_max_hotttnesss=None, 687 artist_min_hotttnesss=None, 688 song_max_hotttnesss=None, 689 song_min_hotttnesss=None, 690 min_longitude=None, 691 max_longitude=None, 692 min_latitude=None, 693 max_latitude=None, 694 adventurousness=None, 695 mode=None, 696 key=None, 697 buckets=[], 698 sort=None, 699 limit=False, 700 seed_catalog=None, 701 source_catalog=None, 702 rank_type=None, 703 test_new_things=None, 704 artist_start_year_after=None, 705 artist_start_year_before=None, 706 artist_end_year_after=None, 707 artist_end_year_before=None, 708 dmca=False, 709 distribution=None, 710 song_type=None, 711 ):
712 limit = str(limit).lower() 713 dmca = str(dmca).lower() 714 715 if isinstance(seed_catalog, catalog.Catalog): 716 seed_catalog = seed_catalog.id 717 718 719 return self.get_attribute( 720 method='restart', 721 session_id=self.session_id, 722 type=type, 723 artist_pick=artist_pick, 724 variety=variety, 725 artist_id=artist_id, 726 artist=artist, 727 song_id=song_id, 728 track_id=track_id, 729 description=description, 730 style=style, 731 mood=mood, 732 max_tempo=max_tempo, 733 min_tempo=min_tempo, 734 max_duration=max_duration, 735 min_duration=min_duration, 736 max_loudness=max_loudness, 737 min_loudness=min_loudness, 738 max_danceability=max_danceability, 739 min_danceability=min_danceability, 740 max_energy=max_energy, 741 min_energy=min_energy, 742 artist_max_familiarity=artist_max_familiarity, 743 artist_min_familiarity=artist_min_familiarity, 744 artist_max_hotttnesss=artist_max_hotttnesss, 745 artist_min_hotttnesss=artist_min_hotttnesss, 746 song_max_hotttnesss=song_max_hotttnesss, 747 song_min_hotttnesss=song_min_hotttnesss, 748 min_longitude=min_longitude, 749 max_longitude=max_longitude, 750 min_latitude=min_latitude, 751 max_latitude=max_latitude, 752 adventurousness=adventurousness, 753 mode=mode, 754 key=key, 755 bucket=buckets, 756 sort=sort, 757 limit=limit, 758 seed_catalog=seed_catalog, 759 source_catalog=source_catalog, 760 rank_type=rank_type, 761 test_new_things=test_new_things, 762 artist_start_year_after=artist_start_year_after, 763 artist_start_year_before=artist_start_year_before, 764 artist_end_year_after=artist_end_year_after, 765 artist_end_year_before=artist_end_year_before, 766 dmca=dmca, 767 distribution=distribution, 768 song_type=song_type, 769 )
770
771 - def steer( 772 self, 773 max_tempo=None, 774 min_tempo=None, 775 target_tempo=None, 776 max_duration=None, 777 min_duration=None, 778 target_duration=None, 779 max_loudness=None, 780 min_loudness=None, 781 target_loudness=None, 782 max_danceability=None, 783 min_danceability=None, 784 target_danceability=None, 785 max_energy=None, 786 min_energy=None, 787 target_energy=None, 788 max_artist_familiarity=None, 789 min_artist_familiarity=None, 790 target_artist_familiarity=None, 791 max_artist_hotttnesss=None, 792 min_artist_hotttnesss=None, 793 target_artist_hotttnesss=None, 794 max_song_hotttnesss=None, 795 min_song_hotttnesss=None, 796 target_song_hotttnesss=None, 797 more_like_this=None, 798 less_like_this=None, 799 adventurousness=None, 800 variety=None, 801 description=None, 802 style=None, 803 mood=None, 804 song_type=None, 805 ):
806 807 response = self.get_attribute( 808 method='steer', 809 session_id=self.session_id, 810 max_tempo=max_tempo, 811 min_tempo=min_tempo, 812 target_tempo=target_tempo, 813 max_duration=max_duration, 814 min_duration=min_duration, 815 target_duration=target_duration, 816 max_loudness=max_loudness, 817 min_loudness=min_loudness, 818 target_loudness=target_loudness, 819 max_danceability=max_danceability, 820 min_danceability=min_danceability, 821 target_danceability=target_danceability, 822 max_energy=max_energy, 823 min_energy=min_energy, 824 target_energy=target_energy, 825 max_artist_familiarity=max_artist_familiarity, 826 min_artist_familiarity=min_artist_familiarity, 827 target_artist_familiarity=target_artist_familiarity, 828 max_artist_hotttnesss=max_artist_hotttnesss, 829 min_artist_hotttnesss=min_artist_hotttnesss, 830 target_artist_hotttnesss=target_artist_hotttnesss, 831 max_song_hotttnesss=max_song_hotttnesss, 832 min_song_hotttnesss=min_song_hotttnesss, 833 target_song_hotttnesss=target_song_hotttnesss, 834 more_like_this=more_like_this, 835 less_like_this=less_like_this, 836 adventurousness=adventurousness, 837 variety=variety, 838 description=description, 839 style=style, 840 mood=mood, 841 song_type=song_type 842 ) 843 844 self.cache['lookahead'] = [] 845 return True
846
847 - def feedback( 848 self, 849 ban_artist=None, 850 ban_song=None, 851 skip_song=None, 852 favorite_artist=None, 853 favorite_song=None, 854 play_song=None, 855 unplay_song=None, 856 rate_song=None, 857 ):
858 859 response = self.get_attribute( 860 session_id=self.session_id, 861 method='feedback', 862 ban_artist=ban_artist, 863 ban_song=ban_song, 864 skip_song=skip_song, 865 favorite_artist=favorite_artist, 866 favorite_song=favorite_song, 867 play_song=play_song, 868 unplay_song=unplay_song, 869 rate_song=rate_song, 870 ) 871 872 self.cache['lookahead'] = [] 873 return True
874