Jäljempänä tulevaan skriptiin on lisätty debugfilen luomistoiminto
Jäljempänä tuleva skripti on ratkaisuehdotus ongelmaan, mutta sitä ei ole vielä testattu ja varmistettu toimivaksi
HUOM! Tämän viestin lopussa on korjattu skripti jonka pitäisi ratkaista kyseinen ongelma
Ihan ensimmäiseksi huomautan että tuossa skriptissä on JavaScriptiä Python skriptin seassa, ja se ongelma vaikuttaisi olevan siinä JavaScriptissä. Jos otsikoksi vaihtaisi esim. "JavaScript/Python osaajan taitoja kaivataan" niin voisi houkutella enemmän asiantuntevia neuvojia paikalle.
...Mutta katsotaan jos tämä hoituisi ilman enempiä asiantuntijoita. Katsoin tuota hieman ja minulle tulee mieleen pari vaihtoehtoa miksi se ei toimi.
Ensimmäinen olisi että tuo "Katso tallenne" -nappula on jotenkin muuttunut, eikä sen HTML title -attribuutti ole enää ihan prikulleen 'Katso tallenne', niinkuin koodi olettaa. Tämän vian korjaamiseksi täytyy riviltä 98 seuraava koodipätkä:
if (link[ii].title == 'Katso tallenne') {var wget = link[ii].href + '&wget=true';}\n\
muuttaa tällaiseksi:
if (link[ii].title.indexOf('Katso') != -1) {var wget = link[ii].href + '&wget=true';}\n\
eli kokeile etsiä tuo ensimmäinen rivi koodista ja muuttaa se tuon alemman mukaiseksi. Onnistuu ihan leikkaamalla ja liimaamalla ja tekstieditorilla.
Tuo korjaus ei siis enää luota siihen että linkin title on 'Katso tallenne', vaan se vain katsoo että linkistä löytyy ylipäätään tuo sana 'Katso'.
Toinen mahdollisuus on että noiden elementtien järjestys on muuttunut. Tuon vian korjaamiseen täytyisi seuraavat rivit (alkaen riviltä 97):
for (var ii = 0; ii < link.length; ii++) {\n\
if (link[ii].title == 'Katso tallenne') {var wget = link[ii].href + '&wget=true';}\n\
if (link[ii].href == 'http://www.fi/') {link[ii].href = wget;}\n\
}\n\
muuttaa tällaisiksi:
for (var ii = 0; ii < link.length; ii++) {\n\
if (link[ii].title == 'Katso tallenne') {var wget = link[ii].href + '&wget=true';}\n\
}\n\
for (var ii = 0; ii < link.length; ii++) {\n\
if (link[ii].href == 'http://www.fi/') {link[ii].href = wget;}\n\
}\n\
En oikein itse pysty tämän toimivuutta testaamaan, joten en voi olla varma toimiiko tämä tai tuliko minulle jotain kirjoitusvirheitä tms., joten kokeile näitä ja raportoi takaisin miten onnistui.
Tässä nyt kokonainen skripti, jonka pitäisi toimia. Tämän voi kopioida ja tallentaa .py -päätteiseen tiedostoon, ja sen jälkeen kyseisen tiedoston voi suorittaa.
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
#################### HUOMIO HUOMIO HUOMIO ####################
#
# Testattu Python 2.6.2 ja sitä vastaavalla PyQt4 paketilla
#
#
# Windows asennus, ohjelmat asennettu oletusasetuksin
# Python http://python.org/ftp/python/2.6.2/python-2.6.2.msi
# PyQt4 http://www.riverbankcomputing.com/static/Downloads/PyQt4/PyQt-Py2.6-gpl-4.5.4-1.exe
#
#
# Linux asennus
# sudo apt-get install python-qt4
# Linuxissa scripti pitää tallentaa muodosssa Western (ISO-8859-15) jotta selaimen alt="Siirrä tallenne" näkyy oikein
#
#
# Mac OS asennus
# Varmaankin toimii, joku vois testailla
#
#
# Konfigurointi
# Muuta username ja password
# Muuta kohtien # WINDOWS ASETUKSET tai # LINUX ASETUKSET jälkeisiä rivejä (vlc, wget, directory)
#
#
#################### HUOMIO HUOMIO HUOMIO ####################
import os, sys
from PyQt4 import QtCore, QtGui, QtWebKit
if os.name == 'nt': import subprocess
username = ''
password = ''
if os.name == 'nt':
# WINDOWS ASETUKSET
vlc = '"C:\\Program Files\\VideoLAN\\VLC\\vlc.exe" --sub-language fi --vout-filter deinterlace --deinterlace-mode blend '
wget = '"c:\\apu\\wget.exe" -t0 -c -S --progress=dot:mega -owget.log '
directory = 'c:\\video\\saunavisio\\'
else:
# LINUX ASETUKSET
vlc = 'vlc --sub-language fi --vout-filter deinterlace --deinterlace-mode blend '
wget = 'wget -t0 -c -S --progress=dot:mega -owget.log '
directory = 'video/saunavisio/'
png_vlc = "data:image/png;base64,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"
png_wget = "data:image/png;base64,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"
if directory != '':
if os.path.isfile(directory) == False:
if os.path.isdir(directory) == False:
os.makedirs(directory)
class SaunaBrowser(QtGui.QWidget):
def __init__(self, parent = None):
QtGui.QWidget.__init__(self, parent)
self.resize(1016, 734)
screen = QtGui.QDesktopWidget().screenGeometry()
size = self.geometry()
self.move((screen.width() - size.width()) / 2, (screen.height() - size.height()) / 2)
self.setWindowTitle("SaunaBrowser")
self.web = QtWebKit.QWebView(self)
self.web.setZoomFactor(1.0)
QtCore.QObject.connect(self.web, QtCore.SIGNAL("loadFinished(bool)"), self.loadFinished)
self.web.load(QtCore.QUrl("http://www.saunavisio.fi/tvrecorder/index.sl?username=" + username + "&password=" + password))
layout = QtGui.QVBoxLayout(self)
layout.setMargin(0)
layout.addWidget(self.web)
def loadFinished(self, ok):
url1 = unicode(self.web.url().toString())
self.web.page().mainFrame().evaluateJavaScript("$('table[class=tablemain]').css('width', '100%')")
self.web.page().mainFrame().evaluateJavaScript("$('td[class=footerinfo]').parent().remove()")
if url1.find("http://www.saunavisio.fi/tvrecorder/ready.sl", 0) != -1:
self.web.page().mainFrame().evaluateJavaScript("$('img[alt=Katso]').attr('src', '" + png_vlc + "')")
self.web.page().mainFrame().evaluateJavaScript("$('a[class=movetip]').parent().css('width', '95px')")
js = """
var row = document.getElementsByTagName('tr');
if(!done) {
for (var i = 0; i < row.length; i++) {
var length = row[i].className.length;
if (row[i].className.substring(length, length - 11) == 'programview') {
var link = row[i].getElementsByTagName('a');
for (var ii = 0; ii < link.length; ii++) {
if (link[ii].title == "Katso tallenne" ) {
var wget = link[ii].href + '&wget=true';
var parent = link[ii].parentNode;
var child = document.createElement('a');
child.href=wget;
child.title=wget;
var image = document.createElement('img');
image.border = '0';
image.alt = "Lataa";
image.setAttribute('src', """ + chr(34) + png_wget + chr(34) + """);
child.appendChild(image);
parent.appendChild(child);
}
}
}
}
}
var done=true;
"""
self.web.page().mainFrame().evaluateJavaScript(js)
if url1.find("http://www.saunavisio.fi/tvrecorder/program.sl?programid=", 0) != -1:
if url1.find("view=true", 0) != -1:
html = unicode(self.web.page().mainFrame().toHtml())
html = str(html.encode("utf-8"))
self.web.page().mainFrame().evaluateJavaScript("$('object').remove()")
i1 = html.find("doGo('", 0)
if i1 != -1:
i2 = html.find("'", i1 + 7)
if i2 != -1:
url2 = chr(34) + html[i1 + 6:i2] + chr(34)
url2 = url2.replace("tvmedia11.saunalahti.fi", "tvmedia12.saunalahti.fi")
self.web.load(QtCore.QUrl("http://www.saunavisio.fi/tvrecorder/ready.sl"))
aika = ""
i1 = html.find("<b>Aika</b>: ", 0)
if i1 != -1:
i2 = html.find("<br>", i1 + 14)
if i2 != -1:
aika = html[i1 + 13:i2]
vvvv = aika[6:10]
kk = aika[3:5]
pp = aika[0:2]
hh = aika[11:13]
mm = aika[14:16]
aika = vvvv + kk + pp + "_" + hh + mm
ohjelma = "tunnistamaton"
i1 = html.find("<b>Ohjelma</b>: ", 0)
if i1 != -1:
i2 = html.find("<br>", i1 + 17)
if i2 != -1:
ohjelma = html[i1 + 16:i2]
if aika != "":
ohjelma = aika + "_" + ohjelma + ".ts"
else:
ohjelma = ohjelma + ".ts"
ohjelma = ohjelma.replace(chr(32), "_") #
ohjelma = ohjelma.replace(chr(34), "") # "
ohjelma = ohjelma.replace(chr(40), "") # (
ohjelma = ohjelma.replace(chr(41), "") # )
ohjelma = ohjelma.replace(chr(42), "") # *
ohjelma = ohjelma.replace(chr(47), "") # /
ohjelma = ohjelma.replace(chr(58), "") # :
ohjelma = ohjelma.replace(chr(60), "") # <
ohjelma = ohjelma.replace(chr(62), "") # >
ohjelma = ohjelma.replace(chr(63), "") # ?
ohjelma = ohjelma.replace(chr(92), "") # \
ohjelma = ohjelma.replace(chr(124), "") # |
if os.name == 'nt': ohjelma = ohjelma.decode('utf-8').encode('latin1')
if url1.find("wget=true", 0) != -1:
if os.name == 'nt':
subprocess.Popen(wget + url2 + " -O" + directory + ohjelma)
else:
os.system(wget + url2 + " -O" + directory + ohjelma + "&")
else:
if os.name == 'nt':
subprocess.Popen(vlc + url2)
else:
os.system(vlc + url2 + "&")
app = QtGui.QApplication(sys.argv)
saunabrowser = SaunaBrowser()
#saunabrowser.show()
saunabrowser.showMaximized()
sys.exit(app.exec_())