2013-07-23 04:32:17 +12:00
from urllib import urlencode
import re
2014-02-14 16:36:57 +13:00
from util import hook , http , web , text
2013-07-23 04:32:17 +12:00
sc_re = ( r ' (.*:)//(www.)?(soundcloud.com)(.*) ' , re . I )
api_url = " http://api.soundcloud.com "
2013-08-05 18:02:15 +08:00
sndsc_re = ( r ' (.*:)//(www.)?(snd.sc)(.*) ' , re . I )
2013-07-23 04:32:17 +12:00
2013-08-05 18:02:15 +08:00
def soundcloud ( url , api_key ) :
2013-07-23 04:32:17 +12:00
data = http . get_json ( api_url + ' /resolve.json? ' + urlencode ( { ' url ' : url , ' client_id ' : api_key } ) )
if data [ ' description ' ] :
desc = u " : {} " . format ( text . truncate_str ( data [ ' description ' ] , 50 ) )
else :
desc = " "
if data [ ' genre ' ] :
genre = u " - Genre: \x02 {} \x02 " . format ( data [ ' genre ' ] )
else :
genre = " "
2013-08-05 18:02:15 +08:00
url = web . try_isgd ( data [ ' permalink_url ' ] )
2013-11-03 05:08:09 +08:00
return u " SoundCloud track: \x02 {} \x02 by \x02 {} \x02 {} {} - {} plays, {} downloads, {} comments - {} " . format (
2013-09-04 18:30:04 +08:00
data [ ' title ' ] , data [ ' user ' ] [ ' username ' ] , desc , genre , data [ ' playback_count ' ] , data [ ' download_count ' ] ,
data [ ' comment_count ' ] , url )
2013-08-05 18:02:15 +08:00
@hook.regex ( * sc_re )
def soundcloud_url ( match , bot = None ) :
api_key = bot . config . get ( " api_keys " , { } ) . get ( " soundcloud " )
if not api_key :
print " Error: no api key set "
return None
2013-09-04 18:30:04 +08:00
url = match . group ( 1 ) . split ( ' ' ) [ - 1 ] + " // " + ( match . group ( 2 ) if match . group ( 2 ) else " " ) + match . group ( 3 ) + \
match . group ( 4 ) . split ( ' ' ) [ 0 ]
2013-08-05 18:02:15 +08:00
return soundcloud ( url , api_key )
2013-07-23 04:32:17 +12:00
2013-08-05 18:02:15 +08:00
@hook.regex ( * sndsc_re )
def sndsc_url ( match , bot = None ) :
api_key = bot . config . get ( " api_keys " , { } ) . get ( " soundcloud " )
if not api_key :
print " Error: no api key set "
return None
2013-09-04 18:30:04 +08:00
url = match . group ( 1 ) . split ( ' ' ) [ - 1 ] + " // " + ( match . group ( 2 ) if match . group ( 2 ) else " " ) + match . group ( 3 ) + \
match . group ( 4 ) . split ( ' ' ) [ 0 ]
2013-08-05 18:02:15 +08:00
return soundcloud ( http . open ( url ) . url , api_key )