information kickass update
This commit is contained in:
1 parent
720d945133
commit
3235180025
17 files changed
+914
-643
No files matched your search
@@ -19,6 +19,7 @@
|
||||
'''
|
||||
import re
|
||||
import Content
|
||||
from BeautifulSoup import BeautifulSoup
|
||||
|
||||
class KickAssSo(Content.Content):
|
||||
category_dict = {
|
||||
@@ -85,9 +86,9 @@ class KickAssSo(Content.Content):
|
||||
num = 51
|
||||
good_forums=['TV','Anime','Movies']
|
||||
result = re.compile(
|
||||
r'''<a title="Download torrent file" href="(.+?)\?.+?" class=".+?"><i.+?<a.+?<a.+?<a href=".+?html" class=".+?">(.+?)</a>.+? in <span.+?"><strong>.+?">(.+?)</a>''',
|
||||
r'''<a title="Download torrent file" href="(.+?)\?.+?" class=".+?"><i.+?<a.+?<a.+?<a href="(.+?html)" class=".+?">(.+?)</a>.+? in <span.+?"><strong>.+?">(.+?)</a>''',
|
||||
re.DOTALL).findall(response)
|
||||
for link,title,forum in result:
|
||||
for link,infolink,title,forum in result:
|
||||
#main
|
||||
if forum in good_forums:
|
||||
info = {}
|
||||
@@ -99,9 +100,75 @@ class KickAssSo(Content.Content):
|
||||
|
||||
info['label'] = info['title'] = self.unescape(title)
|
||||
info['link'] = link
|
||||
info['infolink']=self.baseurl+infolink
|
||||
|
||||
contentList.append((
|
||||
int(int(self.sourceWeight) * (int(num))),
|
||||
original_title, title, int(year), img, info,
|
||||
))
|
||||
return contentList
|
||||
|
||||
def get_info(self, url):
|
||||
movieInfo={}
|
||||
color='[COLOR blue]%s:[/COLOR] %s\r\n'
|
||||
response = self.makeRequest(url, headers=self.headers)
|
||||
|
||||
if None != response and 0 < len(response):
|
||||
Soup = BeautifulSoup(response)
|
||||
result = Soup.find('div', 'torrentMediaInfo')
|
||||
if not result:
|
||||
return None
|
||||
li=result.findAll('li')
|
||||
info,movieInfo={'Cast':''},{'desc':'','poster':'','title':'','views':'0','rating':'50','kinopoisk':''}
|
||||
try:
|
||||
img=result.find('a',{'class':'movieCover'}).find('img').get('src')
|
||||
movieInfo['poster']='http:'+img
|
||||
except:
|
||||
pass
|
||||
try:
|
||||
movie=re.compile('View all <strong>(.+?)</strong> episodes</a>').match(str(result))
|
||||
if movie:
|
||||
info['Movie']=movie.group(1)
|
||||
except:
|
||||
pass
|
||||
for i in li:
|
||||
name=i.find('strong').text
|
||||
if name:
|
||||
info[name.rstrip(':')]=i.text.replace(name,'',1)
|
||||
plot=result.find('div',{'id':'summary'})
|
||||
if plot:
|
||||
cut=plot.find('strong').text
|
||||
info['plot']=plot.text.replace(cut,'',1).replace('report summary','')
|
||||
#print str(result)
|
||||
cast=re.compile('<a href="/movies/actor/.+?">(.+?)</a>').findall(str(result))
|
||||
if cast:
|
||||
for actor in cast:
|
||||
info['Cast']+=actor+", "
|
||||
if 'Genres' in info:
|
||||
info['Genres']=info['Genres'].replace(', ',',').replace(',',', ')
|
||||
for key in info.keys():
|
||||
if not 'Movie' in info and info[key]=='addto bookmarks':
|
||||
movieInfo['title']=self.unescape(key)
|
||||
info['TV Show']=self.unescape(key)
|
||||
if not 'plot' in info and 'Summary' in key:
|
||||
info['plot']=info[key]
|
||||
|
||||
for i in ['Movie','TV Show','Release date','Original run','Episode','Air date','Genres','Language','Director','Writers','Cast','Original run','IMDb rating','AniDB rating']:
|
||||
if info.get(i) and info.get(i) not in ['']:
|
||||
movieInfo['desc']+=color %(i,info.get(i))
|
||||
if i=='Movie':
|
||||
movieInfo['title']=info.get(i)
|
||||
|
||||
for i in ['plot','IMDb link','RottenTomatoes']:
|
||||
if info.get(i) and info.get(i) not in ['']:
|
||||
if i=='plot':
|
||||
movieInfo['desc']+='\r\n[COLOR blue]Plot:[/COLOR]\r\n'+info.get(i)
|
||||
if i=='RottenTomatoes':
|
||||
movieInfo['rating']=str(info.get(i).split('%')[0])
|
||||
if i=='IMDb link':
|
||||
movieInfo['kinopoisk']='http://imdb.snick.ru/ratefor/02/tt%s.png' % info.get(i)
|
||||
|
||||
|
||||
#print str(info)
|
||||
|
||||
return movieInfo
|
||||
@@ -36,6 +36,7 @@
|
||||
<string id="30036">Open Context Menu</string>
|
||||
<string id="30037">Download via Torrent-client</string>
|
||||
<string id="30038">Download via Python-Libtorrent</string>
|
||||
<string id="30039">Sort search results by seeds</string>
|
||||
<string id="30101">Interface</string>
|
||||
<string id="30102">P2P Network</string>
|
||||
<string id="30103">Advanced</string>
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
<string id="30036">Открыть Контекстное меню</string>
|
||||
<string id="30037">Скачать Торрент-клиентом</string>
|
||||
<string id="30038">Скачать Python-Libtorrent</string>
|
||||
<string id="30039">Сортировать поиск по количеству раздающих</string>
|
||||
<string id="30101">Интерфейс</string>
|
||||
<string id="30102">P2P Сеть</string>
|
||||
<string id="30103">Дополнительные</string>
|
||||
|
||||
@@ -146,7 +146,7 @@ class Cache:
|
||||
|
||||
def download(self):
|
||||
dirname = os.path.dirname(self.filename)
|
||||
zipname = os.path.basename(self.filename).rstrip('.db') + '.zip'
|
||||
zipname = os.path.basename(self.filename).replace('.db','') + '.zip'
|
||||
url = 'http://www.tat-store.ru/torrenter/' + zipname
|
||||
self.http = HTTP()
|
||||
response = self.http.fetch(url, download=os.path.join(dirname, zipname), progress=True)
|
||||
|
||||
@@ -63,7 +63,7 @@ class KickAssSo(SearcherABC.SearcherABC):
|
||||
|
||||
def search(self, keyword):
|
||||
filesList = []
|
||||
url = "http://kickass.so/usearch/%s/?field=seeders&sorder=desc" % urllib.quote_plus(keyword)
|
||||
url = "http://kickass.so/usearch/%s/?field=time_add&sorder=desc" % urllib.quote_plus(keyword)
|
||||
headers = [('User-Agent',
|
||||
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 YaBrowser/14.10.2062.12061 Safari/537.36'),
|
||||
('Referer', 'http://kickass.so/'), ('Accept-encoding', 'gzip'), ]
|
||||
|
||||
@@ -19,6 +19,12 @@
|
||||
label="30020"
|
||||
default="true"
|
||||
/>
|
||||
<setting
|
||||
id="sort_search"
|
||||
type="bool"
|
||||
label="30039"
|
||||
default="true"
|
||||
/>
|
||||
<setting
|
||||
id="skin_optimization"
|
||||
type="enum"
|
||||
|
||||
@@ -0,0 +1,218 @@
|
||||
<window>
|
||||
<coordinates>
|
||||
<system>1</system>
|
||||
<posx>240</posx>
|
||||
<posy>20</posy>
|
||||
</coordinates>
|
||||
<include>dialogeffect</include>
|
||||
<controls>
|
||||
<control type="group">
|
||||
<animation effect="fade" time="250">WindowOpen</animation>
|
||||
<animation effect="fade" time="250">WindowClose</animation>
|
||||
<control type="image">
|
||||
<description>background image</description>
|
||||
<posx>0</posx>
|
||||
<posy>0</posy>
|
||||
<width>800</width>
|
||||
<height>680</height>
|
||||
<texture border="40">DialogBack.png</texture>
|
||||
</control>
|
||||
<control type="image">
|
||||
<description>Dialog Header image</description>
|
||||
<posx>40</posx>
|
||||
<posy>16</posy>
|
||||
<width>720</width>
|
||||
<height>40</height>
|
||||
<texture>dialogheader.png</texture>
|
||||
</control>
|
||||
<control type="label" id="1">
|
||||
<description>header label</description>
|
||||
<posx>40</posx>
|
||||
<posy>20</posy>
|
||||
<width>720</width>
|
||||
<height>30</height>
|
||||
<font>font13_title</font>
|
||||
<label>Информация о фильме</label>
|
||||
<align>center</align>
|
||||
<aligny>center</aligny>
|
||||
<textcolor>selected</textcolor>
|
||||
<shadowcolor>black</shadowcolor>
|
||||
</control>
|
||||
|
||||
<control type="button" id="2">
|
||||
<description>Close Window button</description>
|
||||
<posx>710</posx>
|
||||
<posy>15</posy>
|
||||
<width>64</width>
|
||||
<height>32</height>
|
||||
<label>-</label>
|
||||
<font>-</font>
|
||||
<onclick>PreviousMenu</onclick>
|
||||
<texturefocus>DialogCloseButton-focus.png</texturefocus>
|
||||
<texturenofocus>DialogCloseButton.png</texturenofocus>
|
||||
<onleft>10</onleft>
|
||||
<onright>10</onright>
|
||||
<onup>10</onup>
|
||||
<ondown>10</ondown>
|
||||
<visible>system.getbool(input.enablemouse)</visible>
|
||||
</control>
|
||||
|
||||
<control type="scrollbar" id="60">
|
||||
<posx>760</posx>
|
||||
<posy>100</posy>
|
||||
<width>25</width>
|
||||
<height>495</height>
|
||||
<texturesliderbackground border="0,14,0,14">ScrollBarV.png</texturesliderbackground>
|
||||
<texturesliderbar border="0,14,0,14">ScrollBarV_bar.png</texturesliderbar>
|
||||
<texturesliderbarfocus border="0,14,0,14">ScrollBarV_bar_focus.png</texturesliderbarfocus>
|
||||
<textureslidernib>ScrollBarNib.png</textureslidernib>
|
||||
<textureslidernibfocus>ScrollBarNib.png</textureslidernibfocus>
|
||||
<onleft>30</onleft>
|
||||
<onright>131</onright>
|
||||
<showonepage>true</showonepage>
|
||||
<visible>IntegerGreaterThan(Container(32).NumPages,1)</visible>
|
||||
<orientation>vertical</orientation>
|
||||
</control>
|
||||
|
||||
<control type="image" id="31">
|
||||
<description>Dialog Header image</description>
|
||||
<posx>33</posx>
|
||||
<posy>85</posy>
|
||||
<width>104</width>
|
||||
<height>149</height>
|
||||
<texture></texture>
|
||||
</control>
|
||||
|
||||
<control type="label" id="34">
|
||||
<description>rating</description>
|
||||
<posx>34</posx>
|
||||
<posy>240</posy>
|
||||
<width>102</width>
|
||||
<height>20</height>
|
||||
<visible>true</visible>
|
||||
<align>left</align>
|
||||
<aligny>center</aligny>
|
||||
<scroll>false</scroll>
|
||||
<label></label>
|
||||
<haspath>false</haspath>
|
||||
<font>font10</font>
|
||||
<textcolor>white</textcolor>
|
||||
<shadowcolor>black</shadowcolor>
|
||||
<wrapmultiline>false</wrapmultiline>
|
||||
</control>
|
||||
|
||||
<control type="label" id="35">
|
||||
<description>rating</description>
|
||||
<posx>34</posx>
|
||||
<posy>260</posy>
|
||||
<width>102</width>
|
||||
<height>20</height>
|
||||
<visible>true</visible>
|
||||
<align>left</align>
|
||||
<aligny>center</aligny>
|
||||
<scroll>false</scroll>
|
||||
<label>[COLOR blue]Рейтинг:[/COLOR] [COLOR red]-200[/COLOR]</label>
|
||||
<haspath>false</haspath>
|
||||
<font>font10</font>
|
||||
<textcolor>white</textcolor>
|
||||
<shadowcolor>black</shadowcolor>
|
||||
<wrapmultiline>false</wrapmultiline>
|
||||
</control>
|
||||
|
||||
<control type="image" id="36">
|
||||
<description>kinopoisk</description>
|
||||
<posx>34</posx>
|
||||
<posy>292</posy>
|
||||
<width>102</width>
|
||||
<height>38</height>
|
||||
<texture></texture>
|
||||
</control>
|
||||
|
||||
<control type="textbox" id="32">
|
||||
<description>filepath</description>
|
||||
<posx>180</posx>
|
||||
<posy>70</posy>
|
||||
<width>550</width>
|
||||
<pagecontrol>60</pagecontrol>
|
||||
<height max="470">470</height>
|
||||
<align>left</align>
|
||||
<aligny>top</aligny>
|
||||
<font>font18</font>
|
||||
<text>Нет описания</text>
|
||||
<align>center</align>
|
||||
<aligny>center</aligny>
|
||||
<textcolor>white</textcolor>
|
||||
<shadowcolor>black</shadowcolor>
|
||||
<wrapmultiline>true</wrapmultiline>
|
||||
</control>
|
||||
<control type="group" id="9001">
|
||||
<posy>615</posy>
|
||||
<posx>50</posx>
|
||||
|
||||
<control type="button" id="22">
|
||||
<description>close</description>
|
||||
<posx>350</posx>
|
||||
<posy>0</posy>
|
||||
<width>320</width>
|
||||
<height>40</height>
|
||||
<align>center</align>
|
||||
<aligny>center</aligny>
|
||||
<font>font12_title</font>
|
||||
<label></label>
|
||||
<onleft>33</onleft>
|
||||
<onright>60</onright>
|
||||
<onup>30</onup>
|
||||
<ondown>30</ondown>
|
||||
</control>
|
||||
|
||||
<control type="button" id="131">
|
||||
<description>play</description>
|
||||
<posx>20</posx>
|
||||
<posy>-50</posy>
|
||||
<width>320</width>
|
||||
<height>40</height>
|
||||
<align>center</align>
|
||||
<aligny>center</aligny>
|
||||
<font>font12_title</font>
|
||||
<label></label>
|
||||
<onleft>60</onleft>
|
||||
<onright>30</onright>
|
||||
<onup>33</onup>
|
||||
<ondown>33</ondown>
|
||||
</control>
|
||||
|
||||
<control type="button" id="30">
|
||||
<description>libtorrent</description>
|
||||
<posx>350</posx>
|
||||
<posy>-50</posy>
|
||||
<width>320</width>
|
||||
<height>40</height>
|
||||
<align>center</align>
|
||||
<aligny>center</aligny>
|
||||
<font>font12_title</font>
|
||||
<label></label>
|
||||
<onleft>131</onleft>
|
||||
<onright>60</onright>
|
||||
<onup>22</onup>
|
||||
<ondown>22</ondown>
|
||||
</control>
|
||||
|
||||
<control type="button" id="33">
|
||||
<description>tclient</description>
|
||||
<posx>20</posx>
|
||||
<posy>0</posy>
|
||||
<width>320</width>
|
||||
<height>40</height>
|
||||
<align>center</align>
|
||||
<aligny>center</aligny>
|
||||
<font>font12_title</font>
|
||||
<label>T-client</label>
|
||||
<onleft>22</onleft>
|
||||
<onright>22</onright>
|
||||
<onup>131</onup>
|
||||
<ondown>131</ondown>
|
||||
</control>
|
||||
</control>
|
||||
</control>
|
||||
</controls>
|
||||
</window>
|
||||
@@ -0,0 +1,78 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import xbmcgui, Localization, sys, xbmc
|
||||
|
||||
KEY_BUTTON_BACK = 275
|
||||
KEY_KEYBOARD_ESC = 61467
|
||||
ACTION_PREVIOUS_MENU = 10
|
||||
ACTION_NAV_BACK = 92
|
||||
class DialogXml(xbmcgui.WindowXMLDialog):
|
||||
def onInit(self):
|
||||
print "onInit(): Window Initialized"
|
||||
localize=Localization.localize
|
||||
color='[COLOR %s]%s[/COLOR]'
|
||||
self.movie_label = self.getControl(32)
|
||||
self.movie_label.setText(self.movieInfo['desc'])
|
||||
|
||||
if self.movieInfo.get('views'):
|
||||
self.view_label = self.getControl(34)
|
||||
self.view_label.setLabel(color % ('blue', localize('Views:'))+self.movieInfo['views'])
|
||||
|
||||
self.view_label = self.getControl(35)
|
||||
self.ratingcolor = 'green'
|
||||
self.ratingint = int(self.movieInfo['rating'])
|
||||
if(self.ratingint < 70):
|
||||
self.ratingcolor = 'red'
|
||||
self.view_label.setLabel(color % ('blue', localize('Rating:'))+color % (self.ratingcolor, self.movieInfo['rating']))
|
||||
|
||||
self.movie_label = self.getControl(1)
|
||||
self.movie_label.setLabel(self.movieInfo['title'])
|
||||
|
||||
self.movie_label = self.getControl(32)
|
||||
self.movie_label.setText(self.movieInfo['desc'])
|
||||
|
||||
self.poster = self.getControl(31)
|
||||
self.poster.setImage(self.movieInfo['poster'])
|
||||
|
||||
self.poster = self.getControl(36)
|
||||
self.poster.setImage(self.movieInfo['kinopoisk'])
|
||||
self.getControl(22).setLabel(localize('Close'))
|
||||
self.getControl(33).setLabel(localize('Download via T-client'))
|
||||
self.getControl(30).setLabel(localize('Download via Libtorrent'))
|
||||
self.getControl(131).setLabel(localize('Play'))
|
||||
|
||||
self.setFocus(self.getControl(22))
|
||||
|
||||
def onAction(self, action):
|
||||
buttonCode = action.getButtonCode()
|
||||
if (action == ACTION_NAV_BACK or action == ACTION_PREVIOUS_MENU):
|
||||
self.close()
|
||||
if (buttonCode == KEY_BUTTON_BACK or buttonCode == KEY_KEYBOARD_ESC):
|
||||
self.close()
|
||||
|
||||
def onClick(self, controlID):
|
||||
if (controlID == 2 or controlID == 22):
|
||||
self.close()
|
||||
if (controlID == 30):
|
||||
self.RunPlugin('downloadLibtorrent')
|
||||
if (controlID == 33):
|
||||
self.RunPlugin('downloadFilesList')
|
||||
if (controlID == 131):
|
||||
self.RunPlugin('openTorrent&external=1')
|
||||
|
||||
def RunPlugin(self, action):
|
||||
if self.link:
|
||||
exec_str='XBMC.RunPlugin(%s)' % \
|
||||
('%s?action=%s&url=%s') % \
|
||||
(sys.argv[0], action, self.link)
|
||||
xbmc.executebuiltin(exec_str)
|
||||
|
||||
|
||||
def onFocus(self, controlID):
|
||||
#print "onFocus(): control %i" % controlID
|
||||
pass
|
||||
|
||||
|
||||
def doModal(self, movieInfo, url):
|
||||
self.movieInfo = movieInfo
|
||||
self.link=url
|
||||
xbmcgui.WindowXMLDialog.doModal(self)
|
||||
Whitespace-only changes.
Reference in new issue
Block a user