рд╣рдо XBMC рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдкреНрд▓рдЧрдЗрди рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВред рдЕрдм рддрдХ рд▓рд╛рдареА рдФрд░ рдмрд╛рдХреА рд╕рднреА рдХреЗ рдмрд┐рдирд╛


рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░ред рдпрд╣ рд╡рд┐рд╖рдп рдЕрджреНрднреБрдд рдХрд╛рд░реНрдпрдХреНрд░рдо XBMC рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧ-рдЗрди (рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдРрдб-рдСрди, рдРрдб-рдСрди) рдмрдирд╛рдиреЗ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реЛрдЧрд╛ред рдХрдард┐рдирд╛рдИ рдХрд╛ рд╕реНрддрд░: рд╢реБрд░реБрдЖрддреА рдХреЗ рд▓рд┐рдПред рдЗрд╕рдореЗрдВ HTML рдХреЗ рдЬреНрдЮрд╛рди рдФрд░ рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рдХрд╛рдо рдХреЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА; рдпрд╣ рдЬрд╛рдирдХрд░ рджреБрдЦ рдирд╣реАрдВ рд╣реБрдЖ рдХрд┐ рдкрд╛рдпрдерди рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рдЕрджреНрд╡рд┐рддреАрдп рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдФрд░ рдЬрд╛рджреВ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдХрдЯреМрддреА рдХреЗ рддрд╣рдд рдЗрдВрддрдЬрд╛рд░ рди рдХрд░реЗрдВ, рдпрд╣ рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд┐рдВрджреБ рдФрд░ рдкреНрд▓рдЧ-рдЗрди рдХреЗ рдпрд╛рдВрддреНрд░рд┐рдХреА рдХреЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред рдХреЛрдб рд╣реЛрдЧрд╛, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ, рд╕реНрдкрд╖реНрдЯ рд╣реЛред

рдЖрдк рдореЗрдВ рд╕реЗ рдХреБрдЫ рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВ: "рдЖрдЦрд┐рд░рдХрд╛рд░, рдПрдХ рд╕реЗрдкрд┐рдпрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╣реИ рдЬреЛ рд░реБрдиреЗрдЯ (рдПрдХреНрд╕рдмреАрдПрдорд╕реА рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ) рдореЗрдВ рдСрдирд▓рд╛рдЗрди рд╕рд╛рдордЧреНрд░реА рдЦреЗрд▓рдиреЗ рдХреЗ рд╕рд╛рде рд▓рдЧрднрдЧ рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рд╕рд╛рдЗрдХрд┐рд▓ рдХреНрдпреЛрдВ? тАЭ рдореИрдВ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкрд░рд┐рдЪрдп рдореЗрдВ рдЕрдкрдиреЗ рддрд░реНрдХ рджреВрдВрдЧрд╛ред



рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛


рдЬрдм рдореИрдВрдиреЗ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓реИрдкрдЯреЙрдк рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рддреЛ рдореИрдВрдиреЗ XBMC рдкреНрд▓рдЧрдЗрдиреНрд╕ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рдпрд╣ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдХрд┐ рд╡рд╣ рдореГрдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЯреАрд╡реА рдХреЗ рд▓рд┐рдП рдорд▓реНрдЯреАрдореАрдбрд┐рдпрд╛ рд╕реЗрдЯ-рдЯреЙрдк рдмреЙрдХреНрд╕ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЯреАрд╡реА рд╡рд░реНрд▓реНрдб рд╡рд╛рдЗрдб рд╡реЗрдм рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рд╕реЗ рд╡рдВрдЪрд┐рдд рдерд╛)ред XBMC рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рд╕рдорд╛рдзрд╛рди рдерд╛, рд▓реЗрдХрд┐рди рдмреБрд░реА рдмрд╛рдд: рдореИрдВ рдХрд┐рд░реНрдЧрд┐рд╕реНрддрд╛рди рдореЗрдВ рд░рд╣рддрд╛ рд╣реВрдВред рдЖрдИрдкреА тАЛтАЛрдкрддреЗ рд╕реЗ рд╕рднреА рдЯреНрд░реИрдлрд╝рд┐рдХ рдЬреЛ рд╣рдорд╛рд░реЗ рджреЗрд╢ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рд╣реИ ("рдмрд╛рд╣рд░реА", рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЛ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ? рдХреЗрд╡рд▓ рдХреБрдЫ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ, рдЕрд╕реАрдорд┐рдд рдЯреИрд░рд┐рдл рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд▓рдЧреЗ)ред рд▓реЗрдХрд┐рди рдЖрдВрддрд░рд┐рдХ рдЯреНрд░реИрдлрд╝рд┐рдХ рд▓рдЧрднрдЧ рдореБрдлрд╝реНрдд рд╣реИ (рдореАрдбрд┐рдпрд╛ рд╕рд╛рдордЧреНрд░реА рд╡рд╛рд▓реЗ рдХрдИ рд▓реЛрдХрдкреНрд░рд┐рдп рд╕рд╛рдЗрдЯ рдкрд░ рдХрдИ рдкреНрд░рджрд╛рддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рд╢реБрд▓реНрдХ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛, рдХрд┐рдпрд╛ред рдЗрд╕ рд▓реЗрдЦрди рдХреЗ рд╕рдордп рддрдХ, рдореИрдВрдиреЗ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред рдЕрдм рдореИрдВ рдПрдХ рдкреАрд╡реАрдЖрд░ рдкреНрд▓рдЧрдЗрди рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдореИрдВ рдЕрдм рдкрд╛рдпрдерди рдореЗрдВ рд╡рд╣ рдХреЛрдб рдирд╣реАрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ рдЬреЛ рд▓реЗрдЦ рдореЗрдВ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░рд╛ рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рдерд╛ рдФрд░ рдРрдб-рдСрди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреА рд╕рдордЭ рдереАред

рдЯреНрд░реЗрдирд┐рдВрдЧ


рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

рдКрдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред рдЖрдкрдХрд╛ рд░рд╛рд╕реНрддрд╛ рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдХреЛрд╖реНрдардХ рдореЗрдВ рдореИрдВрдиреЗ рдЕрдкрдирд╛ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛: рдкрд╛рдпрдерди (C: \ Python \, рддреЛ PathPython )

рдпрд╣ рдЬрд╛рдирдирд╛ рдЕрддрд┐рд╢реНрдпреЛрдХреНрддрд┐рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ XBMC рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдХрд╣рд╛рдБ рд╣реИ:
рд╡рд┐рдВрдбреЛрдЬ :% APPDATA% \ XBMC \ xbmc.log
рд▓рд┐рдирдХреНрд╕ : $ HOME / .xbmc / temp / xbmc.log
Mac OS X : /Users//Library/Logs/xbmc.log

рднрд╛рдЧ рдПрдХ рдЯреНрд░реЗрдирд┐рдВрдЧ


рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдкрд╛рдпрдерди рдХрд╛ рдореЗрд░рд╛ рдЬреНрдЮрд╛рди рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╢реВрдиреНрдп рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдиреЗ рдХрднреА рдЙрд╕рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдбрд░рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдПред рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рдХрдо рд╕реЗ рдХрдо, рдореИрдВрдиреЗ рдРрд╕рд╛ рд╕реЛрдЪрд╛ рдерд╛ред

LineCinema рдХреЛ рдЧрд┐рдиреА рдкрд┐рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред рдХреНрдпреЛрдВ? рдХреНрдпреЛрдВрдХрд┐ рд╣реИрдкреНрдкреАрдУрд▓рд╕ I рд╡рд┐рд╖рдп рдкреНрд▓рдЧ-рдЗрди (XBMC рд░реВрд╕) рдХреЗ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдЕрдВрддрд┐рдо рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ (рдпрджрд┐ рдЖрдк рд╕рдЯреАрдХрддрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ 87 рд╡реЗрдВ рдкрд░) рдореИрдВрдиреЗ рдЗрд╕ рд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рджреЗрдЦрд╛ред рдлрд┐рд░ рд╕рд┐рд░реНрдл рдПрдХ рд╡реЗрдмрд╕рд╛рдЗрдЯред

рдЗрд╕рд▓рд┐рдП, рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдПрдбрд┐рдЯрд░ рдореЗрдВ рдПрдХ рдирдИ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд▓рд┐рдЦреЗрдВ:

# -*- coding: utf-8 -*- #     import urllib, urllib2, re, sys, os #      web- def GetHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urlencode({}), headers)) html = conn.read() conn.close() return html #    html = GetHTML('http://www.linecinema.org/') print html 

PathPython / test.py рдХреЛ рд╕рд╣реЗрдЬреЗрдВ

рдХрдорд╛рдВрдб рдкреНрд░реЙрдореНрдкреНрдЯ рдЦреЛрд▓реЗрдВ рдФрд░ PathPython рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬрд╛рдПрдВред рд╣рдо рдмрд╛рд╣рд░ рд▓реЗ:

python test.py

рдЗрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╕рд╛рдЗрдЯ рдкреГрд╖реНрда рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдиреЗрддреНрд░рд╣реАрди

рдЕрдм, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ, рд╕рд╛рдЗрдЯ рдЦреЛрд▓реЗрдВ рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдЪрдврд╝реЗрдВ (рд╡рд┐рднрд┐рдиреНрди рд╡реЗрдм рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдФрд░ рдлрд╛рдпрд░рдмрдЧ рд╣рдорд╛рд░реА рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ)ред рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рд▓рд╛рдЗрди рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

 <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> 

рдФрд░ рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬрд╝ -1251 рдкреГрд╖реНрда рдХреА рдПрдиреНрдХреЛрдбрд┐рдВрдЧред

рд╣рдо "рдореВрд╡реА рдмрд╛рдп рдЬреЗрдирд░реЗрд╕" рд╕реЗрдХреНрд╢рди рдореЗрдВ рд▓рд┐рдВрдХ рдвреВрдВрдв рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдЬреИрд╕реЗ рджрд┐рдЦрддреЗ рд╣реИрдВ:

 <a href="/newsz/drama-online/" title="" class="mainmenu"></a><br /> 

рд╣рдо рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ (рдпрд╛ рдЦреЛрд▓реЗрдВ, рдпрджрд┐ рд╣рдо рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ)ред рд▓рд╛рдЗрди рд╣рдЯрд╛рдЗрдП
 print html 

рдФрд░ рдЙрд╕рдХреА рдЬрдЧрд╣ рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ

 genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251')) #      (.+?)   url  title (    ) for url, title in genre_links: print title + ' [' + url + ']' 

рдХрд╣рд╛рдБ? +?) рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ рдЬреЛ рд╕рднреА рд╡рд░реНрдгреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ (рдЖрдк рд╣рдм рдкрд░ рдкрд╛рдпрдерди рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ)ред

рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рджреЛрд╣рд░рд╛рдПрдВ

python test.py

рдЗрд╕ рдмрд╛рд░ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рд╢реИрд▓рд┐рдпреЛрдВ рдФрд░ рд▓рд┐рдВрдХ рдХреЗ рдирд╛рдо рд╣реЛрдВрдЧреЗред
рдиреЗрддреНрд░рд╣реАрди

рд▓реЗрдХрд┐рди рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд┐рдВрдХ рд╣реИрдВ рдЬреЛ рдПрдХреНрд╕рдмреАрдПрдорд╕реА рдореЗрдВ рдмреЗрдХрд╛рд░ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ: "рд╣реЛрдо", "рдСрд░реНрдбрд░ рдП рдлрд┐рд▓реНрдо", "рдЯреЗрдХред рд╕рдорд░реНрдерди рдХрд░реЗрдВред " рдЙрдирдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ? рд╣рдо рдЙрдиреНрд╣реЗрдВ рдмрд╛рд╣рд░ рдХрд░ рджреЗрдВрдЧреЗред рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЕрд╢рд┐рд╖реНрдЯ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреЛрдИ рднреА рдмреНрдпреВрдЯреАрдлреБрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд╣рдо isLinkUseful() рдлрд╝рдВрдХреНрд╢рди isLinkUseful() , рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП, isLinkUseful() "рдЕрддрд┐рд░рд┐рдХреНрдд" рд▓рд┐рдВрдХ рдЕрдВрджрд░ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ:

 def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] #  тАЬтАЭ  return needle not in haystack 

рдФрд░ рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдмрджрд▓реЗрдВ:

 for url, title in genre_links: if isLinkUseful(url): print title + ' [' + url + ']' 

рд╣рдо рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред рд╕рдм рдХреБрдЫ рдЬреИрд╕рд╛ рд╣реИ рд╡реИрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
рдиреЗрддреНрд░рд╣реАрди

рдереЛрдбрд╝рд╛ рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдгред рдЕрдм рдПрдХ рд╕реЗрдХреНрд╢рди рдХреЛ рдЪреЗрдХ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВрдиреЗ "рд╡реГрддреНрддрдЪрд┐рддреНрд░" (/ newsz / dokumentalnyij-online /) рд▓рд┐рдпрд╛ред рдХреЛрдб рдмрджрд▓реЗрдВ:

 #url = 'http://www.linecinema.org/' #html = GetHTML(url) #genre_links = re.compile('<a href="(.+?)">(.+?)</a>').findall(html.decode('windows-1251')) #for url, title in genre_links: #if isLinkUseful(url): #print title + ' [' + url + ']' url = 'http://www.linecinema.org/newsz/dokumentalnyij-online/' html = GetHTML(url) genre_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251')) for url, title in genre_links: print title 

рд╣рдо рдЬрд╛рдБрдЪрддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ:
рдиреЗрддреНрд░рд╣реАрди

рдпрд╣рд╛рдВ рд╣рдордиреЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛

(.+?)

(рд╣рд╛рдБ, рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде), рдХреНрдпреЛрдВрдХрд┐ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рднреА рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд╣реИрдВ, рдФрд░ рдпрджрд┐ рд╣рдордиреЗ рдмрд╕ (.+?) рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдкреГрд╖реНрда рд╕реЗ рд╕рднреА рд▓рд┐рдВрдХ рдорд┐рд▓реЗрдВрдЧреЗред рдХреНрдпрд╛ рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?

рднрд╛рдЧ рджреЛ XBMC рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓


рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ (рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ)ред рдФрд░ рдирд╛рдо "рдирдпрд╛ рдлрд╝реЛрд▓реНрдбрд░ (name)" рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░ рдирд╣реАрдВред рдкрд░рд┐рд╡рд░реНрдзрди рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж , рдЖрдк рдпрд╣ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ рдирд╛рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдВрдХрд▓рд┐рдд рд╣реИ:

[.].

( , - ) :

plugin.video.linecinema


. // add-on' ( , -) , :

addon.py
addon.xml
changelog.txt
fanart.jpg
icon.png
LICENSE.txt
/resources
settings.xml
/language/
/lib/
/media/

addon.py тАУ . , ( addon.xml). default.py addon.xml тАУ XBMC: (, , , ); ( *.py); ; , . . changelog.txt , LICENSE.txt тАУ , . fanart.jpg тАУ . . icon.png тАУ "" . . /resources/settings.xml тАУ (, , / ), .. , addon.py. , , . . /resources/language/ - . , , . /resources/lib/ - Python. /resources/media/ - , , . .

: addon.py, addon.xml тАж . , .

addon.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <addon id="plugin.video.linecinema" name="LineCinema" version="0.0.1" provider-name="noname"> <requires> <import addon="xbmc.python" version="1.0"/> </requires> <extension point="xbmc.python.pluginsource" provides="video" library="addon.py"> <provides>video</provides> </extension> <extension point="xbmc.addon.metadata"> <summary>LineCinema.org</summary> <description> , . LineCinema.org </description> <platform>all</platform> </extension> </addon>
. XBMC , "plugin.video.linecinema", "LineCinema", 0.0.1, "noname".

/>
, xbmc.python 1.0.

video тАУ "addon.py". " ".

, addon.xml .

addon.py:

# -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param
xbmcplugin xbmcgui тАУ xbmc.python.

get_params() тАУ , , . , , . , . , , .

:

def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True)

addDir(title, url, mode) тАУ . Mode тАУ , ( ).

addLink(title, url) тАУ , url . url // ..

:

params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))
" ". xbmcplugin.endOfDirectory(int(sys.argv[1])) XBMC, "" .

. getHTML(url) isLinkUseful(needle) addon.py :
addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))

? , .

: ; ; . . : Categories() тАУ , Movies() тАУ , Videos() тАУ . :

def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20)

addDir(title, url + link, 20) print title + ' [' + url + ']' . Categories() - url . , тАУ link .

20 тАУ , Movies(url) . , xbmcplugin.endOfDirectory(int(sys.argv[1])) , :

if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title)
? ? , . , , , . .

:

def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30)
. title[:-12] ? [:-12], , " / Magnificent movie (2013) HDRip ". ""? !

. . , ! :

<script language="javascript"> flashvars = { uid: "player_uppod", bufferproc2 :1, bufferproc_reloadsec :10, st: "/templates/linecinema-dle90/swf/video30-365.txt", file: "http://st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv" }; params = {bgcolor:"#ffffff", allowFullScreen:"true", allowScriptAccess:"always",wmode:"opaque"}; attributes = { id: "player_uppod", name: "player_uppod" }; swfobject.embedSWF("/templates/linecinema-dle90/swf/uppod.swf", "player_uppod", "570", "440", "10.0.0",false,flashvars,params,attributes); </script>
: st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv ( ). :

def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link)
. :

addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20) def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30) def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link) def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title) xbmcplugin.endOfDirectory(int(sys.argv[1]))

-, . : ZIP. . ZIP (!) . XBMC, () > > ZIP . , " ", > > LineCinema .







ZIP : HOW-TO:Write plugins for XBMC (wiki) XBMC Addon Developers Guide (pdf) : 3rd party add-on repositories XBMC Russia XBMC Community Forum

. тАж . , , .

PS , .
[.].

( , - ) :

plugin.video.linecinema


. // add-on' ( , -) , :

addon.py
addon.xml
changelog.txt
fanart.jpg
icon.png
LICENSE.txt
/resources
settings.xml
/language/
/lib/
/media/

addon.py тАУ . , ( addon.xml). default.py addon.xml тАУ XBMC: (, , , ); ( *.py); ; , . . changelog.txt , LICENSE.txt тАУ , . fanart.jpg тАУ . . icon.png тАУ "" . . /resources/settings.xml тАУ (, , / ), .. , addon.py. , , . . /resources/language/ - . , , . /resources/lib/ - Python. /resources/media/ - , , . .

: addon.py, addon.xml тАж . , .

addon.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <addon id="plugin.video.linecinema" name="LineCinema" version="0.0.1" provider-name="noname"> <requires> <import addon="xbmc.python" version="1.0"/> </requires> <extension point="xbmc.python.pluginsource" provides="video" library="addon.py"> <provides>video</provides> </extension> <extension point="xbmc.addon.metadata"> <summary>LineCinema.org</summary> <description> , . LineCinema.org </description> <platform>all</platform> </extension> </addon>
. XBMC , "plugin.video.linecinema", "LineCinema", 0.0.1, "noname".

/>
, xbmc.python 1.0.

video тАУ "addon.py". " ".

, addon.xml .

addon.py:

# -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param
xbmcplugin xbmcgui тАУ xbmc.python.

get_params() тАУ , , . , , . , . , , .

:

def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True)

addDir(title, url, mode) тАУ . Mode тАУ , ( ).

addLink(title, url) тАУ , url . url // ..

:

params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))
" ". xbmcplugin.endOfDirectory(int(sys.argv[1])) XBMC, "" .

. getHTML(url) isLinkUseful(needle) addon.py :
addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))

? , .

: ; ; . . : Categories() тАУ , Movies() тАУ , Videos() тАУ . :

def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20)

addDir(title, url + link, 20) print title + ' [' + url + ']' . Categories() - url . , тАУ link .

20 тАУ , Movies(url) . , xbmcplugin.endOfDirectory(int(sys.argv[1])) , :

if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title)
? ? , . , , , . .

:

def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30)
. title[:-12] ? [:-12], , " / Magnificent movie (2013) HDRip ". ""? !

. . , ! :

<script language="javascript"> flashvars = { uid: "player_uppod", bufferproc2 :1, bufferproc_reloadsec :10, st: "/templates/linecinema-dle90/swf/video30-365.txt", file: "http://st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv" }; params = {bgcolor:"#ffffff", allowFullScreen:"true", allowScriptAccess:"always",wmode:"opaque"}; attributes = { id: "player_uppod", name: "player_uppod" }; swfobject.embedSWF("/templates/linecinema-dle90/swf/uppod.swf", "player_uppod", "570", "440", "10.0.0",false,flashvars,params,attributes); </script>
: st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv ( ). :

def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link)
. :

addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20) def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30) def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link) def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title) xbmcplugin.endOfDirectory(int(sys.argv[1]))

-, . : ZIP. . ZIP (!) . XBMC, () > > ZIP . , " ", > > LineCinema .







ZIP : HOW-TO:Write plugins for XBMC (wiki) XBMC Addon Developers Guide (pdf) : 3rd party add-on repositories XBMC Russia XBMC Community Forum

. тАж . , , .

PS , .
  [.]. 

( , - ) :

plugin.video.linecinema


. // add-on' ( , -) , :

addon.py
addon.xml
changelog.txt
fanart.jpg
icon.png
LICENSE.txt
/resources
settings.xml
/language/
/lib/
/media/

addon.py тАУ . , ( addon.xml). default.py addon.xml тАУ XBMC: (, , , ); ( *.py); ; , . . changelog.txt , LICENSE.txt тАУ , . fanart.jpg тАУ . . icon.png тАУ "" . . /resources/settings.xml тАУ (, , / ), .. , addon.py. , , . . /resources/language/ - . , , . /resources/lib/ - Python. /resources/media/ - , , . .

: addon.py, addon.xml тАж . , .

addon.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <addon id="plugin.video.linecinema" name="LineCinema" version="0.0.1" provider-name="noname"> <requires> <import addon="xbmc.python" version="1.0"/> </requires> <extension point="xbmc.python.pluginsource" provides="video" library="addon.py"> <provides>video</provides> </extension> <extension point="xbmc.addon.metadata"> <summary>LineCinema.org</summary> <description> , . LineCinema.org </description> <platform>all</platform> </extension> </addon>
. XBMC , "plugin.video.linecinema", "LineCinema", 0.0.1, "noname".

/>
, xbmc.python 1.0.

video тАУ "addon.py". " ".

, addon.xml .

addon.py:

# -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param
xbmcplugin xbmcgui тАУ xbmc.python.

get_params() тАУ , , . , , . , . , , .

:

def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True)

addDir(title, url, mode) тАУ . Mode тАУ , ( ).

addLink(title, url) тАУ , url . url // ..

:

params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))
" ". xbmcplugin.endOfDirectory(int(sys.argv[1])) XBMC, "" .

. getHTML(url) isLinkUseful(needle) addon.py :
addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))

? , .

: ; ; . . : Categories() тАУ , Movies() тАУ , Videos() тАУ . :

def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20)

addDir(title, url + link, 20) print title + ' [' + url + ']' . Categories() - url . , тАУ link .

20 тАУ , Movies(url) . , xbmcplugin.endOfDirectory(int(sys.argv[1])) , :

if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title)
? ? , . , , , . .

:

def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30)
. title[:-12] ? [:-12], , " / Magnificent movie (2013) HDRip ". ""? !

. . , ! :

<script language="javascript"> flashvars = { uid: "player_uppod", bufferproc2 :1, bufferproc_reloadsec :10, st: "/templates/linecinema-dle90/swf/video30-365.txt", file: "http://st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv" }; params = {bgcolor:"#ffffff", allowFullScreen:"true", allowScriptAccess:"always",wmode:"opaque"}; attributes = { id: "player_uppod", name: "player_uppod" }; swfobject.embedSWF("/templates/linecinema-dle90/swf/uppod.swf", "player_uppod", "570", "440", "10.0.0",false,flashvars,params,attributes); </script>
: st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv ( ). :

def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link)
. :

addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20) def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30) def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link) def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title) xbmcplugin.endOfDirectory(int(sys.argv[1]))

-, . : ZIP. . ZIP (!) . XBMC, () > > ZIP . , " ", > > LineCinema .







ZIP : HOW-TO:Write plugins for XBMC (wiki) XBMC Addon Developers Guide (pdf) : 3rd party add-on repositories XBMC Russia XBMC Community Forum

. тАж . , , .

PS , .
[.].

( , - ) :

plugin.video.linecinema


. // add-on' ( , -) , :

addon.py
addon.xml
changelog.txt
fanart.jpg
icon.png
LICENSE.txt
/resources
settings.xml
/language/
/lib/
/media/

addon.py тАУ . , ( addon.xml). default.py addon.xml тАУ XBMC: (, , , ); ( *.py); ; , . . changelog.txt , LICENSE.txt тАУ , . fanart.jpg тАУ . . icon.png тАУ "" . . /resources/settings.xml тАУ (, , / ), .. , addon.py. , , . . /resources/language/ - . , , . /resources/lib/ - Python. /resources/media/ - , , . .

: addon.py, addon.xml тАж . , .

addon.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <addon id="plugin.video.linecinema" name="LineCinema" version="0.0.1" provider-name="noname"> <requires> <import addon="xbmc.python" version="1.0"/> </requires> <extension point="xbmc.python.pluginsource" provides="video" library="addon.py"> <provides>video</provides> </extension> <extension point="xbmc.addon.metadata"> <summary>LineCinema.org</summary> <description> , . LineCinema.org </description> <platform>all</platform> </extension> </addon>
. XBMC , "plugin.video.linecinema", "LineCinema", 0.0.1, "noname".

/>
, xbmc.python 1.0.

video тАУ "addon.py". " ".

, addon.xml .

addon.py:

# -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param
xbmcplugin xbmcgui тАУ xbmc.python.

get_params() тАУ , , . , , . , . , , .

:

def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True)

addDir(title, url, mode) тАУ . Mode тАУ , ( ).

addLink(title, url) тАУ , url . url // ..

:

params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))
" ". xbmcplugin.endOfDirectory(int(sys.argv[1])) XBMC, "" .

. getHTML(url) isLinkUseful(needle) addon.py :
addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))

? , .

: ; ; . . : Categories() тАУ , Movies() тАУ , Videos() тАУ . :

def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20)

addDir(title, url + link, 20) print title + ' [' + url + ']' . Categories() - url . , тАУ link .

20 тАУ , Movies(url) . , xbmcplugin.endOfDirectory(int(sys.argv[1])) , :

if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title)
? ? , . , , , . .

:

def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30)
. title[:-12] ? [:-12], , " / Magnificent movie (2013) HDRip ". ""? !

. . , ! :

<script language="javascript"> flashvars = { uid: "player_uppod", bufferproc2 :1, bufferproc_reloadsec :10, st: "/templates/linecinema-dle90/swf/video30-365.txt", file: "http://st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv" }; params = {bgcolor:"#ffffff", allowFullScreen:"true", allowScriptAccess:"always",wmode:"opaque"}; attributes = { id: "player_uppod", name: "player_uppod" }; swfobject.embedSWF("/templates/linecinema-dle90/swf/uppod.swf", "player_uppod", "570", "440", "10.0.0",false,flashvars,params,attributes); </script>
: st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv ( ). :

def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link)
. :

addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20) def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30) def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link) def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title) xbmcplugin.endOfDirectory(int(sys.argv[1]))

-, . : ZIP. . ZIP (!) . XBMC, () > > ZIP . , " ", > > LineCinema .







ZIP : HOW-TO:Write plugins for XBMC (wiki) XBMC Addon Developers Guide (pdf) : 3rd party add-on repositories XBMC Russia XBMC Community Forum

. тАж . , , .

PS , .
  [.]. 

( , - ) :

plugin.video.linecinema


. // add-on' ( , -) , :

addon.py
addon.xml
changelog.txt
fanart.jpg
icon.png
LICENSE.txt
/resources
settings.xml
/language/
/lib/
/media/

addon.py тАУ . , ( addon.xml). default.py addon.xml тАУ XBMC: (, , , ); ( *.py); ; , . . changelog.txt , LICENSE.txt тАУ , . fanart.jpg тАУ . . icon.png тАУ "" . . /resources/settings.xml тАУ (, , / ), .. , addon.py. , , . . /resources/language/ - . , , . /resources/lib/ - Python. /resources/media/ - , , . .

: addon.py, addon.xml тАж . , .

addon.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <addon id="plugin.video.linecinema" name="LineCinema" version="0.0.1" provider-name="noname"> <requires> <import addon="xbmc.python" version="1.0"/> </requires> <extension point="xbmc.python.pluginsource" provides="video" library="addon.py"> <provides>video</provides> </extension> <extension point="xbmc.addon.metadata"> <summary>LineCinema.org</summary> <description> , . LineCinema.org </description> <platform>all</platform> </extension> </addon>
. XBMC , "plugin.video.linecinema", "LineCinema", 0.0.1, "noname".

/>
, xbmc.python 1.0.

video тАУ "addon.py". " ".

, addon.xml .

addon.py:

# -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param
xbmcplugin xbmcgui тАУ xbmc.python.

get_params() тАУ , , . , , . , . , , .

:

def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True)

addDir(title, url, mode) тАУ . Mode тАУ , ( ).

addLink(title, url) тАУ , url . url // ..

:

params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))
" ". xbmcplugin.endOfDirectory(int(sys.argv[1])) XBMC, "" .

. getHTML(url) isLinkUseful(needle) addon.py :
addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))

? , .

: ; ; . . : Categories() тАУ , Movies() тАУ , Videos() тАУ . :

def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20)

addDir(title, url + link, 20) print title + ' [' + url + ']' . Categories() - url . , тАУ link .

20 тАУ , Movies(url) . , xbmcplugin.endOfDirectory(int(sys.argv[1])) , :

if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title)
? ? , . , , , . .

:

def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30)
. title[:-12] ? [:-12], , " / Magnificent movie (2013) HDRip ". ""? !

. . , ! :

<script language="javascript"> flashvars = { uid: "player_uppod", bufferproc2 :1, bufferproc_reloadsec :10, st: "/templates/linecinema-dle90/swf/video30-365.txt", file: "http://st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv" }; params = {bgcolor:"#ffffff", allowFullScreen:"true", allowScriptAccess:"always",wmode:"opaque"}; attributes = { id: "player_uppod", name: "player_uppod" }; swfobject.embedSWF("/templates/linecinema-dle90/swf/uppod.swf", "player_uppod", "570", "440", "10.0.0",false,flashvars,params,attributes); </script>
: st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv ( ). :

def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link)
. :

addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20) def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30) def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link) def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title) xbmcplugin.endOfDirectory(int(sys.argv[1]))

-, . : ZIP. . ZIP (!) . XBMC, () > > ZIP . , " ", > > LineCinema .







ZIP : HOW-TO:Write plugins for XBMC (wiki) XBMC Addon Developers Guide (pdf) : 3rd party add-on repositories XBMC Russia XBMC Community Forum

. тАж . , , .

PS , .
[.].

( , - ) :

plugin.video.linecinema


. // add-on' ( , -) , :

addon.py
addon.xml
changelog.txt
fanart.jpg
icon.png
LICENSE.txt
/resources
settings.xml
/language/
/lib/
/media/

addon.py тАУ . , ( addon.xml). default.py addon.xml тАУ XBMC: (, , , ); ( *.py); ; , . . changelog.txt , LICENSE.txt тАУ , . fanart.jpg тАУ . . icon.png тАУ "" . . /resources/settings.xml тАУ (, , / ), .. , addon.py. , , . . /resources/language/ - . , , . /resources/lib/ - Python. /resources/media/ - , , . .

: addon.py, addon.xml тАж . , .

addon.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <addon id="plugin.video.linecinema" name="LineCinema" version="0.0.1" provider-name="noname"> <requires> <import addon="xbmc.python" version="1.0"/> </requires> <extension point="xbmc.python.pluginsource" provides="video" library="addon.py"> <provides>video</provides> </extension> <extension point="xbmc.addon.metadata"> <summary>LineCinema.org</summary> <description> , . LineCinema.org </description> <platform>all</platform> </extension> </addon>
. XBMC , "plugin.video.linecinema", "LineCinema", 0.0.1, "noname".

/>
, xbmc.python 1.0.

video тАУ "addon.py". " ".

, addon.xml .

addon.py:

# -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param
xbmcplugin xbmcgui тАУ xbmc.python.

get_params() тАУ , , . , , . , . , , .

:

def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True)

addDir(title, url, mode) тАУ . Mode тАУ , ( ).

addLink(title, url) тАУ , url . url // ..

:

params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))
" ". xbmcplugin.endOfDirectory(int(sys.argv[1])) XBMC, "" .

. getHTML(url) isLinkUseful(needle) addon.py :
addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))

? , .

: ; ; . . : Categories() тАУ , Movies() тАУ , Videos() тАУ . :

def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20)

addDir(title, url + link, 20) print title + ' [' + url + ']' . Categories() - url . , тАУ link .

20 тАУ , Movies(url) . , xbmcplugin.endOfDirectory(int(sys.argv[1])) , :

if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title)
? ? , . , , , . .

:

def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30)
. title[:-12] ? [:-12], , " / Magnificent movie (2013) HDRip ". ""? !

. . , ! :

<script language="javascript"> flashvars = { uid: "player_uppod", bufferproc2 :1, bufferproc_reloadsec :10, st: "/templates/linecinema-dle90/swf/video30-365.txt", file: "http://st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv" }; params = {bgcolor:"#ffffff", allowFullScreen:"true", allowScriptAccess:"always",wmode:"opaque"}; attributes = { id: "player_uppod", name: "player_uppod" }; swfobject.embedSWF("/templates/linecinema-dle90/swf/uppod.swf", "player_uppod", "570", "440", "10.0.0",false,flashvars,params,attributes); </script>
: st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv ( ). :

def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link)
. :

addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20) def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30) def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link) def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title) xbmcplugin.endOfDirectory(int(sys.argv[1]))

-, . : ZIP. . ZIP (!) . XBMC, () > > ZIP . , " ", > > LineCinema .







ZIP : HOW-TO:Write plugins for XBMC (wiki) XBMC Addon Developers Guide (pdf) : 3rd party add-on repositories XBMC Russia XBMC Community Forum

. тАж . , , .

PS , .
  [.]. 

( , - ) :

plugin.video.linecinema


. // add-on' ( , -) , :

addon.py
addon.xml
changelog.txt
fanart.jpg
icon.png
LICENSE.txt
/resources
settings.xml
/language/
/lib/
/media/

addon.py тАУ . , ( addon.xml). default.py addon.xml тАУ XBMC: (, , , ); ( *.py); ; , . . changelog.txt , LICENSE.txt тАУ , . fanart.jpg тАУ . . icon.png тАУ "" . . /resources/settings.xml тАУ (, , / ), .. , addon.py. , , . . /resources/language/ - . , , . /resources/lib/ - Python. /resources/media/ - , , . .

: addon.py, addon.xml тАж . , .

addon.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <addon id="plugin.video.linecinema" name="LineCinema" version="0.0.1" provider-name="noname"> <requires> <import addon="xbmc.python" version="1.0"/> </requires> <extension point="xbmc.python.pluginsource" provides="video" library="addon.py"> <provides>video</provides> </extension> <extension point="xbmc.addon.metadata"> <summary>LineCinema.org</summary> <description> , . LineCinema.org </description> <platform>all</platform> </extension> </addon>
. XBMC , "plugin.video.linecinema", "LineCinema", 0.0.1, "noname".

/>
, xbmc.python 1.0.

video тАУ "addon.py". " ".

, addon.xml .

addon.py:

# -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param
xbmcplugin xbmcgui тАУ xbmc.python.

get_params() тАУ , , . , , . , . , , .

:

def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True)

addDir(title, url, mode) тАУ . Mode тАУ , ( ).

addLink(title, url) тАУ , url . url // ..

:

params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))
" ". xbmcplugin.endOfDirectory(int(sys.argv[1])) XBMC, "" .

. getHTML(url) isLinkUseful(needle) addon.py :
addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))

? , .

: ; ; . . : Categories() тАУ , Movies() тАУ , Videos() тАУ . :

def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20)

addDir(title, url + link, 20) print title + ' [' + url + ']' . Categories() - url . , тАУ link .

20 тАУ , Movies(url) . , xbmcplugin.endOfDirectory(int(sys.argv[1])) , :

if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title)
? ? , . , , , . .

:

def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30)
. title[:-12] ? [:-12], , " / Magnificent movie (2013) HDRip ". ""? !

. . , ! :

<script language="javascript"> flashvars = { uid: "player_uppod", bufferproc2 :1, bufferproc_reloadsec :10, st: "/templates/linecinema-dle90/swf/video30-365.txt", file: "http://st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv" }; params = {bgcolor:"#ffffff", allowFullScreen:"true", allowScriptAccess:"always",wmode:"opaque"}; attributes = { id: "player_uppod", name: "player_uppod" }; swfobject.embedSWF("/templates/linecinema-dle90/swf/uppod.swf", "player_uppod", "570", "440", "10.0.0",false,flashvars,params,attributes); </script>
: st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv ( ). :

def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link)
. :

addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20) def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30) def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link) def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title) xbmcplugin.endOfDirectory(int(sys.argv[1]))

-, . : ZIP. . ZIP (!) . XBMC, () > > ZIP . , " ", > > LineCinema .







ZIP : HOW-TO:Write plugins for XBMC (wiki) XBMC Addon Developers Guide (pdf) : 3rd party add-on repositories XBMC Russia XBMC Community Forum

. тАж . , , .

PS , .
[.].

( , - ) :

plugin.video.linecinema


. // add-on' ( , -) , :

addon.py
addon.xml
changelog.txt
fanart.jpg
icon.png
LICENSE.txt
/resources
settings.xml
/language/
/lib/
/media/

addon.py тАУ . , ( addon.xml). default.py addon.xml тАУ XBMC: (, , , ); ( *.py); ; , . . changelog.txt , LICENSE.txt тАУ , . fanart.jpg тАУ . . icon.png тАУ "" . . /resources/settings.xml тАУ (, , / ), .. , addon.py. , , . . /resources/language/ - . , , . /resources/lib/ - Python. /resources/media/ - , , . .

: addon.py, addon.xml тАж . , .

addon.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <addon id="plugin.video.linecinema" name="LineCinema" version="0.0.1" provider-name="noname"> <requires> <import addon="xbmc.python" version="1.0"/> </requires> <extension point="xbmc.python.pluginsource" provides="video" library="addon.py"> <provides>video</provides> </extension> <extension point="xbmc.addon.metadata"> <summary>LineCinema.org</summary> <description> , . LineCinema.org </description> <platform>all</platform> </extension> </addon>
. XBMC , "plugin.video.linecinema", "LineCinema", 0.0.1, "noname".

/>
, xbmc.python 1.0.

video тАУ "addon.py". " ".

, addon.xml .

addon.py:

# -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param
xbmcplugin xbmcgui тАУ xbmc.python.

get_params() тАУ , , . , , . , . , , .

:

def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True)

addDir(title, url, mode) тАУ . Mode тАУ , ( ).

addLink(title, url) тАУ , url . url // ..

:

params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))
" ". xbmcplugin.endOfDirectory(int(sys.argv[1])) XBMC, "" .

. getHTML(url) isLinkUseful(needle) addon.py :
addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))

? , .

: ; ; . . : Categories() тАУ , Movies() тАУ , Videos() тАУ . :

def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20)

addDir(title, url + link, 20) print title + ' [' + url + ']' . Categories() - url . , тАУ link .

20 тАУ , Movies(url) . , xbmcplugin.endOfDirectory(int(sys.argv[1])) , :

if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title)
? ? , . , , , . .

:

def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30)
. title[:-12] ? [:-12], , " / Magnificent movie (2013) HDRip ". ""? !

. . , ! :

<script language="javascript"> flashvars = { uid: "player_uppod", bufferproc2 :1, bufferproc_reloadsec :10, st: "/templates/linecinema-dle90/swf/video30-365.txt", file: "http://st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv" }; params = {bgcolor:"#ffffff", allowFullScreen:"true", allowScriptAccess:"always",wmode:"opaque"}; attributes = { id: "player_uppod", name: "player_uppod" }; swfobject.embedSWF("/templates/linecinema-dle90/swf/uppod.swf", "player_uppod", "570", "440", "10.0.0",false,flashvars,params,attributes); </script>
: st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv ( ). :

def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link)
. :

addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20) def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30) def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link) def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title) xbmcplugin.endOfDirectory(int(sys.argv[1]))

-, . : ZIP. . ZIP (!) . XBMC, () > > ZIP . , " ", > > LineCinema .







ZIP : HOW-TO:Write plugins for XBMC (wiki) XBMC Addon Developers Guide (pdf) : 3rd party add-on repositories XBMC Russia XBMC Community Forum

. тАж . , , .

PS , .
  [.]. 

( , - ) :

plugin.video.linecinema


. // add-on' ( , -) , :

addon.py
addon.xml
changelog.txt
fanart.jpg
icon.png
LICENSE.txt
/resources
settings.xml
/language/
/lib/
/media/

addon.py тАУ . , ( addon.xml). default.py addon.xml тАУ XBMC: (, , , ); ( *.py); ; , . . changelog.txt , LICENSE.txt тАУ , . fanart.jpg тАУ . . icon.png тАУ "" . . /resources/settings.xml тАУ (, , / ), .. , addon.py. , , . . /resources/language/ - . , , . /resources/lib/ - Python. /resources/media/ - , , . .

: addon.py, addon.xml тАж . , .

addon.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <addon id="plugin.video.linecinema" name="LineCinema" version="0.0.1" provider-name="noname"> <requires> <import addon="xbmc.python" version="1.0"/> </requires> <extension point="xbmc.python.pluginsource" provides="video" library="addon.py"> <provides>video</provides> </extension> <extension point="xbmc.addon.metadata"> <summary>LineCinema.org</summary> <description> , . LineCinema.org </description> <platform>all</platform> </extension> </addon>
. XBMC , "plugin.video.linecinema", "LineCinema", 0.0.1, "noname".

/>
, xbmc.python 1.0.

video тАУ "addon.py". " ".

, addon.xml .

addon.py:

# -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param
xbmcplugin xbmcgui тАУ xbmc.python.

get_params() тАУ , , . , , . , . , , .

:

def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True)

addDir(title, url, mode) тАУ . Mode тАУ , ( ).

addLink(title, url) тАУ , url . url // ..

:

params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))
" ". xbmcplugin.endOfDirectory(int(sys.argv[1])) XBMC, "" .

. getHTML(url) isLinkUseful(needle) addon.py :
addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))

? , .

: ; ; . . : Categories() тАУ , Movies() тАУ , Videos() тАУ . :

def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20)

addDir(title, url + link, 20) print title + ' [' + url + ']' . Categories() - url . , тАУ link .

20 тАУ , Movies(url) . , xbmcplugin.endOfDirectory(int(sys.argv[1])) , :

if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title)
? ? , . , , , . .

:

def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30)
. title[:-12] ? [:-12], , " / Magnificent movie (2013) HDRip ". ""? !

. . , ! :

<script language="javascript"> flashvars = { uid: "player_uppod", bufferproc2 :1, bufferproc_reloadsec :10, st: "/templates/linecinema-dle90/swf/video30-365.txt", file: "http://st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv" }; params = {bgcolor:"#ffffff", allowFullScreen:"true", allowScriptAccess:"always",wmode:"opaque"}; attributes = { id: "player_uppod", name: "player_uppod" }; swfobject.embedSWF("/templates/linecinema-dle90/swf/uppod.swf", "player_uppod", "570", "440", "10.0.0",false,flashvars,params,attributes); </script>
: st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv ( ). :

def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link)
. :

addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20) def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30) def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link) def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title) xbmcplugin.endOfDirectory(int(sys.argv[1]))

-, . : ZIP. . ZIP (!) . XBMC, () > > ZIP . , " ", > > LineCinema .







ZIP : HOW-TO:Write plugins for XBMC (wiki) XBMC Addon Developers Guide (pdf) : 3rd party add-on repositories XBMC Russia XBMC Community Forum

. тАж . , , .

PS , .
[.].

( , - ) :

plugin.video.linecinema


. // add-on' ( , -) , :

addon.py
addon.xml
changelog.txt
fanart.jpg
icon.png
LICENSE.txt
/resources
settings.xml
/language/
/lib/
/media/

addon.py тАУ . , ( addon.xml). default.py addon.xml тАУ XBMC: (, , , ); ( *.py); ; , . . changelog.txt , LICENSE.txt тАУ , . fanart.jpg тАУ . . icon.png тАУ "" . . /resources/settings.xml тАУ (, , / ), .. , addon.py. , , . . /resources/language/ - . , , . /resources/lib/ - Python. /resources/media/ - , , . .

: addon.py, addon.xml тАж . , .

addon.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <addon id="plugin.video.linecinema" name="LineCinema" version="0.0.1" provider-name="noname"> <requires> <import addon="xbmc.python" version="1.0"/> </requires> <extension point="xbmc.python.pluginsource" provides="video" library="addon.py"> <provides>video</provides> </extension> <extension point="xbmc.addon.metadata"> <summary>LineCinema.org</summary> <description> , . LineCinema.org </description> <platform>all</platform> </extension> </addon>
. XBMC , "plugin.video.linecinema", "LineCinema", 0.0.1, "noname".

/>
, xbmc.python 1.0.

video тАУ "addon.py". " ".

, addon.xml .

addon.py:

# -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param
xbmcplugin xbmcgui тАУ xbmc.python.

get_params() тАУ , , . , , . , . , , .

:

def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True)

addDir(title, url, mode) тАУ . Mode тАУ , ( ).

addLink(title, url) тАУ , url . url // ..

:

params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))
" ". xbmcplugin.endOfDirectory(int(sys.argv[1])) XBMC, "" .

. getHTML(url) isLinkUseful(needle) addon.py :
addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))

? , .

: ; ; . . : Categories() тАУ , Movies() тАУ , Videos() тАУ . :

def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20)

addDir(title, url + link, 20) print title + ' [' + url + ']' . Categories() - url . , тАУ link .

20 тАУ , Movies(url) . , xbmcplugin.endOfDirectory(int(sys.argv[1])) , :

if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title)
? ? , . , , , . .

:

def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30)
. title[:-12] ? [:-12], , " / Magnificent movie (2013) HDRip ". ""? !

. . , ! :

<script language="javascript"> flashvars = { uid: "player_uppod", bufferproc2 :1, bufferproc_reloadsec :10, st: "/templates/linecinema-dle90/swf/video30-365.txt", file: "http://st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv" }; params = {bgcolor:"#ffffff", allowFullScreen:"true", allowScriptAccess:"always",wmode:"opaque"}; attributes = { id: "player_uppod", name: "player_uppod" }; swfobject.embedSWF("/templates/linecinema-dle90/swf/uppod.swf", "player_uppod", "570", "440", "10.0.0",false,flashvars,params,attributes); </script>
: st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv ( ). :

def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link)
. :

addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20) def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30) def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link) def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title) xbmcplugin.endOfDirectory(int(sys.argv[1]))

-, . : ZIP. . ZIP (!) . XBMC, () > > ZIP . , " ", > > LineCinema .







ZIP : HOW-TO:Write plugins for XBMC (wiki) XBMC Addon Developers Guide (pdf) : 3rd party add-on repositories XBMC Russia XBMC Community Forum

. тАж . , , .

PS , .
[.].

( , - ) :

plugin.video.linecinema


. // add-on' ( , -) , :

addon.py
addon.xml
changelog.txt
fanart.jpg
icon.png
LICENSE.txt
/resources
settings.xml
/language/
/lib/
/media/

addon.py тАУ . , ( addon.xml). default.py addon.xml тАУ XBMC: (, , , ); ( *.py); ; , . . changelog.txt , LICENSE.txt тАУ , . fanart.jpg тАУ . . icon.png тАУ "" . . /resources/settings.xml тАУ (, , / ), .. , addon.py. , , . . /resources/language/ - . , , . /resources/lib/ - Python. /resources/media/ - , , . .

: addon.py, addon.xml тАж . , .

addon.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <addon id="plugin.video.linecinema" name="LineCinema" version="0.0.1" provider-name="noname"> <requires> <import addon="xbmc.python" version="1.0"/> </requires> <extension point="xbmc.python.pluginsource" provides="video" library="addon.py"> <provides>video</provides> </extension> <extension point="xbmc.addon.metadata"> <summary>LineCinema.org</summary> <description> , . LineCinema.org </description> <platform>all</platform> </extension> </addon>
. XBMC , "plugin.video.linecinema", "LineCinema", 0.0.1, "noname".

/>
, xbmc.python 1.0.

video тАУ "addon.py". " ".

, addon.xml .

addon.py:

# -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param
xbmcplugin xbmcgui тАУ xbmc.python.

get_params() тАУ , , . , , . , . , , .

:

def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True)

addDir(title, url, mode) тАУ . Mode тАУ , ( ).

addLink(title, url) тАУ , url . url // ..

:

params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))
" ". xbmcplugin.endOfDirectory(int(sys.argv[1])) XBMC, "" .

. getHTML(url) isLinkUseful(needle) addon.py :
addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))

? , .

: ; ; . . : Categories() тАУ , Movies() тАУ , Videos() тАУ . :

def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20)

addDir(title, url + link, 20) print title + ' [' + url + ']' . Categories() - url . , тАУ link .

20 тАУ , Movies(url) . , xbmcplugin.endOfDirectory(int(sys.argv[1])) , :

if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title)
? ? , . , , , . .

:

def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30)
. title[:-12] ? [:-12], , " / Magnificent movie (2013) HDRip ". ""? !

. . , ! :

<script language="javascript"> flashvars = { uid: "player_uppod", bufferproc2 :1, bufferproc_reloadsec :10, st: "/templates/linecinema-dle90/swf/video30-365.txt", file: "http://st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv" }; params = {bgcolor:"#ffffff", allowFullScreen:"true", allowScriptAccess:"always",wmode:"opaque"}; attributes = { id: "player_uppod", name: "player_uppod" }; swfobject.embedSWF("/templates/linecinema-dle90/swf/uppod.swf", "player_uppod", "570", "440", "10.0.0",false,flashvars,params,attributes); </script>
: st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv ( ). :

def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link)
. :

addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20) def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30) def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link) def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title) xbmcplugin.endOfDirectory(int(sys.argv[1]))

-, . : ZIP. . ZIP (!) . XBMC, () > > ZIP . , " ", > > LineCinema .







ZIP : HOW-TO:Write plugins for XBMC (wiki) XBMC Addon Developers Guide (pdf) : 3rd party add-on repositories XBMC Russia XBMC Community Forum

. тАж . , , .

PS , .
  [.]. 

( , - ) :

plugin.video.linecinema


. // add-on' ( , -) , :

addon.py
addon.xml
changelog.txt
fanart.jpg
icon.png
LICENSE.txt
/resources
settings.xml
/language/
/lib/
/media/

addon.py тАУ . , ( addon.xml). default.py addon.xml тАУ XBMC: (, , , ); ( *.py); ; , . . changelog.txt , LICENSE.txt тАУ , . fanart.jpg тАУ . . icon.png тАУ "" . . /resources/settings.xml тАУ (, , / ), .. , addon.py. , , . . /resources/language/ - . , , . /resources/lib/ - Python. /resources/media/ - , , . .

: addon.py, addon.xml тАж . , .

addon.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <addon id="plugin.video.linecinema" name="LineCinema" version="0.0.1" provider-name="noname"> <requires> <import addon="xbmc.python" version="1.0"/> </requires> <extension point="xbmc.python.pluginsource" provides="video" library="addon.py"> <provides>video</provides> </extension> <extension point="xbmc.addon.metadata"> <summary>LineCinema.org</summary> <description> , . LineCinema.org </description> <platform>all</platform> </extension> </addon>
. XBMC , "plugin.video.linecinema", "LineCinema", 0.0.1, "noname".

/>
, xbmc.python 1.0.

video тАУ "addon.py". " ".

, addon.xml .

addon.py:

# -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param
xbmcplugin xbmcgui тАУ xbmc.python.

get_params() тАУ , , . , , . , . , , .

:

def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True)

addDir(title, url, mode) тАУ . Mode тАУ , ( ).

addLink(title, url) тАУ , url . url // ..

:

params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))
" ". xbmcplugin.endOfDirectory(int(sys.argv[1])) XBMC, "" .

. getHTML(url) isLinkUseful(needle) addon.py :
addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))

? , .

: ; ; . . : Categories() тАУ , Movies() тАУ , Videos() тАУ . :

def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20)

addDir(title, url + link, 20) print title + ' [' + url + ']' . Categories() - url . , тАУ link .

20 тАУ , Movies(url) . , xbmcplugin.endOfDirectory(int(sys.argv[1])) , :

if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title)
? ? , . , , , . .

:

def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30)
. title[:-12] ? [:-12], , " / Magnificent movie (2013) HDRip ". ""? !

. . , ! :

<script language="javascript"> flashvars = { uid: "player_uppod", bufferproc2 :1, bufferproc_reloadsec :10, st: "/templates/linecinema-dle90/swf/video30-365.txt", file: "http://st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv" }; params = {bgcolor:"#ffffff", allowFullScreen:"true", allowScriptAccess:"always",wmode:"opaque"}; attributes = { id: "player_uppod", name: "player_uppod" }; swfobject.embedSWF("/templates/linecinema-dle90/swf/uppod.swf", "player_uppod", "570", "440", "10.0.0",false,flashvars,params,attributes); </script>
: st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv ( ). :

def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link)
. :

addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20) def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30) def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link) def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title) xbmcplugin.endOfDirectory(int(sys.argv[1]))

-, . : ZIP. . ZIP (!) . XBMC, () > > ZIP . , " ", > > LineCinema .







ZIP : HOW-TO:Write plugins for XBMC (wiki) XBMC Addon Developers Guide (pdf) : 3rd party add-on repositories XBMC Russia XBMC Community Forum

. тАж . , , .

PS , .
[.].

( , - ) :

plugin.video.linecinema


. // add-on' ( , -) , :

addon.py
addon.xml
changelog.txt
fanart.jpg
icon.png
LICENSE.txt
/resources
settings.xml
/language/
/lib/
/media/

addon.py тАУ . , ( addon.xml). default.py addon.xml тАУ XBMC: (, , , ); ( *.py); ; , . . changelog.txt , LICENSE.txt тАУ , . fanart.jpg тАУ . . icon.png тАУ "" . . /resources/settings.xml тАУ (, , / ), .. , addon.py. , , . . /resources/language/ - . , , . /resources/lib/ - Python. /resources/media/ - , , . .

: addon.py, addon.xml тАж . , .

addon.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <addon id="plugin.video.linecinema" name="LineCinema" version="0.0.1" provider-name="noname"> <requires> <import addon="xbmc.python" version="1.0"/> </requires> <extension point="xbmc.python.pluginsource" provides="video" library="addon.py"> <provides>video</provides> </extension> <extension point="xbmc.addon.metadata"> <summary>LineCinema.org</summary> <description> , . LineCinema.org </description> <platform>all</platform> </extension> </addon>
. XBMC , "plugin.video.linecinema", "LineCinema", 0.0.1, "noname".

/>
, xbmc.python 1.0.

video тАУ "addon.py". " ".

, addon.xml .

addon.py:

# -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param
xbmcplugin xbmcgui тАУ xbmc.python.

get_params() тАУ , , . , , . , . , , .

:

def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True)

addDir(title, url, mode) тАУ . Mode тАУ , ( ).

addLink(title, url) тАУ , url . url // ..

:

params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))
" ". xbmcplugin.endOfDirectory(int(sys.argv[1])) XBMC, "" .

. getHTML(url) isLinkUseful(needle) addon.py :
addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))

? , .

: ; ; . . : Categories() тАУ , Movies() тАУ , Videos() тАУ . :

def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20)

addDir(title, url + link, 20) print title + ' [' + url + ']' . Categories() - url . , тАУ link .

20 тАУ , Movies(url) . , xbmcplugin.endOfDirectory(int(sys.argv[1])) , :

if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title)
? ? , . , , , . .

:

def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30)
. title[:-12] ? [:-12], , " / Magnificent movie (2013) HDRip ". ""? !

. . , ! :

<script language="javascript"> flashvars = { uid: "player_uppod", bufferproc2 :1, bufferproc_reloadsec :10, st: "/templates/linecinema-dle90/swf/video30-365.txt", file: "http://st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv" }; params = {bgcolor:"#ffffff", allowFullScreen:"true", allowScriptAccess:"always",wmode:"opaque"}; attributes = { id: "player_uppod", name: "player_uppod" }; swfobject.embedSWF("/templates/linecinema-dle90/swf/uppod.swf", "player_uppod", "570", "440", "10.0.0",false,flashvars,params,attributes); </script>
: st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv ( ). :

def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link)
. :

addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20) def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30) def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link) def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title) xbmcplugin.endOfDirectory(int(sys.argv[1]))

-, . : ZIP. . ZIP (!) . XBMC, () > > ZIP . , " ", > > LineCinema .







ZIP : HOW-TO:Write plugins for XBMC (wiki) XBMC Addon Developers Guide (pdf) : 3rd party add-on repositories XBMC Russia XBMC Community Forum

. тАж . , , .

PS , .
[.].

( , - ) :

plugin.video.linecinema


. // add-on' ( , -) , :

addon.py
addon.xml
changelog.txt
fanart.jpg
icon.png
LICENSE.txt
/resources
settings.xml
/language/
/lib/
/media/

addon.py тАУ . , ( addon.xml). default.py addon.xml тАУ XBMC: (, , , ); ( *.py); ; , . . changelog.txt , LICENSE.txt тАУ , . fanart.jpg тАУ . . icon.png тАУ "" . . /resources/settings.xml тАУ (, , / ), .. , addon.py. , , . . /resources/language/ - . , , . /resources/lib/ - Python. /resources/media/ - , , . .

: addon.py, addon.xml тАж . , .

addon.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <addon id="plugin.video.linecinema" name="LineCinema" version="0.0.1" provider-name="noname"> <requires> <import addon="xbmc.python" version="1.0"/> </requires> <extension point="xbmc.python.pluginsource" provides="video" library="addon.py"> <provides>video</provides> </extension> <extension point="xbmc.addon.metadata"> <summary>LineCinema.org</summary> <description> , . LineCinema.org </description> <platform>all</platform> </extension> </addon>
. XBMC , "plugin.video.linecinema", "LineCinema", 0.0.1, "noname".

/>
, xbmc.python 1.0.

video тАУ "addon.py". " ".

, addon.xml .

addon.py:

# -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param
xbmcplugin xbmcgui тАУ xbmc.python.

get_params() тАУ , , . , , . , . , , .

:

def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True)

addDir(title, url, mode) тАУ . Mode тАУ , ( ).

addLink(title, url) тАУ , url . url // ..

:

params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))
" ". xbmcplugin.endOfDirectory(int(sys.argv[1])) XBMC, "" .

. getHTML(url) isLinkUseful(needle) addon.py :
addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))

? , .

: ; ; . . : Categories() тАУ , Movies() тАУ , Videos() тАУ . :

def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20)

addDir(title, url + link, 20) print title + ' [' + url + ']' . Categories() - url . , тАУ link .

20 тАУ , Movies(url) . , xbmcplugin.endOfDirectory(int(sys.argv[1])) , :

if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title)
? ? , . , , , . .

:

def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30)
. title[:-12] ? [:-12], , " / Magnificent movie (2013) HDRip ". ""? !

. . , ! :

<script language="javascript"> flashvars = { uid: "player_uppod", bufferproc2 :1, bufferproc_reloadsec :10, st: "/templates/linecinema-dle90/swf/video30-365.txt", file: "http://st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv" }; params = {bgcolor:"#ffffff", allowFullScreen:"true", allowScriptAccess:"always",wmode:"opaque"}; attributes = { id: "player_uppod", name: "player_uppod" }; swfobject.embedSWF("/templates/linecinema-dle90/swf/uppod.swf", "player_uppod", "570", "440", "10.0.0",false,flashvars,params,attributes); </script>
: st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv ( ). :

def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link)
. :

addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20) def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30) def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link) def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title) xbmcplugin.endOfDirectory(int(sys.argv[1]))

-, . : ZIP. . ZIP (!) . XBMC, () > > ZIP . , " ", > > LineCinema .







ZIP : HOW-TO:Write plugins for XBMC (wiki) XBMC Addon Developers Guide (pdf) : 3rd party add-on repositories XBMC Russia XBMC Community Forum

. тАж . , , .

PS , .
  [.]. 

( , - ) :

plugin.video.linecinema


. // add-on' ( , -) , :

addon.py
addon.xml
changelog.txt
fanart.jpg
icon.png
LICENSE.txt
/resources
settings.xml
/language/
/lib/
/media/

addon.py тАУ . , ( addon.xml). default.py addon.xml тАУ XBMC: (, , , ); ( *.py); ; , . . changelog.txt , LICENSE.txt тАУ , . fanart.jpg тАУ . . icon.png тАУ "" . . /resources/settings.xml тАУ (, , / ), .. , addon.py. , , . . /resources/language/ - . , , . /resources/lib/ - Python. /resources/media/ - , , . .

: addon.py, addon.xml тАж . , .

addon.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <addon id="plugin.video.linecinema" name="LineCinema" version="0.0.1" provider-name="noname"> <requires> <import addon="xbmc.python" version="1.0"/> </requires> <extension point="xbmc.python.pluginsource" provides="video" library="addon.py"> <provides>video</provides> </extension> <extension point="xbmc.addon.metadata"> <summary>LineCinema.org</summary> <description> , . LineCinema.org </description> <platform>all</platform> </extension> </addon>
. XBMC , "plugin.video.linecinema", "LineCinema", 0.0.1, "noname".

/>
, xbmc.python 1.0.

video тАУ "addon.py". " ".

, addon.xml .

addon.py:

# -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param
xbmcplugin xbmcgui тАУ xbmc.python.

get_params() тАУ , , . , , . , . , , .

:

def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True)

addDir(title, url, mode) тАУ . Mode тАУ , ( ).

addLink(title, url) тАУ , url . url // ..

:

params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))
" ". xbmcplugin.endOfDirectory(int(sys.argv[1])) XBMC, "" .

. getHTML(url) isLinkUseful(needle) addon.py :
addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))

? , .

: ; ; . . : Categories() тАУ , Movies() тАУ , Videos() тАУ . :

def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20)

addDir(title, url + link, 20) print title + ' [' + url + ']' . Categories() - url . , тАУ link .

20 тАУ , Movies(url) . , xbmcplugin.endOfDirectory(int(sys.argv[1])) , :

if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title)
? ? , . , , , . .

:

def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30)
. title[:-12] ? [:-12], , " / Magnificent movie (2013) HDRip ". ""? !

. . , ! :

<script language="javascript"> flashvars = { uid: "player_uppod", bufferproc2 :1, bufferproc_reloadsec :10, st: "/templates/linecinema-dle90/swf/video30-365.txt", file: "http://st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv" }; params = {bgcolor:"#ffffff", allowFullScreen:"true", allowScriptAccess:"always",wmode:"opaque"}; attributes = { id: "player_uppod", name: "player_uppod" }; swfobject.embedSWF("/templates/linecinema-dle90/swf/uppod.swf", "player_uppod", "570", "440", "10.0.0",false,flashvars,params,attributes); </script>
: st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv ( ). :

def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link)
. :

addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20) def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30) def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link) def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title) xbmcplugin.endOfDirectory(int(sys.argv[1]))

-, . : ZIP. . ZIP (!) . XBMC, () > > ZIP . , " ", > > LineCinema .







ZIP : HOW-TO:Write plugins for XBMC (wiki) XBMC Addon Developers Guide (pdf) : 3rd party add-on repositories XBMC Russia XBMC Community Forum

. тАж . , , .

PS , .
[.].

( , - ) :

plugin.video.linecinema


. // add-on' ( , -) , :

addon.py
addon.xml
changelog.txt
fanart.jpg
icon.png
LICENSE.txt
/resources
settings.xml
/language/
/lib/
/media/

addon.py тАУ . , ( addon.xml). default.py addon.xml тАУ XBMC: (, , , ); ( *.py); ; , . . changelog.txt , LICENSE.txt тАУ , . fanart.jpg тАУ . . icon.png тАУ "" . . /resources/settings.xml тАУ (, , / ), .. , addon.py. , , . . /resources/language/ - . , , . /resources/lib/ - Python. /resources/media/ - , , . .

: addon.py, addon.xml тАж . , .

addon.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <addon id="plugin.video.linecinema" name="LineCinema" version="0.0.1" provider-name="noname"> <requires> <import addon="xbmc.python" version="1.0"/> </requires> <extension point="xbmc.python.pluginsource" provides="video" library="addon.py"> <provides>video</provides> </extension> <extension point="xbmc.addon.metadata"> <summary>LineCinema.org</summary> <description> , . LineCinema.org </description> <platform>all</platform> </extension> </addon>
. XBMC , "plugin.video.linecinema", "LineCinema", 0.0.1, "noname".

/>
, xbmc.python 1.0.

video тАУ "addon.py". " ".

, addon.xml .

addon.py:

# -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param
xbmcplugin xbmcgui тАУ xbmc.python.

get_params() тАУ , , . , , . , . , , .

:

def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True)

addDir(title, url, mode) тАУ . Mode тАУ , ( ).

addLink(title, url) тАУ , url . url // ..

:

params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))
" ". xbmcplugin.endOfDirectory(int(sys.argv[1])) XBMC, "" .

. getHTML(url) isLinkUseful(needle) addon.py :
addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))

? , .

: ; ; . . : Categories() тАУ , Movies() тАУ , Videos() тАУ . :

def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20)

addDir(title, url + link, 20) print title + ' [' + url + ']' . Categories() - url . , тАУ link .

20 тАУ , Movies(url) . , xbmcplugin.endOfDirectory(int(sys.argv[1])) , :

if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title)
? ? , . , , , . .

:

def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30)
. title[:-12] ? [:-12], , " / Magnificent movie (2013) HDRip ". ""? !

. . , ! :

<script language="javascript"> flashvars = { uid: "player_uppod", bufferproc2 :1, bufferproc_reloadsec :10, st: "/templates/linecinema-dle90/swf/video30-365.txt", file: "http://st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv" }; params = {bgcolor:"#ffffff", allowFullScreen:"true", allowScriptAccess:"always",wmode:"opaque"}; attributes = { id: "player_uppod", name: "player_uppod" }; swfobject.embedSWF("/templates/linecinema-dle90/swf/uppod.swf", "player_uppod", "570", "440", "10.0.0",false,flashvars,params,attributes); </script>
: st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv ( ). :

def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link)
. :

addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20) def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30) def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link) def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title) xbmcplugin.endOfDirectory(int(sys.argv[1]))

-, . : ZIP. . ZIP (!) . XBMC, () > > ZIP . , " ", > > LineCinema .







ZIP : HOW-TO:Write plugins for XBMC (wiki) XBMC Addon Developers Guide (pdf) : 3rd party add-on repositories XBMC Russia XBMC Community Forum

. тАж . , , .

PS , .
  [.]. 

( , - ) :

plugin.video.linecinema


. // add-on' ( , -) , :

addon.py
addon.xml
changelog.txt
fanart.jpg
icon.png
LICENSE.txt
/resources
settings.xml
/language/
/lib/
/media/

addon.py тАУ . , ( addon.xml). default.py addon.xml тАУ XBMC: (, , , ); ( *.py); ; , . . changelog.txt , LICENSE.txt тАУ , . fanart.jpg тАУ . . icon.png тАУ "" . . /resources/settings.xml тАУ (, , / ), .. , addon.py. , , . . /resources/language/ - . , , . /resources/lib/ - Python. /resources/media/ - , , . .

: addon.py, addon.xml тАж . , .

addon.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <addon id="plugin.video.linecinema" name="LineCinema" version="0.0.1" provider-name="noname"> <requires> <import addon="xbmc.python" version="1.0"/> </requires> <extension point="xbmc.python.pluginsource" provides="video" library="addon.py"> <provides>video</provides> </extension> <extension point="xbmc.addon.metadata"> <summary>LineCinema.org</summary> <description> , . LineCinema.org </description> <platform>all</platform> </extension> </addon>
. XBMC , "plugin.video.linecinema", "LineCinema", 0.0.1, "noname".

/>
, xbmc.python 1.0.

video тАУ "addon.py". " ".

, addon.xml .

addon.py:

# -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param
xbmcplugin xbmcgui тАУ xbmc.python.

get_params() тАУ , , . , , . , . , , .

:

def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True)

addDir(title, url, mode) тАУ . Mode тАУ , ( ).

addLink(title, url) тАУ , url . url // ..

:

params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))
" ". xbmcplugin.endOfDirectory(int(sys.argv[1])) XBMC, "" .

. getHTML(url) isLinkUseful(needle) addon.py :
addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))

? , .

: ; ; . . : Categories() тАУ , Movies() тАУ , Videos() тАУ . :

def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20)

addDir(title, url + link, 20) print title + ' [' + url + ']' . Categories() - url . , тАУ link .

20 тАУ , Movies(url) . , xbmcplugin.endOfDirectory(int(sys.argv[1])) , :

if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title)
? ? , . , , , . .

:

def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30)
. title[:-12] ? [:-12], , " / Magnificent movie (2013) HDRip ". ""? !

. . , ! :

<script language="javascript"> flashvars = { uid: "player_uppod", bufferproc2 :1, bufferproc_reloadsec :10, st: "/templates/linecinema-dle90/swf/video30-365.txt", file: "http://st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv" }; params = {bgcolor:"#ffffff", allowFullScreen:"true", allowScriptAccess:"always",wmode:"opaque"}; attributes = { id: "player_uppod", name: "player_uppod" }; swfobject.embedSWF("/templates/linecinema-dle90/swf/uppod.swf", "player_uppod", "570", "440", "10.0.0",false,flashvars,params,attributes); </script>
: st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv ( ). :

def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link)
. :

addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20) def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30) def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link) def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title) xbmcplugin.endOfDirectory(int(sys.argv[1]))

-, . : ZIP. . ZIP (!) . XBMC, () > > ZIP . , " ", > > LineCinema .







ZIP : HOW-TO:Write plugins for XBMC (wiki) XBMC Addon Developers Guide (pdf) : 3rd party add-on repositories XBMC Russia XBMC Community Forum

. тАж . , , .

PS , .
[.].

( , - ) :

plugin.video.linecinema


. // add-on' ( , -) , :

addon.py
addon.xml
changelog.txt
fanart.jpg
icon.png
LICENSE.txt
/resources
settings.xml
/language/
/lib/
/media/

addon.py тАУ . , ( addon.xml). default.py addon.xml тАУ XBMC: (, , , ); ( *.py); ; , . . changelog.txt , LICENSE.txt тАУ , . fanart.jpg тАУ . . icon.png тАУ "" . . /resources/settings.xml тАУ (, , / ), .. , addon.py. , , . . /resources/language/ - . , , . /resources/lib/ - Python. /resources/media/ - , , . .

: addon.py, addon.xml тАж . , .

addon.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <addon id="plugin.video.linecinema" name="LineCinema" version="0.0.1" provider-name="noname"> <requires> <import addon="xbmc.python" version="1.0"/> </requires> <extension point="xbmc.python.pluginsource" provides="video" library="addon.py"> <provides>video</provides> </extension> <extension point="xbmc.addon.metadata"> <summary>LineCinema.org</summary> <description> , . LineCinema.org </description> <platform>all</platform> </extension> </addon>
. XBMC , "plugin.video.linecinema", "LineCinema", 0.0.1, "noname".

/>
, xbmc.python 1.0.

video тАУ "addon.py". " ".

, addon.xml .

addon.py:

# -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param
xbmcplugin xbmcgui тАУ xbmc.python.

get_params() тАУ , , . , , . , . , , .

:

def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True)

addDir(title, url, mode) тАУ . Mode тАУ , ( ).

addLink(title, url) тАУ , url . url // ..

:

params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))
" ". xbmcplugin.endOfDirectory(int(sys.argv[1])) XBMC, "" .

. getHTML(url) isLinkUseful(needle) addon.py :
addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))

? , .

: ; ; . . : Categories() тАУ , Movies() тАУ , Videos() тАУ . :

def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20)

addDir(title, url + link, 20) print title + ' [' + url + ']' . Categories() - url . , тАУ link .

20 тАУ , Movies(url) . , xbmcplugin.endOfDirectory(int(sys.argv[1])) , :

if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title)
? ? , . , , , . .

:

def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30)
. title[:-12] ? [:-12], , " / Magnificent movie (2013) HDRip ". ""? !

. . , ! :

<script language="javascript"> flashvars = { uid: "player_uppod", bufferproc2 :1, bufferproc_reloadsec :10, st: "/templates/linecinema-dle90/swf/video30-365.txt", file: "http://st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv" }; params = {bgcolor:"#ffffff", allowFullScreen:"true", allowScriptAccess:"always",wmode:"opaque"}; attributes = { id: "player_uppod", name: "player_uppod" }; swfobject.embedSWF("/templates/linecinema-dle90/swf/uppod.swf", "player_uppod", "570", "440", "10.0.0",false,flashvars,params,attributes); </script>
: st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv ( ). :

def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link)
. :

addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20) def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30) def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link) def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title) xbmcplugin.endOfDirectory(int(sys.argv[1]))

-, . : ZIP. . ZIP (!) . XBMC, () > > ZIP . , " ", > > LineCinema .







ZIP : HOW-TO:Write plugins for XBMC (wiki) XBMC Addon Developers Guide (pdf) : 3rd party add-on repositories XBMC Russia XBMC Community Forum

. тАж . , , .

PS , .
  [.]. 

( , - ) :

plugin.video.linecinema


. // add-on' ( , -) , :

addon.py
addon.xml
changelog.txt
fanart.jpg
icon.png
LICENSE.txt
/resources
settings.xml
/language/
/lib/
/media/

addon.py тАУ . , ( addon.xml). default.py addon.xml тАУ XBMC: (, , , ); ( *.py); ; , . . changelog.txt , LICENSE.txt тАУ , . fanart.jpg тАУ . . icon.png тАУ "" . . /resources/settings.xml тАУ (, , / ), .. , addon.py. , , . . /resources/language/ - . , , . /resources/lib/ - Python. /resources/media/ - , , . .

: addon.py, addon.xml тАж . , .

addon.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <addon id="plugin.video.linecinema" name="LineCinema" version="0.0.1" provider-name="noname"> <requires> <import addon="xbmc.python" version="1.0"/> </requires> <extension point="xbmc.python.pluginsource" provides="video" library="addon.py"> <provides>video</provides> </extension> <extension point="xbmc.addon.metadata"> <summary>LineCinema.org</summary> <description> , . LineCinema.org </description> <platform>all</platform> </extension> </addon>
. XBMC , "plugin.video.linecinema", "LineCinema", 0.0.1, "noname".

/>
, xbmc.python 1.0.

video тАУ "addon.py". " ".

, addon.xml .

addon.py:

# -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param
xbmcplugin xbmcgui тАУ xbmc.python.

get_params() тАУ , , . , , . , . , , .

:

def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True)

addDir(title, url, mode) тАУ . Mode тАУ , ( ).

addLink(title, url) тАУ , url . url // ..

:

params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))
" ". xbmcplugin.endOfDirectory(int(sys.argv[1])) XBMC, "" .

. getHTML(url) isLinkUseful(needle) addon.py :
addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))

? , .

: ; ; . . : Categories() тАУ , Movies() тАУ , Videos() тАУ . :

def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20)

addDir(title, url + link, 20) print title + ' [' + url + ']' . Categories() - url . , тАУ link .

20 тАУ , Movies(url) . , xbmcplugin.endOfDirectory(int(sys.argv[1])) , :

if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title)
? ? , . , , , . .

:

def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30)
. title[:-12] ? [:-12], , " / Magnificent movie (2013) HDRip ". ""? !

. . , ! :

<script language="javascript"> flashvars = { uid: "player_uppod", bufferproc2 :1, bufferproc_reloadsec :10, st: "/templates/linecinema-dle90/swf/video30-365.txt", file: "http://st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv" }; params = {bgcolor:"#ffffff", allowFullScreen:"true", allowScriptAccess:"always",wmode:"opaque"}; attributes = { id: "player_uppod", name: "player_uppod" }; swfobject.embedSWF("/templates/linecinema-dle90/swf/uppod.swf", "player_uppod", "570", "440", "10.0.0",false,flashvars,params,attributes); </script>
: st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv ( ). :

def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link)
. :

addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20) def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30) def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link) def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title) xbmcplugin.endOfDirectory(int(sys.argv[1]))

-, . : ZIP. . ZIP (!) . XBMC, () > > ZIP . , " ", > > LineCinema .







ZIP : HOW-TO:Write plugins for XBMC (wiki) XBMC Addon Developers Guide (pdf) : 3rd party add-on repositories XBMC Russia XBMC Community Forum

. тАж . , , .

PS , .
[.].

( , - ) :

plugin.video.linecinema


. // add-on' ( , -) , :

addon.py
addon.xml
changelog.txt
fanart.jpg
icon.png
LICENSE.txt
/resources
settings.xml
/language/
/lib/
/media/

addon.py тАУ . , ( addon.xml). default.py addon.xml тАУ XBMC: (, , , ); ( *.py); ; , . . changelog.txt , LICENSE.txt тАУ , . fanart.jpg тАУ . . icon.png тАУ "" . . /resources/settings.xml тАУ (, , / ), .. , addon.py. , , . . /resources/language/ - . , , . /resources/lib/ - Python. /resources/media/ - , , . .

: addon.py, addon.xml тАж . , .

addon.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <addon id="plugin.video.linecinema" name="LineCinema" version="0.0.1" provider-name="noname"> <requires> <import addon="xbmc.python" version="1.0"/> </requires> <extension point="xbmc.python.pluginsource" provides="video" library="addon.py"> <provides>video</provides> </extension> <extension point="xbmc.addon.metadata"> <summary>LineCinema.org</summary> <description> , . LineCinema.org </description> <platform>all</platform> </extension> </addon>
. XBMC , "plugin.video.linecinema", "LineCinema", 0.0.1, "noname".

/>
, xbmc.python 1.0.

video тАУ "addon.py". " ".

, addon.xml .

addon.py:

# -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param
xbmcplugin xbmcgui тАУ xbmc.python.

get_params() тАУ , , . , , . , . , , .

:

def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True)

addDir(title, url, mode) тАУ . Mode тАУ , ( ).

addLink(title, url) тАУ , url . url // ..

:

params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))
" ". xbmcplugin.endOfDirectory(int(sys.argv[1])) XBMC, "" .

. getHTML(url) isLinkUseful(needle) addon.py :
addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))

? , .

: ; ; . . : Categories() тАУ , Movies() тАУ , Videos() тАУ . :

def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20)

addDir(title, url + link, 20) print title + ' [' + url + ']' . Categories() - url . , тАУ link .

20 тАУ , Movies(url) . , xbmcplugin.endOfDirectory(int(sys.argv[1])) , :

if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title)
? ? , . , , , . .

:

def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30)
. title[:-12] ? [:-12], , " / Magnificent movie (2013) HDRip ". ""? !

. . , ! :

<script language="javascript"> flashvars = { uid: "player_uppod", bufferproc2 :1, bufferproc_reloadsec :10, st: "/templates/linecinema-dle90/swf/video30-365.txt", file: "http://st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv" }; params = {bgcolor:"#ffffff", allowFullScreen:"true", allowScriptAccess:"always",wmode:"opaque"}; attributes = { id: "player_uppod", name: "player_uppod" }; swfobject.embedSWF("/templates/linecinema-dle90/swf/uppod.swf", "player_uppod", "570", "440", "10.0.0",false,flashvars,params,attributes); </script>
: st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv ( ). :

def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link)
. :

addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20) def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30) def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link) def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title) xbmcplugin.endOfDirectory(int(sys.argv[1]))

-, . : ZIP. . ZIP (!) . XBMC, () > > ZIP . , " ", > > LineCinema .







ZIP : HOW-TO:Write plugins for XBMC (wiki) XBMC Addon Developers Guide (pdf) : 3rd party add-on repositories XBMC Russia XBMC Community Forum

. тАж . , , .

PS , .
  [.]. 

( , - ) :

plugin.video.linecinema


. // add-on' ( , -) , :

addon.py
addon.xml
changelog.txt
fanart.jpg
icon.png
LICENSE.txt
/resources
settings.xml
/language/
/lib/
/media/

addon.py тАУ . , ( addon.xml). default.py addon.xml тАУ XBMC: (, , , ); ( *.py); ; , . . changelog.txt , LICENSE.txt тАУ , . fanart.jpg тАУ . . icon.png тАУ "" . . /resources/settings.xml тАУ (, , / ), .. , addon.py. , , . . /resources/language/ - . , , . /resources/lib/ - Python. /resources/media/ - , , . .

: addon.py, addon.xml тАж . , .

addon.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <addon id="plugin.video.linecinema" name="LineCinema" version="0.0.1" provider-name="noname"> <requires> <import addon="xbmc.python" version="1.0"/> </requires> <extension point="xbmc.python.pluginsource" provides="video" library="addon.py"> <provides>video</provides> </extension> <extension point="xbmc.addon.metadata"> <summary>LineCinema.org</summary> <description> , . LineCinema.org </description> <platform>all</platform> </extension> </addon>
. XBMC , "plugin.video.linecinema", "LineCinema", 0.0.1, "noname".

/>
, xbmc.python 1.0.

video тАУ "addon.py". " ".

, addon.xml .

addon.py:

# -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param
xbmcplugin xbmcgui тАУ xbmc.python.

get_params() тАУ , , . , , . , . , , .

:

def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True)

addDir(title, url, mode) тАУ . Mode тАУ , ( ).

addLink(title, url) тАУ , url . url // ..

:

params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))
" ". xbmcplugin.endOfDirectory(int(sys.argv[1])) XBMC, "" .

. getHTML(url) isLinkUseful(needle) addon.py :
addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))

? , .

: ; ; . . : Categories() тАУ , Movies() тАУ , Videos() тАУ . :

def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20)

addDir(title, url + link, 20) print title + ' [' + url + ']' . Categories() - url . , тАУ link .

20 тАУ , Movies(url) . , xbmcplugin.endOfDirectory(int(sys.argv[1])) , :

if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title)
? ? , . , , , . .

:

def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30)
. title[:-12] ? [:-12], , " / Magnificent movie (2013) HDRip ". ""? !

. . , ! :

<script language="javascript"> flashvars = { uid: "player_uppod", bufferproc2 :1, bufferproc_reloadsec :10, st: "/templates/linecinema-dle90/swf/video30-365.txt", file: "http://st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv" }; params = {bgcolor:"#ffffff", allowFullScreen:"true", allowScriptAccess:"always",wmode:"opaque"}; attributes = { id: "player_uppod", name: "player_uppod" }; swfobject.embedSWF("/templates/linecinema-dle90/swf/uppod.swf", "player_uppod", "570", "440", "10.0.0",false,flashvars,params,attributes); </script>
: st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv ( ). :

def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link)
. :

addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20) def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30) def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link) def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title) xbmcplugin.endOfDirectory(int(sys.argv[1]))

-, . : ZIP. . ZIP (!) . XBMC, () > > ZIP . , " ", > > LineCinema .







ZIP : HOW-TO:Write plugins for XBMC (wiki) XBMC Addon Developers Guide (pdf) : 3rd party add-on repositories XBMC Russia XBMC Community Forum

. тАж . , , .

PS , .
[.].

( , - ) :

plugin.video.linecinema


. // add-on' ( , -) , :

addon.py
addon.xml
changelog.txt
fanart.jpg
icon.png
LICENSE.txt
/resources
settings.xml
/language/
/lib/
/media/

addon.py тАУ . , ( addon.xml). default.py addon.xml тАУ XBMC: (, , , ); ( *.py); ; , . . changelog.txt , LICENSE.txt тАУ , . fanart.jpg тАУ . . icon.png тАУ "" . . /resources/settings.xml тАУ (, , / ), .. , addon.py. , , . . /resources/language/ - . , , . /resources/lib/ - Python. /resources/media/ - , , . .

: addon.py, addon.xml тАж . , .

addon.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <addon id="plugin.video.linecinema" name="LineCinema" version="0.0.1" provider-name="noname"> <requires> <import addon="xbmc.python" version="1.0"/> </requires> <extension point="xbmc.python.pluginsource" provides="video" library="addon.py"> <provides>video</provides> </extension> <extension point="xbmc.addon.metadata"> <summary>LineCinema.org</summary> <description> , . LineCinema.org </description> <platform>all</platform> </extension> </addon>
. XBMC , "plugin.video.linecinema", "LineCinema", 0.0.1, "noname".

/>
, xbmc.python 1.0.

video тАУ "addon.py". " ".

, addon.xml .

addon.py:

# -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param
xbmcplugin xbmcgui тАУ xbmc.python.

get_params() тАУ , , . , , . , . , , .

:

def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True)

addDir(title, url, mode) тАУ . Mode тАУ , ( ).

addLink(title, url) тАУ , url . url // ..

:

params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))
" ". xbmcplugin.endOfDirectory(int(sys.argv[1])) XBMC, "" .

. getHTML(url) isLinkUseful(needle) addon.py :
addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))

? , .

: ; ; . . : Categories() тАУ , Movies() тАУ , Videos() тАУ . :

def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20)

addDir(title, url + link, 20) print title + ' [' + url + ']' . Categories() - url . , тАУ link .

20 тАУ , Movies(url) . , xbmcplugin.endOfDirectory(int(sys.argv[1])) , :

if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title)
? ? , . , , , . .

:

def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30)
. title[:-12] ? [:-12], , " / Magnificent movie (2013) HDRip ". ""? !

. . , ! :

<script language="javascript"> flashvars = { uid: "player_uppod", bufferproc2 :1, bufferproc_reloadsec :10, st: "/templates/linecinema-dle90/swf/video30-365.txt", file: "http://st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv" }; params = {bgcolor:"#ffffff", allowFullScreen:"true", allowScriptAccess:"always",wmode:"opaque"}; attributes = { id: "player_uppod", name: "player_uppod" }; swfobject.embedSWF("/templates/linecinema-dle90/swf/uppod.swf", "player_uppod", "570", "440", "10.0.0",false,flashvars,params,attributes); </script>
: st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv ( ). :

def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link)
. :

addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20) def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30) def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link) def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title) xbmcplugin.endOfDirectory(int(sys.argv[1]))

-, . : ZIP. . ZIP (!) . XBMC, () > > ZIP . , " ", > > LineCinema .







ZIP : HOW-TO:Write plugins for XBMC (wiki) XBMC Addon Developers Guide (pdf) : 3rd party add-on repositories XBMC Russia XBMC Community Forum

. тАж . , , .

PS , .
  [.]. 

( , - ) :

plugin.video.linecinema


. // add-on' ( , -) , :

addon.py
addon.xml
changelog.txt
fanart.jpg
icon.png
LICENSE.txt
/resources
settings.xml
/language/
/lib/
/media/

addon.py тАУ . , ( addon.xml). default.py addon.xml тАУ XBMC: (, , , ); ( *.py); ; , . . changelog.txt , LICENSE.txt тАУ , . fanart.jpg тАУ . . icon.png тАУ "" . . /resources/settings.xml тАУ (, , / ), .. , addon.py. , , . . /resources/language/ - . , , . /resources/lib/ - Python. /resources/media/ - , , . .

: addon.py, addon.xml тАж . , .

addon.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <addon id="plugin.video.linecinema" name="LineCinema" version="0.0.1" provider-name="noname"> <requires> <import addon="xbmc.python" version="1.0"/> </requires> <extension point="xbmc.python.pluginsource" provides="video" library="addon.py"> <provides>video</provides> </extension> <extension point="xbmc.addon.metadata"> <summary>LineCinema.org</summary> <description> , . LineCinema.org </description> <platform>all</platform> </extension> </addon>
. XBMC , "plugin.video.linecinema", "LineCinema", 0.0.1, "noname".

/>
, xbmc.python 1.0.

video тАУ "addon.py". " ".

, addon.xml .

addon.py:

# -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param
xbmcplugin xbmcgui тАУ xbmc.python.

get_params() тАУ , , . , , . , . , , .

:

def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True)

addDir(title, url, mode) тАУ . Mode тАУ , ( ).

addLink(title, url) тАУ , url . url // ..

:

params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))
" ". xbmcplugin.endOfDirectory(int(sys.argv[1])) XBMC, "" .

. getHTML(url) isLinkUseful(needle) addon.py :
addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))

? , .

: ; ; . . : Categories() тАУ , Movies() тАУ , Videos() тАУ . :

def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20)

addDir(title, url + link, 20) print title + ' [' + url + ']' . Categories() - url . , тАУ link .

20 тАУ , Movies(url) . , xbmcplugin.endOfDirectory(int(sys.argv[1])) , :

if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title)
? ? , . , , , . .

:

def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30)
. title[:-12] ? [:-12], , " / Magnificent movie (2013) HDRip ". ""? !

. . , ! :

<script language="javascript"> flashvars = { uid: "player_uppod", bufferproc2 :1, bufferproc_reloadsec :10, st: "/templates/linecinema-dle90/swf/video30-365.txt", file: "http://st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv" }; params = {bgcolor:"#ffffff", allowFullScreen:"true", allowScriptAccess:"always",wmode:"opaque"}; attributes = { id: "player_uppod", name: "player_uppod" }; swfobject.embedSWF("/templates/linecinema-dle90/swf/uppod.swf", "player_uppod", "570", "440", "10.0.0",false,flashvars,params,attributes); </script>
: st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv ( ). :

def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link)
. :

addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20) def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30) def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link) def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title) xbmcplugin.endOfDirectory(int(sys.argv[1]))

-, . : ZIP. . ZIP (!) . XBMC, () > > ZIP . , " ", > > LineCinema .







ZIP : HOW-TO:Write plugins for XBMC (wiki) XBMC Addon Developers Guide (pdf) : 3rd party add-on repositories XBMC Russia XBMC Community Forum

. тАж . , , .

PS , .
[.].

( , - ) :

plugin.video.linecinema


. // add-on' ( , -) , :

addon.py
addon.xml
changelog.txt
fanart.jpg
icon.png
LICENSE.txt
/resources
settings.xml
/language/
/lib/
/media/

addon.py тАУ . , ( addon.xml). default.py addon.xml тАУ XBMC: (, , , ); ( *.py); ; , . . changelog.txt , LICENSE.txt тАУ , . fanart.jpg тАУ . . icon.png тАУ "" . . /resources/settings.xml тАУ (, , / ), .. , addon.py. , , . . /resources/language/ - . , , . /resources/lib/ - Python. /resources/media/ - , , . .

: addon.py, addon.xml тАж . , .

addon.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <addon id="plugin.video.linecinema" name="LineCinema" version="0.0.1" provider-name="noname"> <requires> <import addon="xbmc.python" version="1.0"/> </requires> <extension point="xbmc.python.pluginsource" provides="video" library="addon.py"> <provides>video</provides> </extension> <extension point="xbmc.addon.metadata"> <summary>LineCinema.org</summary> <description> , . LineCinema.org </description> <platform>all</platform> </extension> </addon>
. XBMC , "plugin.video.linecinema", "LineCinema", 0.0.1, "noname".

/>
, xbmc.python 1.0.

video тАУ "addon.py". " ".

, addon.xml .

addon.py:

# -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param
xbmcplugin xbmcgui тАУ xbmc.python.

get_params() тАУ , , . , , . , . , , .

:

def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True)

addDir(title, url, mode) тАУ . Mode тАУ , ( ).

addLink(title, url) тАУ , url . url // ..

:

params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))
" ". xbmcplugin.endOfDirectory(int(sys.argv[1])) XBMC, "" .

. getHTML(url) isLinkUseful(needle) addon.py :
addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))

? , .

: ; ; . . : Categories() тАУ , Movies() тАУ , Videos() тАУ . :

def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20)

addDir(title, url + link, 20) print title + ' [' + url + ']' . Categories() - url . , тАУ link .

20 тАУ , Movies(url) . , xbmcplugin.endOfDirectory(int(sys.argv[1])) , :

if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title)
? ? , . , , , . .

:

def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30)
. title[:-12] ? [:-12], , " / Magnificent movie (2013) HDRip ". ""? !

. . , ! :

<script language="javascript"> flashvars = { uid: "player_uppod", bufferproc2 :1, bufferproc_reloadsec :10, st: "/templates/linecinema-dle90/swf/video30-365.txt", file: "http://st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv" }; params = {bgcolor:"#ffffff", allowFullScreen:"true", allowScriptAccess:"always",wmode:"opaque"}; attributes = { id: "player_uppod", name: "player_uppod" }; swfobject.embedSWF("/templates/linecinema-dle90/swf/uppod.swf", "player_uppod", "570", "440", "10.0.0",false,flashvars,params,attributes); </script>
: st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv ( ). :

def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link)
. :

addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20) def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30) def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link) def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title) xbmcplugin.endOfDirectory(int(sys.argv[1]))

-, . : ZIP. . ZIP (!) . XBMC, () > > ZIP . , " ", > > LineCinema .







ZIP : HOW-TO:Write plugins for XBMC (wiki) XBMC Addon Developers Guide (pdf) : 3rd party add-on repositories XBMC Russia XBMC Community Forum

. тАж . , , .

PS , .
[.].

( , - ) :

plugin.video.linecinema


. // add-on' ( , -) , :

addon.py
addon.xml
changelog.txt
fanart.jpg
icon.png
LICENSE.txt
/resources
settings.xml
/language/
/lib/
/media/

addon.py тАУ . , ( addon.xml). default.py addon.xml тАУ XBMC: (, , , ); ( *.py); ; , . . changelog.txt , LICENSE.txt тАУ , . fanart.jpg тАУ . . icon.png тАУ "" . . /resources/settings.xml тАУ (, , / ), .. , addon.py. , , . . /resources/language/ - . , , . /resources/lib/ - Python. /resources/media/ - , , . .

: addon.py, addon.xml тАж . , .

addon.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <addon id="plugin.video.linecinema" name="LineCinema" version="0.0.1" provider-name="noname"> <requires> <import addon="xbmc.python" version="1.0"/> </requires> <extension point="xbmc.python.pluginsource" provides="video" library="addon.py"> <provides>video</provides> </extension> <extension point="xbmc.addon.metadata"> <summary>LineCinema.org</summary> <description> , . LineCinema.org </description> <platform>all</platform> </extension> </addon>
. XBMC , "plugin.video.linecinema", "LineCinema", 0.0.1, "noname".

/>
, xbmc.python 1.0.

video тАУ "addon.py". " ".

, addon.xml .

addon.py:

# -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param
xbmcplugin xbmcgui тАУ xbmc.python.

get_params() тАУ , , . , , . , . , , .

:

def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True)

addDir(title, url, mode) тАУ . Mode тАУ , ( ).

addLink(title, url) тАУ , url . url // ..

:

params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))
" ". xbmcplugin.endOfDirectory(int(sys.argv[1])) XBMC, "" .

. getHTML(url) isLinkUseful(needle) addon.py :
addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))

? , .

: ; ; . . : Categories() тАУ , Movies() тАУ , Videos() тАУ . :

def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20)

addDir(title, url + link, 20) print title + ' [' + url + ']' . Categories() - url . , тАУ link .

20 тАУ , Movies(url) . , xbmcplugin.endOfDirectory(int(sys.argv[1])) , :

if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title)
? ? , . , , , . .

:

def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30)
. title[:-12] ? [:-12], , " / Magnificent movie (2013) HDRip ". ""? !

. . , ! :

<script language="javascript"> flashvars = { uid: "player_uppod", bufferproc2 :1, bufferproc_reloadsec :10, st: "/templates/linecinema-dle90/swf/video30-365.txt", file: "http://st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv" }; params = {bgcolor:"#ffffff", allowFullScreen:"true", allowScriptAccess:"always",wmode:"opaque"}; attributes = { id: "player_uppod", name: "player_uppod" }; swfobject.embedSWF("/templates/linecinema-dle90/swf/uppod.swf", "player_uppod", "570", "440", "10.0.0",false,flashvars,params,attributes); </script>
: st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv ( ). :

def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link)
. :

addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20) def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30) def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link) def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title) xbmcplugin.endOfDirectory(int(sys.argv[1]))

-, . : ZIP. . ZIP (!) . XBMC, () > > ZIP . , " ", > > LineCinema .







ZIP : HOW-TO:Write plugins for XBMC (wiki) XBMC Addon Developers Guide (pdf) : 3rd party add-on repositories XBMC Russia XBMC Community Forum

. тАж . , , .

PS , .
  [.]. 

( , - ) :

plugin.video.linecinema


. // add-on' ( , -) , :

addon.py
addon.xml
changelog.txt
fanart.jpg
icon.png
LICENSE.txt
/resources
settings.xml
/language/
/lib/
/media/

addon.py тАУ . , ( addon.xml). default.py addon.xml тАУ XBMC: (, , , ); ( *.py); ; , . . changelog.txt , LICENSE.txt тАУ , . fanart.jpg тАУ . . icon.png тАУ "" . . /resources/settings.xml тАУ (, , / ), .. , addon.py. , , . . /resources/language/ - . , , . /resources/lib/ - Python. /resources/media/ - , , . .

: addon.py, addon.xml тАж . , .

addon.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <addon id="plugin.video.linecinema" name="LineCinema" version="0.0.1" provider-name="noname"> <requires> <import addon="xbmc.python" version="1.0"/> </requires> <extension point="xbmc.python.pluginsource" provides="video" library="addon.py"> <provides>video</provides> </extension> <extension point="xbmc.addon.metadata"> <summary>LineCinema.org</summary> <description> , . LineCinema.org </description> <platform>all</platform> </extension> </addon>
. XBMC , "plugin.video.linecinema", "LineCinema", 0.0.1, "noname".

/>
, xbmc.python 1.0.

video тАУ "addon.py". " ".

, addon.xml .

addon.py:

# -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param
xbmcplugin xbmcgui тАУ xbmc.python.

get_params() тАУ , , . , , . , . , , .

:

def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True)

addDir(title, url, mode) тАУ . Mode тАУ , ( ).

addLink(title, url) тАУ , url . url // ..

:

params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))
" ". xbmcplugin.endOfDirectory(int(sys.argv[1])) XBMC, "" .

. getHTML(url) isLinkUseful(needle) addon.py :
addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))

? , .

: ; ; . . : Categories() тАУ , Movies() тАУ , Videos() тАУ . :

def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20)

addDir(title, url + link, 20) print title + ' [' + url + ']' . Categories() - url . , тАУ link .

20 тАУ , Movies(url) . , xbmcplugin.endOfDirectory(int(sys.argv[1])) , :

if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title)
? ? , . , , , . .

:

def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30)
. title[:-12] ? [:-12], , " / Magnificent movie (2013) HDRip ". ""? !

. . , ! :

<script language="javascript"> flashvars = { uid: "player_uppod", bufferproc2 :1, bufferproc_reloadsec :10, st: "/templates/linecinema-dle90/swf/video30-365.txt", file: "http://st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv" }; params = {bgcolor:"#ffffff", allowFullScreen:"true", allowScriptAccess:"always",wmode:"opaque"}; attributes = { id: "player_uppod", name: "player_uppod" }; swfobject.embedSWF("/templates/linecinema-dle90/swf/uppod.swf", "player_uppod", "570", "440", "10.0.0",false,flashvars,params,attributes); </script>
: st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv ( ). :

def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link)
. :

addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20) def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30) def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link) def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title) xbmcplugin.endOfDirectory(int(sys.argv[1]))

-, . : ZIP. . ZIP (!) . XBMC, () > > ZIP . , " ", > > LineCinema .







ZIP : HOW-TO:Write plugins for XBMC (wiki) XBMC Addon Developers Guide (pdf) : 3rd party add-on repositories XBMC Russia XBMC Community Forum

. тАж . , , .

PS , .
[.].

( , - ) :

plugin.video.linecinema


. // add-on' ( , -) , :

addon.py
addon.xml
changelog.txt
fanart.jpg
icon.png
LICENSE.txt
/resources
settings.xml
/language/
/lib/
/media/

addon.py тАУ . , ( addon.xml). default.py addon.xml тАУ XBMC: (, , , ); ( *.py); ; , . . changelog.txt , LICENSE.txt тАУ , . fanart.jpg тАУ . . icon.png тАУ "" . . /resources/settings.xml тАУ (, , / ), .. , addon.py. , , . . /resources/language/ - . , , . /resources/lib/ - Python. /resources/media/ - , , . .

: addon.py, addon.xml тАж . , .

addon.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <addon id="plugin.video.linecinema" name="LineCinema" version="0.0.1" provider-name="noname"> <requires> <import addon="xbmc.python" version="1.0"/> </requires> <extension point="xbmc.python.pluginsource" provides="video" library="addon.py"> <provides>video</provides> </extension> <extension point="xbmc.addon.metadata"> <summary>LineCinema.org</summary> <description> , . LineCinema.org </description> <platform>all</platform> </extension> </addon>
. XBMC , "plugin.video.linecinema", "LineCinema", 0.0.1, "noname".

/>
, xbmc.python 1.0.

video тАУ "addon.py". " ".

, addon.xml .

addon.py:

# -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param
xbmcplugin xbmcgui тАУ xbmc.python.

get_params() тАУ , , . , , . , . , , .

:

def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True)

addDir(title, url, mode) тАУ . Mode тАУ , ( ).

addLink(title, url) тАУ , url . url // ..

:

params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))
" ". xbmcplugin.endOfDirectory(int(sys.argv[1])) XBMC, "" .

. getHTML(url) isLinkUseful(needle) addon.py :
addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))

? , .

: ; ; . . : Categories() тАУ , Movies() тАУ , Videos() тАУ . :

def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20)

addDir(title, url + link, 20) print title + ' [' + url + ']' . Categories() - url . , тАУ link .

20 тАУ , Movies(url) . , xbmcplugin.endOfDirectory(int(sys.argv[1])) , :

if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title)
? ? , . , , , . .

:

def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30)
. title[:-12] ? [:-12], , " / Magnificent movie (2013) HDRip ". ""? !

. . , ! :

<script language="javascript"> flashvars = { uid: "player_uppod", bufferproc2 :1, bufferproc_reloadsec :10, st: "/templates/linecinema-dle90/swf/video30-365.txt", file: "http://st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv" }; params = {bgcolor:"#ffffff", allowFullScreen:"true", allowScriptAccess:"always",wmode:"opaque"}; attributes = { id: "player_uppod", name: "player_uppod" }; swfobject.embedSWF("/templates/linecinema-dle90/swf/uppod.swf", "player_uppod", "570", "440", "10.0.0",false,flashvars,params,attributes); </script>
: st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv ( ). :

def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link)
. :

addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20) def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30) def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link) def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title) xbmcplugin.endOfDirectory(int(sys.argv[1]))

-, . : ZIP. . ZIP (!) . XBMC, () > > ZIP . , " ", > > LineCinema .







ZIP : HOW-TO:Write plugins for XBMC (wiki) XBMC Addon Developers Guide (pdf) : 3rd party add-on repositories XBMC Russia XBMC Community Forum

. тАж . , , .

PS , .
[.].

( , - ) :

plugin.video.linecinema


. // add-on' ( , -) , :

addon.py
addon.xml
changelog.txt
fanart.jpg
icon.png
LICENSE.txt
/resources
settings.xml
/language/
/lib/
/media/

addon.py тАУ . , ( addon.xml). default.py addon.xml тАУ XBMC: (, , , ); ( *.py); ; , . . changelog.txt , LICENSE.txt тАУ , . fanart.jpg тАУ . . icon.png тАУ "" . . /resources/settings.xml тАУ (, , / ), .. , addon.py. , , . . /resources/language/ - . , , . /resources/lib/ - Python. /resources/media/ - , , . .

: addon.py, addon.xml тАж . , .

addon.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <addon id="plugin.video.linecinema" name="LineCinema" version="0.0.1" provider-name="noname"> <requires> <import addon="xbmc.python" version="1.0"/> </requires> <extension point="xbmc.python.pluginsource" provides="video" library="addon.py"> <provides>video</provides> </extension> <extension point="xbmc.addon.metadata"> <summary>LineCinema.org</summary> <description> , . LineCinema.org </description> <platform>all</platform> </extension> </addon>
. XBMC , "plugin.video.linecinema", "LineCinema", 0.0.1, "noname".

/>
, xbmc.python 1.0.

video тАУ "addon.py". " ".

, addon.xml .

addon.py:

# -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param
xbmcplugin xbmcgui тАУ xbmc.python.

get_params() тАУ , , . , , . , . , , .

:

def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True)

addDir(title, url, mode) тАУ . Mode тАУ , ( ).

addLink(title, url) тАУ , url . url // ..

:

params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))
" ". xbmcplugin.endOfDirectory(int(sys.argv[1])) XBMC, "" .

. getHTML(url) isLinkUseful(needle) addon.py :
addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))

? , .

: ; ; . . : Categories() тАУ , Movies() тАУ , Videos() тАУ . :

def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20)

addDir(title, url + link, 20) print title + ' [' + url + ']' . Categories() - url . , тАУ link .

20 тАУ , Movies(url) . , xbmcplugin.endOfDirectory(int(sys.argv[1])) , :

if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title)
? ? , . , , , . .

:

def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30)
. title[:-12] ? [:-12], , " / Magnificent movie (2013) HDRip ". ""? !

. . , ! :

<script language="javascript"> flashvars = { uid: "player_uppod", bufferproc2 :1, bufferproc_reloadsec :10, st: "/templates/linecinema-dle90/swf/video30-365.txt", file: "http://st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv" }; params = {bgcolor:"#ffffff", allowFullScreen:"true", allowScriptAccess:"always",wmode:"opaque"}; attributes = { id: "player_uppod", name: "player_uppod" }; swfobject.embedSWF("/templates/linecinema-dle90/swf/uppod.swf", "player_uppod", "570", "440", "10.0.0",false,flashvars,params,attributes); </script>
: st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv ( ). :

def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link)
. :

addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20) def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30) def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link) def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title) xbmcplugin.endOfDirectory(int(sys.argv[1]))

-, . : ZIP. . ZIP (!) . XBMC, () > > ZIP . , " ", > > LineCinema .







ZIP : HOW-TO:Write plugins for XBMC (wiki) XBMC Addon Developers Guide (pdf) : 3rd party add-on repositories XBMC Russia XBMC Community Forum

. тАж . , , .

PS , .
[.].

( , - ) :

plugin.video.linecinema


. // add-on' ( , -) , :

addon.py
addon.xml
changelog.txt
fanart.jpg
icon.png
LICENSE.txt
/resources
settings.xml
/language/
/lib/
/media/

addon.py тАУ . , ( addon.xml). default.py addon.xml тАУ XBMC: (, , , ); ( *.py); ; , . . changelog.txt , LICENSE.txt тАУ , . fanart.jpg тАУ . . icon.png тАУ "" . . /resources/settings.xml тАУ (, , / ), .. , addon.py. , , . . /resources/language/ - . , , . /resources/lib/ - Python. /resources/media/ - , , . .

: addon.py, addon.xml тАж . , .

addon.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <addon id="plugin.video.linecinema" name="LineCinema" version="0.0.1" provider-name="noname"> <requires> <import addon="xbmc.python" version="1.0"/> </requires> <extension point="xbmc.python.pluginsource" provides="video" library="addon.py"> <provides>video</provides> </extension> <extension point="xbmc.addon.metadata"> <summary>LineCinema.org</summary> <description> , . LineCinema.org </description> <platform>all</platform> </extension> </addon>
. XBMC , "plugin.video.linecinema", "LineCinema", 0.0.1, "noname".

/>
, xbmc.python 1.0.

video тАУ "addon.py". " ".

, addon.xml .

addon.py:

# -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param
xbmcplugin xbmcgui тАУ xbmc.python.

get_params() тАУ , , . , , . , . , , .

:

def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True)

addDir(title, url, mode) тАУ . Mode тАУ , ( ).

addLink(title, url) тАУ , url . url // ..

:

params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))
" ". xbmcplugin.endOfDirectory(int(sys.argv[1])) XBMC, "" .

. getHTML(url) isLinkUseful(needle) addon.py :
addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))

? , .

: ; ; . . : Categories() тАУ , Movies() тАУ , Videos() тАУ . :

def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20)

addDir(title, url + link, 20) print title + ' [' + url + ']' . Categories() - url . , тАУ link .

20 тАУ , Movies(url) . , xbmcplugin.endOfDirectory(int(sys.argv[1])) , :

if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title)
? ? , . , , , . .

:

def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30)
. title[:-12] ? [:-12], , " / Magnificent movie (2013) HDRip ". ""? !

. . , ! :

<script language="javascript"> flashvars = { uid: "player_uppod", bufferproc2 :1, bufferproc_reloadsec :10, st: "/templates/linecinema-dle90/swf/video30-365.txt", file: "http://st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv" }; params = {bgcolor:"#ffffff", allowFullScreen:"true", allowScriptAccess:"always",wmode:"opaque"}; attributes = { id: "player_uppod", name: "player_uppod" }; swfobject.embedSWF("/templates/linecinema-dle90/swf/uppod.swf", "player_uppod", "570", "440", "10.0.0",false,flashvars,params,attributes); </script>
: st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv ( ). :

def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link)
. :

addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20) def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30) def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link) def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title) xbmcplugin.endOfDirectory(int(sys.argv[1]))

-, . : ZIP. . ZIP (!) . XBMC, () > > ZIP . , " ", > > LineCinema .







ZIP : HOW-TO:Write plugins for XBMC (wiki) XBMC Addon Developers Guide (pdf) : 3rd party add-on repositories XBMC Russia XBMC Community Forum

. тАж . , , .

PS , .
[.].

( , - ) :

plugin.video.linecinema


. // add-on' ( , -) , :

addon.py
addon.xml
changelog.txt
fanart.jpg
icon.png
LICENSE.txt
/resources
settings.xml
/language/
/lib/
/media/

addon.py тАУ . , ( addon.xml). default.py addon.xml тАУ XBMC: (, , , ); ( *.py); ; , . . changelog.txt , LICENSE.txt тАУ , . fanart.jpg тАУ . . icon.png тАУ "" . . /resources/settings.xml тАУ (, , / ), .. , addon.py. , , . . /resources/language/ - . , , . /resources/lib/ - Python. /resources/media/ - , , . .

: addon.py, addon.xml тАж . , .

addon.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <addon id="plugin.video.linecinema" name="LineCinema" version="0.0.1" provider-name="noname"> <requires> <import addon="xbmc.python" version="1.0"/> </requires> <extension point="xbmc.python.pluginsource" provides="video" library="addon.py"> <provides>video</provides> </extension> <extension point="xbmc.addon.metadata"> <summary>LineCinema.org</summary> <description> , . LineCinema.org </description> <platform>all</platform> </extension> </addon>
. XBMC , "plugin.video.linecinema", "LineCinema", 0.0.1, "noname".

/>
, xbmc.python 1.0.

video тАУ "addon.py". " ".

, addon.xml .

addon.py:

# -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param
xbmcplugin xbmcgui тАУ xbmc.python.

get_params() тАУ , , . , , . , . , , .

:

def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True)

addDir(title, url, mode) тАУ . Mode тАУ , ( ).

addLink(title, url) тАУ , url . url // ..

:

params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))
" ". xbmcplugin.endOfDirectory(int(sys.argv[1])) XBMC, "" .

. getHTML(url) isLinkUseful(needle) addon.py :
addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))

? , .

: ; ; . . : Categories() тАУ , Movies() тАУ , Videos() тАУ . :

def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20)

addDir(title, url + link, 20) print title + ' [' + url + ']' . Categories() - url . , тАУ link .

20 тАУ , Movies(url) . , xbmcplugin.endOfDirectory(int(sys.argv[1])) , :

if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title)
? ? , . , , , . .

:

def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30)
. title[:-12] ? [:-12], , " / Magnificent movie (2013) HDRip ". ""? !

. . , ! :

<script language="javascript"> flashvars = { uid: "player_uppod", bufferproc2 :1, bufferproc_reloadsec :10, st: "/templates/linecinema-dle90/swf/video30-365.txt", file: "http://st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv" }; params = {bgcolor:"#ffffff", allowFullScreen:"true", allowScriptAccess:"always",wmode:"opaque"}; attributes = { id: "player_uppod", name: "player_uppod" }; swfobject.embedSWF("/templates/linecinema-dle90/swf/uppod.swf", "player_uppod", "570", "440", "10.0.0",false,flashvars,params,attributes); </script>
: st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv ( ). :

def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link)
. :

addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20) def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30) def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link) def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title) xbmcplugin.endOfDirectory(int(sys.argv[1]))

-, . : ZIP. . ZIP (!) . XBMC, () > > ZIP . , " ", > > LineCinema .







ZIP : HOW-TO:Write plugins for XBMC (wiki) XBMC Addon Developers Guide (pdf) : 3rd party add-on repositories XBMC Russia XBMC Community Forum

. тАж . , , .

PS , .
[.].

( , - ) :

plugin.video.linecinema


. // add-on' ( , -) , :

addon.py
addon.xml
changelog.txt
fanart.jpg
icon.png
LICENSE.txt
/resources
settings.xml
/language/
/lib/
/media/

addon.py тАУ . , ( addon.xml). default.py addon.xml тАУ XBMC: (, , , ); ( *.py); ; , . . changelog.txt , LICENSE.txt тАУ , . fanart.jpg тАУ . . icon.png тАУ "" . . /resources/settings.xml тАУ (, , / ), .. , addon.py. , , . . /resources/language/ - . , , . /resources/lib/ - Python. /resources/media/ - , , . .

: addon.py, addon.xml тАж . , .

addon.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <addon id="plugin.video.linecinema" name="LineCinema" version="0.0.1" provider-name="noname"> <requires> <import addon="xbmc.python" version="1.0"/> </requires> <extension point="xbmc.python.pluginsource" provides="video" library="addon.py"> <provides>video</provides> </extension> <extension point="xbmc.addon.metadata"> <summary>LineCinema.org</summary> <description> , . LineCinema.org </description> <platform>all</platform> </extension> </addon>
. XBMC , "plugin.video.linecinema", "LineCinema", 0.0.1, "noname".

/>
, xbmc.python 1.0.

video тАУ "addon.py". " ".

, addon.xml .

addon.py:

# -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param
xbmcplugin xbmcgui тАУ xbmc.python.

get_params() тАУ , , . , , . , . , , .

:

def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True)

addDir(title, url, mode) тАУ . Mode тАУ , ( ).

addLink(title, url) тАУ , url . url // ..

:

params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))
" ". xbmcplugin.endOfDirectory(int(sys.argv[1])) XBMC, "" .

. getHTML(url) isLinkUseful(needle) addon.py :
addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))

? , .

: ; ; . . : Categories() тАУ , Movies() тАУ , Videos() тАУ . :

def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20)

addDir(title, url + link, 20) print title + ' [' + url + ']' . Categories() - url . , тАУ link .

20 тАУ , Movies(url) . , xbmcplugin.endOfDirectory(int(sys.argv[1])) , :

if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title)
? ? , . , , , . .

:

def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30)
. title[:-12] ? [:-12], , " / Magnificent movie (2013) HDRip ". ""? !

. . , ! :

<script language="javascript"> flashvars = { uid: "player_uppod", bufferproc2 :1, bufferproc_reloadsec :10, st: "/templates/linecinema-dle90/swf/video30-365.txt", file: "http://st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv" }; params = {bgcolor:"#ffffff", allowFullScreen:"true", allowScriptAccess:"always",wmode:"opaque"}; attributes = { id: "player_uppod", name: "player_uppod" }; swfobject.embedSWF("/templates/linecinema-dle90/swf/uppod.swf", "player_uppod", "570", "440", "10.0.0",false,flashvars,params,attributes); </script>
: st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv ( ). :

def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link)
. :

addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20) def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30) def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link) def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title) xbmcplugin.endOfDirectory(int(sys.argv[1]))

-, . : ZIP. . ZIP (!) . XBMC, () > > ZIP . , " ", > > LineCinema .







ZIP : HOW-TO:Write plugins for XBMC (wiki) XBMC Addon Developers Guide (pdf) : 3rd party add-on repositories XBMC Russia XBMC Community Forum

. тАж . , , .

PS , .

[.].

( , - ) :

plugin.video.linecinema


. // add-on' ( , -) , :

addon.py
addon.xml
changelog.txt
fanart.jpg
icon.png
LICENSE.txt
/resources
settings.xml
/language/
/lib/
/media/

addon.py тАУ . , ( addon.xml). default.py addon.xml тАУ XBMC: (, , , ); ( *.py); ; , . . changelog.txt , LICENSE.txt тАУ , . fanart.jpg тАУ . . icon.png тАУ "" . . /resources/settings.xml тАУ (, , / ), .. , addon.py. , , . . /resources/language/ - . , , . /resources/lib/ - Python. /resources/media/ - , , . .

: addon.py, addon.xml тАж . , .

addon.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <addon id="plugin.video.linecinema" name="LineCinema" version="0.0.1" provider-name="noname"> <requires> <import addon="xbmc.python" version="1.0"/> </requires> <extension point="xbmc.python.pluginsource" provides="video" library="addon.py"> <provides>video</provides> </extension> <extension point="xbmc.addon.metadata"> <summary>LineCinema.org</summary> <description> , . LineCinema.org </description> <platform>all</platform> </extension> </addon>
. XBMC , "plugin.video.linecinema", "LineCinema", 0.0.1, "noname".

/>
, xbmc.python 1.0.

video тАУ "addon.py". " ".

, addon.xml .

addon.py:

# -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param
xbmcplugin xbmcgui тАУ xbmc.python.

get_params() тАУ , , . , , . , . , , .

:

def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True)

addDir(title, url, mode) тАУ . Mode тАУ , ( ).

addLink(title, url) тАУ , url . url // ..

:

params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))
" ". xbmcplugin.endOfDirectory(int(sys.argv[1])) XBMC, "" .

. getHTML(url) isLinkUseful(needle) addon.py :
addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))

? , .

: ; ; . . : Categories() тАУ , Movies() тАУ , Videos() тАУ . :

def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20)

addDir(title, url + link, 20) print title + ' [' + url + ']' . Categories() - url . , тАУ link .

20 тАУ , Movies(url) . , xbmcplugin.endOfDirectory(int(sys.argv[1])) , :

if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title)
? ? , . , , , . .

:

def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30)
. title[:-12] ? [:-12], , " / Magnificent movie (2013) HDRip ". ""? !

. . , ! :

<script language="javascript"> flashvars = { uid: "player_uppod", bufferproc2 :1, bufferproc_reloadsec :10, st: "/templates/linecinema-dle90/swf/video30-365.txt", file: "http://st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv" }; params = {bgcolor:"#ffffff", allowFullScreen:"true", allowScriptAccess:"always",wmode:"opaque"}; attributes = { id: "player_uppod", name: "player_uppod" }; swfobject.embedSWF("/templates/linecinema-dle90/swf/uppod.swf", "player_uppod", "570", "440", "10.0.0",false,flashvars,params,attributes); </script>
: st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv ( ). :

def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link)
. :

addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20) def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30) def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link) def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title) xbmcplugin.endOfDirectory(int(sys.argv[1]))

-, . : ZIP. . ZIP (!) . XBMC, () > > ZIP . , " ", > > LineCinema .







ZIP : HOW-TO:Write plugins for XBMC (wiki) XBMC Addon Developers Guide (pdf) : 3rd party add-on repositories XBMC Russia XBMC Community Forum

. тАж . , , .

PS , .

[.].

( , - ) :

plugin.video.linecinema


. // add-on' ( , -) , :

addon.py
addon.xml
changelog.txt
fanart.jpg
icon.png
LICENSE.txt
/resources
settings.xml
/language/
/lib/
/media/

addon.py тАУ . , ( addon.xml). default.py addon.xml тАУ XBMC: (, , , ); ( *.py); ; , . . changelog.txt , LICENSE.txt тАУ , . fanart.jpg тАУ . . icon.png тАУ "" . . /resources/settings.xml тАУ (, , / ), .. , addon.py. , , . . /resources/language/ - . , , . /resources/lib/ - Python. /resources/media/ - , , . .

: addon.py, addon.xml тАж . , .

addon.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <addon id="plugin.video.linecinema" name="LineCinema" version="0.0.1" provider-name="noname"> <requires> <import addon="xbmc.python" version="1.0"/> </requires> <extension point="xbmc.python.pluginsource" provides="video" library="addon.py"> <provides>video</provides> </extension> <extension point="xbmc.addon.metadata"> <summary>LineCinema.org</summary> <description> , . LineCinema.org </description> <platform>all</platform> </extension> </addon>
. XBMC , "plugin.video.linecinema", "LineCinema", 0.0.1, "noname".

/>
, xbmc.python 1.0.

video тАУ "addon.py". " ".

, addon.xml .

addon.py:

# -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param
xbmcplugin xbmcgui тАУ xbmc.python.

get_params() тАУ , , . , , . , . , , .

:

def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True)

addDir(title, url, mode) тАУ . Mode тАУ , ( ).

addLink(title, url) тАУ , url . url // ..

:

params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))
" ". xbmcplugin.endOfDirectory(int(sys.argv[1])) XBMC, "" .

. getHTML(url) isLinkUseful(needle) addon.py :
addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))

? , .

: ; ; . . : Categories() тАУ , Movies() тАУ , Videos() тАУ . :

def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20)

addDir(title, url + link, 20) print title + ' [' + url + ']' . Categories() - url . , тАУ link .

20 тАУ , Movies(url) . , xbmcplugin.endOfDirectory(int(sys.argv[1])) , :

if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title)
? ? , . , , , . .

:

def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30)
. title[:-12] ? [:-12], , " / Magnificent movie (2013) HDRip ". ""? !

. . , ! :

<script language="javascript"> flashvars = { uid: "player_uppod", bufferproc2 :1, bufferproc_reloadsec :10, st: "/templates/linecinema-dle90/swf/video30-365.txt", file: "http://st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv" }; params = {bgcolor:"#ffffff", allowFullScreen:"true", allowScriptAccess:"always",wmode:"opaque"}; attributes = { id: "player_uppod", name: "player_uppod" }; swfobject.embedSWF("/templates/linecinema-dle90/swf/uppod.swf", "player_uppod", "570", "440", "10.0.0",false,flashvars,params,attributes); </script>
: st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv ( ). :

def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link)
. :

addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20) def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30) def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link) def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title) xbmcplugin.endOfDirectory(int(sys.argv[1]))

-, . : ZIP. . ZIP (!) . XBMC, () > > ZIP . , " ", > > LineCinema .







ZIP : HOW-TO:Write plugins for XBMC (wiki) XBMC Addon Developers Guide (pdf) : 3rd party add-on repositories XBMC Russia XBMC Community Forum

. тАж . , , .

PS , .
[.].

( , - ) :

plugin.video.linecinema


. // add-on' ( , -) , :

addon.py
addon.xml
changelog.txt
fanart.jpg
icon.png
LICENSE.txt
/resources
settings.xml
/language/
/lib/
/media/

addon.py тАУ . , ( addon.xml). default.py addon.xml тАУ XBMC: (, , , ); ( *.py); ; , . . changelog.txt , LICENSE.txt тАУ , . fanart.jpg тАУ . . icon.png тАУ "" . . /resources/settings.xml тАУ (, , / ), .. , addon.py. , , . . /resources/language/ - . , , . /resources/lib/ - Python. /resources/media/ - , , . .

: addon.py, addon.xml тАж . , .

addon.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <addon id="plugin.video.linecinema" name="LineCinema" version="0.0.1" provider-name="noname"> <requires> <import addon="xbmc.python" version="1.0"/> </requires> <extension point="xbmc.python.pluginsource" provides="video" library="addon.py"> <provides>video</provides> </extension> <extension point="xbmc.addon.metadata"> <summary>LineCinema.org</summary> <description> , . LineCinema.org </description> <platform>all</platform> </extension> </addon>
. XBMC , "plugin.video.linecinema", "LineCinema", 0.0.1, "noname".

/>
, xbmc.python 1.0.

video тАУ "addon.py". " ".

, addon.xml .

addon.py:

# -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param
xbmcplugin xbmcgui тАУ xbmc.python.

get_params() тАУ , , . , , . , . , , .

:

def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True)

addDir(title, url, mode) тАУ . Mode тАУ , ( ).

addLink(title, url) тАУ , url . url // ..

:

params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))
" ". xbmcplugin.endOfDirectory(int(sys.argv[1])) XBMC, "" .

. getHTML(url) isLinkUseful(needle) addon.py :
addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass xbmcplugin.endOfDirectory(int(sys.argv[1]))

? , .

: ; ; . . : Categories() тАУ , Movies() тАУ , Videos() тАУ . :

def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20)

addDir(title, url + link, 20) print title + ' [' + url + ']' . Categories() - url . , тАУ link .

20 тАУ , Movies(url) . , xbmcplugin.endOfDirectory(int(sys.argv[1])) , :

if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title)
? ? , . , , , . .

:

def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30)
. title[:-12] ? [:-12], , " / Magnificent movie (2013) HDRip ". ""? !

. . , ! :

<script language="javascript"> flashvars = { uid: "player_uppod", bufferproc2 :1, bufferproc_reloadsec :10, st: "/templates/linecinema-dle90/swf/video30-365.txt", file: "http://st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv" }; params = {bgcolor:"#ffffff", allowFullScreen:"true", allowScriptAccess:"always",wmode:"opaque"}; attributes = { id: "player_uppod", name: "player_uppod" }; swfobject.embedSWF("/templates/linecinema-dle90/swf/uppod.swf", "player_uppod", "570", "440", "10.0.0",false,flashvars,params,attributes); </script>
: st7.linecinema.org/s/820e31e7cbe3e8c362785b733db56c57/film10/Druzea.navek.DVDRip.flv ( ). :

def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link)
. :

addon.py # -*- coding: utf-8 -*- import urllib, urllib2, re, sys import xbmcplugin, xbmcgui def getHTML(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3', 'Content-Type':'application/x-www-form-urlencoded'} conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers)) html = conn.read() conn.close() return html def isLinkUseful(needle): haystack = ['/index.php', '/newsz/Televydenye/100432-2008-3-11-432.html', '/newsz/500183-tex-podderzhka.html'] return needle not in haystack def Categories(): url = 'http://www.linecinema.org' html = getHTML(url) genre_links = re.compile('<a href="(.+?)" title="" class="mainmenu">(.+?)</a><br />').findall(html.decode('windows-1251').encode('utf-8')) for link, title in genre_links: if isLinkUseful(link): addDir(title, url + link, 20) def Movies(url): html = getHTML(url) movie_links = re.compile('<h1> <a href="(.+?)">(.+?)</a> </h1>').findall(html.decode('windows-1251').encode('utf-8')) for link, title in movie_links: addDir(title[:-12], link, 30) def Videos(url, title): html = getHTML(url) link = re.compile('file: "(.+?)"').findall(html.decode('windows-1251').encode('utf-8'))[0] addLink(title, link) def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addLink(title, url): item = xbmcgui.ListItem(title, iconImage='DefaultVideo.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item) def addDir(title, url, mode): sys_url = sys.argv[0] + '?title=' + urllib.quote_plus(title) + '&url=' + urllib.quote_plus(url) + '&mode=' + urllib.quote_plus(str(mode)) item = xbmcgui.ListItem(title, iconImage='DefaultFolder.png', thumbnailImage='') item.setInfo( type='Video', infoLabels={'Title': title} ) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sys_url, listitem=item, isFolder=True) params = get_params() url = None title = None mode = None try: title = urllib.unquote_plus(params['title']) except: pass try: url = urllib.unquote_plus(params['url']) except: pass try: mode = int(params['mode']) except: pass if mode == None: Categories() elif mode == 20: Movies(url) elif mode == 30: Videos(url, title) xbmcplugin.endOfDirectory(int(sys.argv[1]))

-, . : ZIP. . ZIP (!) . XBMC, () > > ZIP . , " ", > > LineCinema .







ZIP : HOW-TO:Write plugins for XBMC (wiki) XBMC Addon Developers Guide (pdf) : 3rd party add-on repositories XBMC Russia XBMC Community Forum

. тАж . , , .

PS , .

Source: https://habr.com/ru/post/In166097/


All Articles