omg... Ich habe wiedermal viel zu kompliziert gedacht...
_timediff.seconds/60 sind die Minuten die ich wollte...
Danke
omg... Ich habe wiedermal viel zu kompliziert gedacht...
_timediff.seconds/60 sind die Minuten die ich wollte...
Danke
das habe ich gelesen nur irgendwie fällt bei mir grad nicht der Groschen wie das aussehen muss..
okay, das halt schon geholfen...
#!/usr/bin/env python
# coding: utf8
from xml.dom import minidom
import urllib
import time
import datetime
import json
from datetime import timedelta
import _strptime
_tvshowstarttime = "20160327T183200"
_tvshowendtime = "20160327T202800"
def get_detail_thetvdb():
_time1 = datetime.datetime.strptime(_tvshowstarttime, "%Y%m%dT%H%M%S")
print _time1
_time2 = datetime.datetime.strptime(_tvshowendtime, "%Y%m%dT%H%M%S")
print _time2
_timediff = _time2 - _time1
print _timediff
get_detail_thetvdb()
Alles anzeigen
gibt folgendes Ergebnis:
jetzt würde ich das Ergebnis gern in Minuten umwandeln...
so, jetzt versuche ich mich mal damit zu beschäftigen...
bei mir müsste ich ja den Stunden und Minuten eine Variable zuordnen
aber das verstehe ich noch nicht ganz...
meine Zeitformat das ich auslese: _tvshowendtime = YYYYmmddHHMMSS
um auch den Tageswechsel zu berücksichtigen müsste ich ja nun den kompletten Zeitstrang berücksichtigen...
aber dass bekomme ich nicht hin mit den variablen
im Grunde wäre es ja:
ende = timedelta(years=%Y, months=%m, days=%d, hours=%H, minutes=%M, seconds=%S)(_tvshowendtime)
aberirgendwie müsste ich ja noch definiren, wie _tvshowtime aufgebaut ist...
wir können diese Unterhaltung ja in den WIP Tread vom Widget verschieben...
diese Ansicht zeigt nur was heute kommt und ich in meiner DB habe chronologisch geordnet...
Der SerienPlaner in seiner hoffentlich späteren Form soll dann so aufgebaut sein wie das NextAired Plugin...
Der Status lässt sich ohne weiteres bei theTVDB abfragen, das ist eigendlich kein Problem...
Das Problem sind hauptsächlich die deutschen Serien, da gibt es nicht so viele informationen... eventuell wäre da
fernsehserien.de noch ne möglichkeit was zu finden...
Perfeckt... Danke, dass war's
hatte ich auch gedacht...
da steht:
<property name="artwork" tag="property" attribute="name|widgetArt" value="Poster">$VAR[HomeWidgetPosterVar]</property>
<variable name="HomeWidgetPosterVar">
<value condition="!IsEmpty(ListItem.Art(poster))">$INFO[ListItem.Art(poster)]</value>
<value condition="!IsEmpty(ListItem.Art(tvshow.poster))">$INFO[ListItem.Art(tvshow.poster)]</value>
<value condition="!IsEmpty(ListItem.Icon)">$INFO[ListItem.Icon]</value> <value>$INFO[ListItem.Art(thumb)]</value>
</variable>
wenn ich aber:
<value condition="StringCompare(Container(9000).ListItem.Property(widgetName),SerienPlaner)">$INFO[Container(8001).ListItem.Property(Poster)]</value>
einfüge... bringt das nicht... dann wird nichts mehr angezeigt...
Hollo zusammen,
Ich habe mal eine Frage zu AEON NOV Silvo.
wenn ich bei einem Widget als Stil: Panel wähle und als Artwork: Poster... wo kann ich dann festlegen, was als Poster angezeigt werden soll...
Ich habe den Poster-path als Item.Property... aber stansdardmäßig wird immer das thumb "angezogen"
nee... so schlim ist das nicht...
ein "early release" sollte in ein, zwei Tagen möglich sein...
Ist aber dann noch alles ohne Datenbank und funktioniert wie TVHighLightsToday...
Ich werd's dann auf Github hochladen...
Aber seit gnädig, sind meine ersten Gehversuche in Python...
Hallo Nerds,
Insperiert von @tdoe und @BJ1 habe ich mich mal daran gesetzt einen SerienPlaner zu entwerfen.
Mich hat schon immer gestört, das das NextAired-Plugin nur für die original erstausstrahlungen funktioniert,
für das deutsche TV gab es sotwas leider nicht... und dann kam tdoe und hat gezeigt, was man für das dt. TV
machen kann... Nachdem ich eine Seite gefunden hatte die alle und ich betone ALLE Serien-Sendetermine im
deutschen TV (mit 14 Tage Vorschau) habe ich mich daran gesetzt mein erstes Python Plugin (abzu)schreiben.
Der Code basiert auf dem ThHighLightsToday Code von @BJ1 und @tdoe...
So und nun mal ein kleiner Vorgeschmack:
Soweit es geht werden nur die Sendedaten von der Internetseite geholt. der Rest kommt von the TheTVDB.
nur wenn dort keine Daten vorhanden sind, werden die details von der Internetseite geholt.
da pro Tag bsp. 400 internationale Serien ausgestrahlt werden dauert das scrapen schon mal ein wenig.
Ich habe noch keine Skinintegration für Confluence gemacht sondern ersteinmal nur für den von mir genutzten Skin...
Mein Plan ist es das ganze denau wie NextAired aufzubauen mit einer Datenbank im Hitergrund, dann spielt die dauer des scrapen keine
Rolle...
Frage ist ob generell interesse an solch einem Plugin besteht?
====================================================================================================================
So, hier ist die Serienplaner V0.0.1
Die besten Ergebnisse erzielt man bei internationalen Serien und Klassikern...
bitte daran denken das der scraper eine ganze weile braucht bis er durch ist es sind bis zu 400 Serien pro Tag...
Eine Confluence integration ist noch nicht dabei...
Ich habe in der Readme aufgeführt welche Propertys zur Verfügung stehen...
Die Methode 'show_select_dialog' steht auch noch nicht zur Verfügung, damit stehe ich irgendwie grad auf Kriegsfuß
Steht im Moment fest auf internationale Serien...
für Ideen und Vorschläge bin immer offen...
====================================================================================================================
ToDo-Liste:
=======================================================================================================================
ich hab noch einmal eine Frage,
wenn ich jetzt versuche die details von der detailURL zu holen klappt das nicht...
details = WLScraper()
details.scrapeDetailPage(getUnicodePage(data.detailURL), 'div class="text"')
data.detailURL ist http://www.wunschliste.de/episode/778623
aber ich bekomme einen Fehler:
Error Type: <type 'exceptions.ValueError'>
Error Contents: unknown url type:
Traceback (most recent call last):
File "G:\KODI-Krypton\portable_data\addons\plugin.program.serienplaner\default.py", line 473, in <module>
scrapeWLPage(category)
File "G:\KODI-Krypton\portable_data\addons\plugin.program.serienplaner\default.py", line 400, in scrapeWLPage
details.scrapeDetailPage(getUnicodePage(data.detailURL), 'div class="text"')
File "G:\KODI-Krypton\portable_data\addons\plugin.program.serienplaner\default.py", line 89, in getUnicodePage
content = unicode(urllib2.urlopen(req).read(), encoding).replace("\\", "")
File "G:\KODI-Krypton\system\python\Lib\urllib2.py", line 127, in urlopen
return _opener.open(url, data, timeout)
File "G:\KODI-Krypton\system\python\Lib\urllib2.py", line 396, in open
protocol = req.get_type()
File "G:\KODI-Krypton\system\python\Lib\urllib2.py", line 258, in get_type
raise ValueError, "unknown url type: %s" % self.__original
ValueError: unknown url type:
Alles anzeigen
unknown url type
so, ich habs gelöst...
EDIT:
jetzt läuft es soweit.... jetzt kann ich mal um die Skinseitige umsetzung kümmern...
Danke, ich probiere mal...
bin auch schon ein wenig weiter...
hab einfach mal die url "per hand" eingesetzt und noch viele kleine Fehler gefunden aber das Ergebnis:
09:39:58 T:1540 DEBUG: [plugin.program.serienplaner 0.0.1]: ID: SP.international.12
09:39:58 T:1540 DEBUG: [plugin.program.serienplaner 0.0.1]: TVShow: Vampire Diaries
09:39:58 T:1540 DEBUG: [plugin.program.serienplaner 0.0.1]: Staffel: 7
09:39:58 T:1540 DEBUG: [plugin.program.serienplaner 0.0.1]: Episode: 2
09:39:58 T:1540 DEBUG: [plugin.program.serienplaner 0.0.1]: Title: Der Phönix-Stein
09:39:58 T:1540 DEBUG: [plugin.program.serienplaner 0.0.1]: Starttime: 20:15
09:39:58 T:1540 DEBUG: [plugin.program.serienplaner 0.0.1]: neueEpisode: NEU
09:39:58 T:1540 DEBUG: [plugin.program.serienplaner 0.0.1]: Channel (SP): sixx
09:39:58 T:1540 DEBUG: [plugin.program.serienplaner 0.0.1]: Channel (PVR): SIXX HD
09:39:58 T:1540 DEBUG: [plugin.program.serienplaner 0.0.1]: Channel logo: image://G%3a%5cKodi%5cSenderlogos%5csixx%20hd.png/
09:39:58 T:1540 DEBUG: [plugin.program.serienplaner 0.0.1]: ChannelID (PVR): 38
09:39:58 T:1540 DEBUG: [plugin.program.serienplaner 0.0.1]: Description: Alaric hat den Phönix-Stein entdeckt und holt sich Bonnies Rat ein. Sie bittet Alaric, den Stein sofort zu vernichten, denn es geht etwas sehr Böses von ihm aus. Allerdings hat er auch wiederbelebende Kräfte, weshalb Alaric es nicht wagt, ihn zu vernichten. Es gelingt ihm, Ryan damit vorübergehend ins Leben zurückzuholen. Unterdessen halten die Häretiker Caroline gefangen und foltern sie. Stefan ist auf dem Weg, sie zu befreien – doch er muss viele Hürden überwinden.
09:39:58 T:1540 DEBUG: [plugin.program.serienplaner 0.0.1]: Rating: 7.3
09:39:58 T:1540 DEBUG: [plugin.program.serienplaner 0.0.1]: Thumb: http://www.thetvdb.com/banners/episodes/95491/5304695.jpg
09:39:58 T:1540 DEBUG: [plugin.program.serienplaner 0.0.1]: FirstAired: 2015-10-15
09:39:58 T:1540 DEBUG: [plugin.program.serienplaner 0.0.1]: Popup: http://www.wunschliste.de/episode/778623
09:39:58 T:1540 DEBUG: [plugin.program.serienplaner 0.0.1]: Watchtype: international
Alles anzeigen
Im Grunde habe ich ja deinen Code den ich abgewandelt habe...
category wird hier definiert:
def categories():
cats = []
for category in SPWatchtypes:
if __addon__.getSetting(category).upper() == 'TRUE': cats.append(category)
return cats
ich schick die mal den kompletten Code per Konversation hier...
ja, das geht... ich bin auch ein wenig weiter...
so kommt ersteinmal keine Fehlermeldung:
def getUnicodePage(url, container=None):
try:
headers = { 'User-Agent' : 'Mozilla/5.0' }
req = urllib2.Request(url, None, headers)
except UnicodeDecodeError:
req = urllib2.urlopen(url)
encoding = 'utf-8'
if "content-type" in req.headers and "charset=" in req.headers['content-type']:
encoding=req.headers['content-type'].split('charset=')[-1]
content = unicode(urllib2.urlopen(req).read(), encoding).replace("\\", "")
if container is None: return content
return content.split(container)
Alles anzeigen
aber:
hier wird ein string für "category" erwartet, richtig?
def scrapeWLPage(category):
url = '%s/%s/0' % (WLURL, category)
writeLog('Start scraping category %s from %s' % (category, url), level=xbmc.LOGDEBUG)
content = getUnicodePage(url, container='<li id="e_')
i = 1
content.pop(0)
blobs = WINDOW.getProperty('SP.%s.blobs' % (category))
if blobs != '':
for idx in range(1, int(blobs) + 1, 1):
WINDOW.clearProperty('SP.%s.%s' % (category, idx))
for container in content:
Alles anzeigen
bei mir ist category aber so definiert
also eine number oder?
wenn ich also aus dem 2. %s ein %d mache kommt...
Error Type: <type 'exceptions.TypeError'>
Error Contents: %d format: a number is required, not str
Traceback (most recent call last):
File "G:\KODI-Krypton\portable_data\addons\plugin.program.serienplaner\default.py", line 469, in <module>
scrapeWLPage(category)
File "G:\KODI-Krypton\portable_data\addons\plugin.program.serienplaner\default.py", line 366, in scrapeWLPage
url = '%s%d/0' % (WLURL, category)
okay, wenn ich das ganze wie folgt änder
def getUnicodePage(url, container=None):
try:
headers = { 'User-Agent' : 'Mozilla/5.0' }
req = urllib2.urlopen(url, None, headers)
except UnicodeDecodeError:
req = urllib2.urlopen(url)
encoding = 'utf-8'
if "content-type" in req.headers and "charset=" in req.headers['content-type']:
encoding=req.headers['content-type'].split('charset=')[-1]
content = unicode(req.read(), encoding).replace("\\", "")
if container is None: return content
return content.split(container)
Alles anzeigen
aber dann kommt folgender Fehler...
Error Type: <type 'exceptions.TypeError'>
Error Contents: a float is required
Traceback (most recent call last):
File "G:\KODI-Krypton\portable_data\addons\plugin.program.serienplaner\default.py", line 469, in <module>
scrapeWLPage(category)
File "G:\KODI-Krypton\portable_data\addons\plugin.program.serienplaner\default.py", line 369, in scrapeWLPage
content = getUnicodePage(url, container='<li id="e_')
File "G:\KODI-Krypton\portable_data\addons\plugin.program.serienplaner\default.py", line 82, in getUnicodePage
req = urllib2.urlopen(url, None, headers)
File "G:\KODI-Krypton\system\python\Lib\urllib2.py", line 127, in urlopen
return _opener.open(url, data, timeout)
File "G:\KODI-Krypton\system\python\Lib\urllib2.py", line 404, in open
response = self._open(req, data)
File "G:\KODI-Krypton\system\python\Lib\urllib2.py", line 422, in _open
'_open', req)
File "G:\KODI-Krypton\system\python\Lib\urllib2.py", line 382, in _call_chain
result = func(*args)
File "G:\KODI-Krypton\system\python\Lib\urllib2.py", line 1214, in http_open
return self.do_open(httplib.HTTPConnection, req)
File "G:\KODI-Krypton\system\python\Lib\urllib2.py", line 1181, in do_open
h.request(req.get_method(), req.get_selector(), req.data, headers)
File "G:\KODI-Krypton\system\python\Lib\httplib.py", line 995, in request
self._send_request(method, url, body, headers)
File "G:\KODI-Krypton\system\python\Lib\httplib.py", line 1029, in _send_request
self.endheaders(body)
File "G:\KODI-Krypton\system\python\Lib\httplib.py", line 991, in endheaders
self._send_output(message_body)
File "G:\KODI-Krypton\system\python\Lib\httplib.py", line 844, in _send_output
self.send(msg)
File "G:\KODI-Krypton\system\python\Lib\httplib.py", line 806, in send
self.connect()
File "G:\KODI-Krypton\system\python\Lib\httplib.py", line 787, in connect
self.timeout, self.source_address)
File "G:\KODI-Krypton\system\python\Lib\socket.py", line 559, in create_connection
sock.settimeout(timeout)
File "G:\KODI-Krypton\system\python\Lib\socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
TypeError: a float is required
-->End of Python script error report<--
Alles anzeigen
ich hab mir jetzt einfach einen Button angelegt mit dem ich das script richtig starten kann...
jetzt bekomme ich einen Error den ich schon mal ganz am Anfang hatte...
die seite möchte nicht von einer Maschiene Angesprochen werden...
darum hatte ich ursprünglich folgendes drin:
def getUnicodePage(url):
headers = { 'User-Agent' : 'Mozilla/5.0' }
req = urllib2.Request(url, None, headers)
return unicode(urllib2.urlopen(req).read(), "utf-8")
aber dass müsste ja auf dein script angepasst werden...
wenn ich auf Programme gehe und mein Scrpt aufrufe und auf ausführen gehe, wird dann nicht das scrapen ausgeführt?
Ich weiss, der Schädel brummt jetzt
schon aber ich möchte es ja auch ganz gern zum laufen bringen...
das sieht also so aus ob bi mir keine Daten gescraped werden...
Ich habe nur folgendes in [definition='1','0']log[/definition] zu stehen...
37 T:5400 INFO: CPythonInvoker(50, G:\KODI-Krypton\portable_data\addons\plugin.program.serienplaner\default.py): script successfully run
19:54:41 T:3800 DEBUG: CPythonInvoker(51, G:\KODI-Krypton\portable_data\addons\plugin.program.serienplaner\default.py): start processing
19:54:41 T:3800 DEBUG: CPythonInvoker(51, G:\KODI-Krypton\portable_data\addons\plugin.program.serienplaner\default.py): the source file to load is "G:\KODI-Krypton\portable_data\addons\plugin.program.serienplaner\default.py"
19:54:41 T:3800 DEBUG: CPythonInvoker(51, G:\KODI-Krypton\portable_data\addons\plugin.program.serienplaner\default.py): setting the Python path to G:\KODI-Krypton\portable_data\addons\plugin.program.serienplaner;G:\KODI-Krypton\system\python\DLLs;G:\KODI-Krypton\system\python\Lib;G:\KODI-Krypton\python27.zip;G:\KODI-Krypton\system\python\lib\plat-win;G:\KODI-Krypton\system\python\lib\lib-tk;G:\KODI-Krypton;G:\KODI-Krypton\system\python;G:\KODI-Krypton\system\python\lib\site-packages
19:54:41 T:3800 DEBUG: CPythonInvoker(51, G:\KODI-Krypton\portable_data\addons\plugin.program.serienplaner\default.py): entering source directory G:\KODI-Krypton\portable_data\addons\plugin.program.serienplaner
19:54:41 T:3800 DEBUG: CPythonInvoker(51, G:\KODI-Krypton\portable_data\addons\plugin.program.serienplaner\default.py): instantiating addon using automatically obtained id of "plugin.program.serienplaner" dependent on version 2.1.0 of the xbmc.python api
19:54:41 T:3800 ERROR: POParser: unable to read PO file header from file: G:\KODI-Krypton\portable_data\addons\plugin.program.serienplaner\resources\language\German\strings.po
19:54:41 T:3800 DEBUG: LocalizeStrings: no strings.po file exist at G:\KODI-Krypton\portable_data\addons\plugin.program.serienplaner\resources\language\German, fallback to strings.xml
19:54:41 T:3800 DEBUG: LocalizeStrings: no translation available in currently set gui language, at path G:\KODI-Krypton\portable_data\addons\plugin.program.serienplaner\resources\language\English
19:54:41 T:3800 DEBUG: [plugin.program.serienplaner 0.0.1]: Methode from external script: None
19:54:41 T:3800 DEBUG: [plugin.program.serienplaner 0.0.1]: Detailurl from external script: None
19:54:41 T:3800 DEBUG: [plugin.program.serienplaner 0.0.1]: pvrid from external script: None
Alles anzeigen
wird sie nicht hier definiert?
blob = {
'id': unicode('SP.%s.%s' % (i, category)),
'tvshow': unicode(data.tvshowname),
'staffel': unicode(data.staffel),
'episode': unicode(data.episode),
'title': unicode(data.title),
'starttime': unicode(data.tvshowstarttime),
'neueepisode': unicode(data.neueepisode),
'channel': unicode(data.channel),
'pvrchannel': unicode(channel),
'logo': unicode(logoURL),
'pvrid': unicode(pvrchannelID),
'description': unicode(details.plot),
'rating': unicode(details.rating),
'thumb': unicode(details.pic_path),
'firstaired': unicode(details.firstaired),
'category': unicode(category),
}
Alles anzeigen