diff options
author | prof-membrane <prof-membrane@users.noreply.github.com> | 2017-01-15 13:25:33 +0100 |
---|---|---|
committer | Martijn Kaijser <martijn@xbmc.org> | 2017-01-15 04:25:33 -0800 |
commit | d3b17967d8e885ab218663643a75ed149301f5cf (patch) | |
tree | e95fcc14e143d01ea76ad4fd0f9b50958f45a0ce /plugin.video.funkmediathek | |
parent | 81db2ccb9affa9d2836257817f3623ed11725bea (diff) |
[plugin.video.funkmediathek] v1.2.0 (#862)
[plugin.video.funkmediathek] v1.2.0
Diffstat (limited to 'plugin.video.funkmediathek')
-rw-r--r-- | plugin.video.funkmediathek/LICENSE.txt | 339 | ||||
-rw-r--r-- | plugin.video.funkmediathek/addon.xml | 21 | ||||
-rw-r--r-- | plugin.video.funkmediathek/changelog.txt | 37 | ||||
-rw-r--r-- | plugin.video.funkmediathek/default.py | 53 | ||||
-rw-r--r-- | plugin.video.funkmediathek/fanart.jpg | bin | 0 -> 44338 bytes | |||
-rw-r--r-- | plugin.video.funkmediathek/icon.png | bin | 0 -> 10890 bytes | |||
-rw-r--r-- | plugin.video.funkmediathek/resources/__init__.py | 0 | ||||
-rw-r--r-- | plugin.video.funkmediathek/resources/language/English/strings.po | 20 | ||||
-rw-r--r-- | plugin.video.funkmediathek/resources/language/German/strings.po | 20 | ||||
-rw-r--r-- | plugin.video.funkmediathek/resources/lib/__init__.py | 0 | ||||
-rw-r--r-- | plugin.video.funkmediathek/resources/lib/jsonparser.py | 92 | ||||
-rw-r--r-- | plugin.video.funkmediathek/resources/lib/kalturaparser.py | 70 | ||||
-rw-r--r-- | plugin.video.funkmediathek/resources/settings.xml | 6 |
13 files changed, 658 insertions, 0 deletions
diff --git a/plugin.video.funkmediathek/LICENSE.txt b/plugin.video.funkmediathek/LICENSE.txt new file mode 100644 index 0000000..23cb790 --- /dev/null +++ b/plugin.video.funkmediathek/LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., <http://fsf.org/> + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + {description} + Copyright (C) {year} {fullname} + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + {signature of Ty Coon}, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/plugin.video.funkmediathek/addon.xml b/plugin.video.funkmediathek/addon.xml new file mode 100644 index 0000000..d156b4e --- /dev/null +++ b/plugin.video.funkmediathek/addon.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<addon id="plugin.video.funkmediathek" name="Funk Mediathek" version="1.2.0" provider-name="membrane"> + <requires> + <import addon="xbmc.python" version="2.25.0"/> + <import addon="script.module.libmediathek3" version="1.3.0"/> + </requires> + <extension point="xbmc.python.pluginsource" library="default.py"> + <provides>video</provides> + </extension> + <extension point="xbmc.addon.metadata"> + <platform>all</platform> + <language>de</language> + <license>GNU GENERAL PUBLIC LICENSE. Version 2, June 1991</license> + <source>https://github.com/prof-membrane/plugin.video.funkmediathek</source> + <summary lang="en">This is an add-on for www.funk.net</summary> + <description lang="en">This add-on provides access to the German VOD platform www.funk.net. The content is only accessable from Germany.</description> + <summary lang="de">Serien und Videos von www.funk.net</summary> + <description lang="de">Dieses Add-on bietet Zugriff auf die Bibliothek von www.funk.net. Hier gibt es Serien wie z.B. Fargo in FullHD, aber auch Eigenproduktionen von ARD/ZDF. Die Serien sind in der Regel nur innerhalb Deutschlands erreichbar.</description> + <disclaimer lang="de">Dieses Add-on wird von keiner Sendeanstalt unterstützt und ist daher inoffiziell.</disclaimer> + </extension> +</addon> diff --git a/plugin.video.funkmediathek/changelog.txt b/plugin.video.funkmediathek/changelog.txt new file mode 100644 index 0000000..0baf059 --- /dev/null +++ b/plugin.video.funkmediathek/changelog.txt @@ -0,0 +1,37 @@ +1.2.0 +- Removed SSL hack +- Code cleanup +1.1.5 +- Code cleanup +1.1.4 +- Added option to disable SSL checks +1.1.3 +- Fix for missing plots +1.1.2 +- Fix for missing plots +1.1.1 +- Fix for an API quirk +1.1.0 +- Upgraded to libmediathek3 +- Added fanart +- Added icon +- Added description +- Added proper support for the kaltura player +1.0.1 +- Version bump +1.0.0 +- Switched to JSON interface +- Added subtitles +- Added metadata +- Added option to hide formats +0.1.0 +- Cleaned up shows +- Add-on shows every video of a TV show now +- Improved video loadtime +- Misc metadata improvements +- Fixed parsing of some videos +- Added rules to clean up titles +0.0.2 +- Small improvements +0.0.1 +- Initial release
\ No newline at end of file diff --git a/plugin.video.funkmediathek/default.py b/plugin.video.funkmediathek/default.py new file mode 100644 index 0000000..8c6bfb0 --- /dev/null +++ b/plugin.video.funkmediathek/default.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +import libmediathek3 as libMediathek +import xbmc +import xbmcaddon +import xbmcplugin +import resources.lib.jsonparser as jsonParser +import resources.lib.kalturaparser as kalturaParser + +base = 'https://www.funk.net' + +translation = xbmcaddon.Addon().getLocalizedString + +#squashShows = xbmcaddon.Addon().getSetting('squashShows') == 'true' +#preferOV = xbmcaddon.Addon().getSetting('preferOV') == 'true' +skipToSeries = xbmcaddon.Addon().getSetting('skipToSeries') == 'true' + +def main(): + if skipToSeries: + params['url'] = 'https://api.funk.net/v1.0/content/series/?page=0&size=50' + return listDir() + else: + l = [] + l.append({'_name':translation(30503), 'mode':'listDir', '_type': 'dir', 'url':'https://api.funk.net/v1.0/content/formats/?page=0&size=50'}) + l.append({'_name':translation(30504), 'mode':'listDir', '_type': 'dir', 'url':'https://api.funk.net/v1.0/content/series/?page=0&size=50'}) + return l + +def listDir(): + return jsonParser.parse(params['url']) + +def play(): + return kalturaParser.getVideoUrl(params['entryId']) + + +modes = { +'main': main, +'listDir': listDir, +'play': play +} + +def list(): + global params + params = libMediathek.get_params() + global pluginhandle + pluginhandle = int(sys.argv[1]) + + mode = params.get('mode','main') + if mode == 'play': + libMediathek.play(play()) + else: + l = modes.get(mode)() + libMediathek.addEntries(l) + xbmcplugin.endOfDirectory(int(sys.argv[1]),cacheToDisc=True) +list()
\ No newline at end of file diff --git a/plugin.video.funkmediathek/fanart.jpg b/plugin.video.funkmediathek/fanart.jpg Binary files differnew file mode 100644 index 0000000..acdc8ea --- /dev/null +++ b/plugin.video.funkmediathek/fanart.jpg diff --git a/plugin.video.funkmediathek/icon.png b/plugin.video.funkmediathek/icon.png Binary files differnew file mode 100644 index 0000000..e3c0d04 --- /dev/null +++ b/plugin.video.funkmediathek/icon.png diff --git a/plugin.video.funkmediathek/resources/__init__.py b/plugin.video.funkmediathek/resources/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/plugin.video.funkmediathek/resources/__init__.py diff --git a/plugin.video.funkmediathek/resources/language/English/strings.po b/plugin.video.funkmediathek/resources/language/English/strings.po new file mode 100644 index 0000000..8d96a68 --- /dev/null +++ b/plugin.video.funkmediathek/resources/language/English/strings.po @@ -0,0 +1,20 @@ +# KODI Media Center language file +# Addon Name: funkmediathek +# Addon id: script.module.funkmediathek +# Addon version: 1.2.0 +# Addon Provider: membrane +msgid "" +msgstr "" +"Project-Id-Version: XBMC Main\n" + +msgctxt "#30003" +msgid "Skip to series (hide formats)" +msgstr "Skip to series (hide formats)" + +msgctxt "#30503" +msgid "Formats" +msgstr "Formats" + +msgctxt "#30504" +msgid "Series" +msgstr "Series" diff --git a/plugin.video.funkmediathek/resources/language/German/strings.po b/plugin.video.funkmediathek/resources/language/German/strings.po new file mode 100644 index 0000000..a5cea45 --- /dev/null +++ b/plugin.video.funkmediathek/resources/language/German/strings.po @@ -0,0 +1,20 @@ +# KODI Media Center language file +# Addon Name: funkmediathek +# Addon id: script.module.funkmediathek +# Addon version: 1.2.0 +# Addon Provider: membrane +msgid "" +msgstr "" +"Project-Id-Version: XBMC Main\n" + +msgctxt "#30003" +msgid "Skip to series (hide formats)" +msgstr "Springe direkt zu Serien (verstecke Formate)" + +msgctxt "#30503" +msgid "Formats" +msgstr "Formate" + +msgctxt "#30504" +msgid "Series" +msgstr "Serien" diff --git a/plugin.video.funkmediathek/resources/lib/__init__.py b/plugin.video.funkmediathek/resources/lib/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/plugin.video.funkmediathek/resources/lib/__init__.py diff --git a/plugin.video.funkmediathek/resources/lib/jsonparser.py b/plugin.video.funkmediathek/resources/lib/jsonparser.py new file mode 100644 index 0000000..8fac6f3 --- /dev/null +++ b/plugin.video.funkmediathek/resources/lib/jsonparser.py @@ -0,0 +1,92 @@ +# -*- coding: utf-8 -*- +import json +import libmediathek3 as libMediathek +base = 'https://api.funk.net/v1.0' + +auth = '29ad11c93ad19f816de90c1c8ae4ec0354c6b5e4ec5b3965f125248cfa60bfe1' +fanart = libMediathek.fanart + +header = { + 'Authorization':auth[::-1], + 'User-Agent':'okhttp/3.2.0', + 'Accept-Encoding':'gzip', + 'Host':' api.funk.net', + } + +def parse(url): + response = libMediathek.getUrl(url,header) + j = json.loads(response) + l = [] + if 'includes' in j: + part = 'includes' + else: + part = 'data' + for item in j[part]: + if item['type'] == 'series' or item['type'] == 'format': + l.append(_parseSeries(item,item['type'])) + elif item['type'] == 'video': + l.append(_parseVideo(item)) + else: + libMediathek.log('unkown type: '+item['type']) + return l + +def _parseSeries(j,type): + d = {} + if 'name' in j['attributes']: + d['_name'] = j['attributes']['name'] + else: + d['_name'] = j['attributes']['title'] + d['_thumb'] = j['attributes']['thumbnail'] + if type == 'series': + d['_fanart'] = fanart + d['_fanart'] = fanart + if 'description' in j['attributes']: + d['_plot'] = _cleanPlot(j['attributes']['description']) + d['_airedISO8601'] = j['attributes']['createdAt'] + d['url'] = base + '/content/series/' + j['id'] + '?should_filter=false'# + d['_rating'] = str(j['attributes']['kickKeepRatio'] * 10) + d['mode'] = 'listDir' + d['_type'] = 'season' + return d + +def _parseVideo(j): + libMediathek.log(str(j)) + d = {} + d['_name'] = j['attributes']['title'] + + d['_thumb'] = j['attributes']['image']['url'] + if 'text' in j['attributes']: + d['_plot'] = _cleanPlot(j['attributes']['text']) + while '\n\n\n' in d['_plot']: + d['_plot'] = d['_plot'].replace('\n\n\n','\n\n') + d['_duration'] = str(j['attributes']['duration']) + if 'season' in j['attributes']: + d['_season'] = j['attributes']['season'] + if 'episode' in j['attributes']: + d['_episode'] = j['attributes']['episode'] + d['_type'] = 'episode' + else: + d['_type'] = 'video' + + if 'fsk' in j['attributes']: + d['_mpaa'] = 'FSK ' + j['attributes']['fsk'] + + d['_airedISO8601'] = j['attributes']['createdAt'] + + d['url'] = 'https://cdnapisec.kaltura.com/p/1985051/sp/198505100/playManifest/entryId/'+j['attributes']['rootEntryId']+'/flavorIds/0/format/applehttp/protocol/https/a.m3u8' + #d['url'] += '?referrer=aHR0cHM6Ly93d3cuZnVuay5uZXQ=' + + d['entryId'] = j['attributes']['rootEntryId'] + d['mode'] = 'play' + return d + +def _cleanPlot(plot): + plot = plot.replace('<p>','') + plot = plot.replace('</p>','') + plot = plot.replace('<h4>','') + plot = plot.replace('</h4>','') + while ' ' in plot: + plot = plot.replace(' ',' ') + #plot = plot.replace('\n ','') + return plot +
\ No newline at end of file diff --git a/plugin.video.funkmediathek/resources/lib/kalturaparser.py b/plugin.video.funkmediathek/resources/lib/kalturaparser.py new file mode 100644 index 0000000..9a5afc4 --- /dev/null +++ b/plugin.video.funkmediathek/resources/lib/kalturaparser.py @@ -0,0 +1,70 @@ +# -*- coding: utf-8 -*- +import json +import libmediathek3 as libMediathek + +base = 'https://cdnapisec.kaltura.com/api_v3/index.php?service=multirequest' +apiVersion = '3.1' +expiry = '86400' +clientTag = 'kwidget%3Av2.47' +format = '1' +ignoreNull = '1' +action = 'null' +#1: +one_service='session' +one_action='startWidgetSession' +one_widgetId='_1985051' +#kalsig = 'c86ae6f65c1780478e3c4bb1680f6599'#some md5 + +def getVideoUrl(entryId): + url = base + url += '&apiVersion=' + apiVersion + url += '&expiry=' + expiry + url += '&clientTag=' + clientTag + url += '&format=' + format + url += '&ignoreNull=' + ignoreNull + url += '&action=' + action + + n = '1' + url += '&'+n+':service=' + one_service + url += '&'+n+':action=' + one_action + url += '&'+n+':widgetId=' + one_widgetId + + n = '2' + url += '&'+n+':ks=%7B1%3Aresult%3Aks%7D' + #url += '&'+n+':contextDataParams:referrer=http%3A%2F%2Fplayer.kaltura.com%2FkWidget%2Ftests%2FkWidget.getSources.html%23__1985051%2C' + entryId + url += '&'+n+':contextDataParams:referrer=https%3a%2f%2fwww.funk.net' + url += '&'+n+':contextDataParams:objectType=KalturaEntryContextDataParams' + url += '&'+n+':contextDataParams:flavorTags=all' + url += '&'+n+':service=baseentry' + url += '&'+n+':entryId=' + entryId + url += '&'+n+':action=getContextData' + + n = '3' + url += '&'+n+':action=list' + url += '&'+n+':filter:entryIdEqual=' + entryId + url += '&'+n+':filter:objectType=KalturaAssetFilter' + url += '&'+n+':filter:statusEqual=2' + url += '&'+n+':ks=%7B1%3Aresult%3Aks%7D' + url += '&'+n+':pager:pageSize=50' + url += '&'+n+':service=caption_captionasset' + + #url += '&kalsig=' + kalsig + + response = libMediathek.getUrl(url) + libMediathek.log(response) + j = json.loads(response) + d = {} + flavorIds = '' + for flavorAsset in j[1]['flavorAssets']: + flavorIds += flavorAsset['id'] + ',' + videoUrl = 'https://cdnapisec.kaltura.com/p/1985051/sp/198505100/playManifest/entryId/'+entryId+'/flavorIds/'+flavorIds[:-1]+'/format/applehttp/protocol/https/a.m3u8' + videoUrl += '?referrer=aHR0cHM6Ly93d3cuZnVuay5uZXQ=' + d['media'] = [] + + d['media'].append({'url':videoUrl, 'type':'HLS'}) + for object in j[2]['objects']: + d['subtitle'] = [] + lang = object['languageCode'] + subUrl = 'https://cdnsecakmi.kaltura.com/api_v3/index.php/service/caption_captionAsset/action/serve/captionAssetId/' + object['id'] + d['subtitle'].append({'url':subUrl, 'type':'srt', 'lang':lang}) + return d
\ No newline at end of file diff --git a/plugin.video.funkmediathek/resources/settings.xml b/plugin.video.funkmediathek/resources/settings.xml new file mode 100644 index 0000000..1bbaeba --- /dev/null +++ b/plugin.video.funkmediathek/resources/settings.xml @@ -0,0 +1,6 @@ +<settings> + <setting id="skipToSeries" type="bool" label="30003" default="false"/> + <!--<setting id="disablessl" type="bool" label="30301" default="false"/> + <setting id="squashShows" type="bool" label="30001" default="false"/> + <setting id="preferOV" type="bool" label="30002" default="false" enable="!eq(-1,false)" subsetting="true"/>--> +</settings> |