The branch, eden has been updated via cbe8412038c9d59bdc968ac1a8cbffa1ae0d5a7d (commit) from 52b99b3efb655a9ef1000f4a7262c379f34501ea (commit)
- Log ----------------------------------------------------------------- http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/plugins;a=commit;h=cbe8412038c9d59bdc968ac1a8cbffa1ae0d5a7d commit cbe8412038c9d59bdc968ac1a8cbffa1ae0d5a7d Author: unknown <na08...@ew54384r9c9k7d.dow.com> Date: Wed Aug 8 08:34:41 2012 +0200 [plugin.audio.mp3search] -v0.2.1 diff --git a/plugin.audio.mp3search/addon.xml b/plugin.audio.mp3search/addon.xml index 144b3af..b525c12 100644 --- a/plugin.audio.mp3search/addon.xml +++ b/plugin.audio.mp3search/addon.xml @@ -1,10 +1,11 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <addon id="plugin.audio.mp3search" name="MP3 Search" - version="0.1.0" + version="0.2.1" provider-name="g...@seznam.cz"> <requires> <import addon="xbmc.python" version="2.0"/> + <import addon="script.module.simple.downloader.beta" version="0.9.1"/> </requires> <extension point="xbmc.python.pluginsource" provides="audio" @@ -13,8 +14,8 @@ </extension> <extension point="xbmc.addon.metadata"> <language></language> - <summary lang="en">Search and play mp3's </summary> - <description lang="en">Search and play mp3's</description> + <summary lang="en">Search,play and download mp3's </summary> + <description lang="en">With this addon you can search for mp3's, listen and download them.</description> <disclaimer></disclaimer> <platform>all</platform> </extension> diff --git a/plugin.audio.mp3search/changelog.txt b/plugin.audio.mp3search/changelog.txt index f075b02..b2d1a29 100644 --- a/plugin.audio.mp3search/changelog.txt +++ b/plugin.audio.mp3search/changelog.txt @@ -1,2 +1,16 @@ +[B]0.2.1:[/B] +Updated due to site changes (grrrr...) + +- different access to site +- searched (and found) songs are now 'playable' +- mined song name, artist, album and some other atributes +- items can be downloaded (via context menu) - still experimental + Thanx to simple.downloader plugin ! + Dont forget to setup download path in plugin settings + + [B]0.1.0:[/B] First version - please report bugs to g...@seznam.cz + + + diff --git a/plugin.audio.mp3search/default.py b/plugin.audio.mp3search/default.py index 928cb8c..b57fb90 100644 --- a/plugin.audio.mp3search/default.py +++ b/plugin.audio.mp3search/default.py @@ -2,11 +2,15 @@ # -*- coding: utf-8 -*- import urllib,urllib2,re,xbmc,xbmcgui,xbmcplugin,sys,os,xbmcaddon,string +import SimpleDownloader as downloader +downloader = downloader.SimpleDownloader() + + # plugin constants __plugin__ = "mp3search" __author__ = "g...@seznam.cz" __url__ = "" -__version__ = "0.1" +__version__ = "0.2.1" @@ -18,26 +22,54 @@ __icons__=os.path.join(__home__,'resources') icon = xbmc.translatePath( os.path.join( __home__, 'icon.png' ) ) searchicon = xbmc.translatePath( os.path.join( __home__,'resources', 'search.png' ) ) playicon = xbmc.translatePath( os.path.join( __home__,'resources', 'play.png' ) ) - +downloadpath= __settings__.getSetting('download_path')#__profile__ +phomepath=xbmc.translatePath( os.path.join( __home__, 'default.py' ) ) +debug=False def replaceUrl(url): a=string.replace(url,"%3A",":") a=string.replace(a,"%2F","/") return a +def replaceUrlSpecial(url): + a=string.replace(url,"%3A",":") + a=string.replace(a,"%2F","/") + a=string.replace(a,"+","%20") + a=string.replace(a,"%2520","%20") + return a + +def getPageParam(page,param): + h=re.compile(param+'.+\s+<.+').findall(page) + if (len(h))>0: + g=re.compile('>([^<>\n\r]+)<').findall(h[0]) + if (len(g))>0: + return g[0] + else: + return 'N/A' + else: + return 'N/F' -def addLink(name, mode, url, desc, duration, iconimage,icolor=None): - u=sys.argv[0]+"?url="+urllib.quote_plus(replaceUrl(url))+"&mode="+urllib.quote_plus(str(mode))+"&cmd="+urllib.quote_plus(replaceUrl(url))+"&name="+urllib.quote_plus(name)+"&desc="+urllib.quote_plus(desc)+"&iconimage="+urllib.quote_plus(replaceUrl(iconimage)) + +def downloadAudio(urlx,title,targetpath): + paramsd = { "url": replaceUrlSpecial(urlx), "download_path": targetpath, "Title": title } + downloader.download(title+'.mp3', paramsd) + + + +def addLink(name, artist, album, mode, urlx, desc, descfile, duration, iconimage,icolor=None): + u=sys.argv[0]+"?url="+urllib.quote_plus(replaceUrl(urlx))+"&mode="+urllib.quote_plus(str(mode))+"&cmd="+urllib.quote_plus(replaceUrl(urlx))+"&name="+urllib.quote_plus(name)+"&desc="+urllib.quote_plus(desc)+"&iconimage="+urllib.quote_plus(replaceUrl(iconimage)) ok=True if icolor != None: liz=xbmcgui.ListItem(label="[COLOR FF" + icolor + "]" + name + "[/COLOR]", iconImage=iconimage, thumbnailImage=iconimage) else: liz=xbmcgui.ListItem(name, iconImage=iconimage, thumbnailImage=iconimage) - liz.setInfo( type="Music", infoLabels={ "Title": name, "Plot": desc, "Duration": duration } ) - liz.setProperty("IsPlayable","false") + liz.setInfo( type="Music", infoLabels={ "Title": name, 'artist': artist, 'album': album, 'Comment': desc, 'Duration': duration, 'File': descfile } ) + contextMenu = [(__language__(30009),'XBMC.RunScript('+phomepath+',0,"?mode=down&url='+urllib.quote_plus(urlx)+'&desc=&name='+name+'&cmd=down")')] + liz.addContextMenuItems(contextMenu) - ok=xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]),url=u,listitem=liz,isFolder=False) + liz.setProperty("IsPlayable","true") + ok=xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]),url=urlx,listitem=liz,isFolder=False) @@ -51,29 +83,16 @@ def addDir(name, url, mode, cmd, desc, iconimage,icolor=None): liz.setInfo( type="Audio", infoLabels={ "Title": name, "Plot": desc } ) ok=xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]),url=u,listitem=liz,isFolder=True) + # Get a search query from keyboard -def readKbd(): - kb = xbmc.Keyboard("",__language__(30006), False) +def readKbd(default): + kb = xbmc.Keyboard(default,__language__(30006), False) kb.doModal() if (kb.isConfirmed() and len(kb.getText()) > 2): return kb.getText() -# Play a link -def playLink(listen_url,lstItem=None,isave=True): - - if isave: - aplayed=getDatFile("played.dat") - if aplayed == None: - aplayed=[listen_url] - else: - aplayed.append(listen_url) - - saveDatFile("played.dat",aplayed) - xbmc.Player().play(replaceUrl(listen_url),lstItem) - - #read dat file def getDatFile(dfilepath): if os.path.isfile(__profile__ + dfilepath): @@ -116,9 +135,11 @@ def getParams(): param[splitparams[0]]=splitparams[1] return param + + + #fill up searched def fillSearched(): - #1.nacist ax=getDatFile("searched.dat") try: @@ -131,21 +152,6 @@ def fillSearched(): xbmcplugin.endOfDirectory(int(sys.argv[1])) -#fill up searched -def fillPlayed(): - #1.load file - ax=getDatFile("played.dat") - try: - - if len(ax)>0: - for sidx in range(len(ax)): - m=re.compile("downloadmp3-(.+?)\.xhtml").findall(ax[sidx]) - addLink(m[0],"played-item", ax[sidx], '','unknown', playicon,"8080FF") - - except: - pass - xbmcplugin.endOfDirectory(int(sys.argv[1])) - #do search def doSearch(fquery,fpage,isave=True): @@ -157,26 +163,14 @@ def doSearch(fquery,fpage,isave=True): req.add_header('Cache-Control',' no-cache') req.add_header('Connection',' close') - try: - response = urllib2.urlopen(req) - link=response.read() - - - response.close() - - match=re.compile('<a href="http://togrool.com/download(.+?)\?').findall(link) - match2=re.compile('<div class="img"><img src="(.+?)"').findall(link) - match3=re.compile('<div class="item-title">(.+?)<.+?>(.+?)<').findall(link) - - kusurl='http://togrool.com/downloadmp3' + try: + response = urllib2.urlopen(req) + link=response.read() + response.close() + match=re.compile('<a href="http://togrool.com/download(.+?)\?').findall(link) - if len(match)==0: - #xbmc.executebuiltin('XBMC.Notification("'+__language__(30003)+'","'+__language__(30004)+'",5000,"'+icon+'")') - pass - else: - if isave: - + if isave: asearched=getDatFile("searched.dat") if asearched == None: asearched=[fquery] @@ -184,75 +178,94 @@ def doSearch(fquery,fpage,isave=True): asearched.append(fquery) saveDatFile("searched.dat",asearched) - - - for idx in range(0,len(match)): - addLink(match3[idx][0]+match3[idx][1],"play", kusurl+match[idx], '','unknown', match2[idx]) - + for i in range(len(match)): + + req = urllib2.Request('http://togrool.com/download'+match[i]) + req.add_header('User-Agent', ' Mozilla/5.0 (Windows NT 5.1; rv:13.0) Gecko/20100101 Firefox/13.0.1') + req.add_header('Cache-Control',' no-cache') + req.add_header('Connection',' keep-alive') + + try: + response = urllib2.urlopen(req) + link=response.read() + response.close() + match1=re.compile('<param name="FlashVars" value="mp3=(.+?\.mp3)').findall(link) #target mp3 + match2=re.compile('<img src="(.+?)"').findall(link) #target icon + if (len(match1))>0: + + if (len(match2))>0: + icn=match2[0] + else: + icn=playicon + + informations = '[COLOR FF80AA20]Downloads:' + getPageParam(link,'Downloads:') + '[/COLOR] [COLOR FF00CCCC]Rating:' + getPageParam(link,'Rating:') + '[/COLOR] [COLOR FFAA4020]Size:' + getPageParam(link,'Size:') + '[/COLOR] [COLOR FFCC00CC]Duration:' + getPageParam(link,'Duration:')+ '[/COLOR] [COLOR FF0080CC]Lyrics:' + getPageParam(link,'Lyrics:')+ '[/COLOR] [COLOR FF20EE20]Bitrate:' + getPageParam(link,'Bitrate:') + '[/COLOR] ' + addLink(getPageParam(link,'Band name:')+' - '+getPageParam(link,'Song name:'),getPageParam(link,'Band name:'),getPageParam(link,'Album name:'),"play", replaceUrlSpecial(match1[0]), informations,'','12:34',icn) + + except urllib2.URLError, e: + pass + + addDir('>> '+__language__(30005)+' >>','','searchnext',fquery,str(fpage+1),'DefaultFolder.png',"FF80FF") - - xbmcplugin.endOfDirectory(int(sys.argv[1])) + xbmcplugin.endOfDirectory(int(sys.argv[1])) + #Container.SetViewMode(id) + + + except urllib2.URLError, e: - dlg=xbmcgui.Dialog() - tdlg=dlg.ok(__language__(30007),__language__(30007)+' '+str(e.code),'') + pass -# Main ---------------------------------------------------- + + +# Main ------------------------------------------------------------------------------------------------- params=getParams() +mode='' +param1='' +param2='' +namet='' +buurl='' + try: + + buurl = params["url"] mode = params["mode"] param1 = params["cmd"] param2 = params["desc"] namet = params["name"] - - - + except: - mode = 0 + mode = '' # Menu stuff if mode == "search": - a_query = readKbd() + a_query = readKbd("") if a_query != None: doSearch(a_query,1,True) #sort() elif mode == "searched-item": - a_query = namet - doSearch(a_query,1,False) + a_query = readKbd(namet) + if a_query != None: + doSearch(a_query,1,False) elif mode=='searched': fillSearched() -elif mode=='played': - fillPlayed() - -elif mode=='played-item': - playLink(param1,None,False) - -elif mode=='play': - playLink(param1,None,True) - elif mode == "searchnext": doSearch(param1,int(param2),False) elif mode=='down': - saveAudioFile(param1,__profile__) - + downloadAudio(buurl,namet,downloadpath) else: addDir(__language__(30000)+' >','','search','','','DefaultFolder.png') addDir(__language__(30001)+' >','','searched','','','DefaultFolder.png') - addDir(__language__(30002)+' >','','played','','','DefaultFolder.png') - - xbmcplugin.endOfDirectory(int(sys.argv[1])) - diff --git a/plugin.audio.mp3search/resources/language/English/strings.xml b/plugin.audio.mp3search/resources/language/English/strings.xml index 16ef777..9bbbca4 100644 --- a/plugin.audio.mp3search/resources/language/English/strings.xml +++ b/plugin.audio.mp3search/resources/language/English/strings.xml @@ -8,5 +8,7 @@ <string id="30005">Next Page</string> <string id="30006">Enter keyword to search</string> <string id="30007">Error</string> + <string id="30008">Download path</string> + <string id="30009">Download this MP3</string> </strings> ----------------------------------------------------------------------- Summary of changes: plugin.audio.mp3search/addon.xml | 7 +- plugin.audio.mp3search/changelog.txt | 14 ++ plugin.audio.mp3search/default.py | 191 +++++++++++--------- .../resources/language/English/strings.xml | 2 + plugin.audio.mp3search/resources/settings.xml | 4 + 5 files changed, 126 insertions(+), 92 deletions(-) create mode 100644 plugin.audio.mp3search/resources/settings.xml hooks/post-receive -- Plugins ------------------------------------------------------------------------------ Live Security Virtual Conference Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ _______________________________________________ Xbmc-addons mailing list Xbmc-addons@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/xbmc-addons