Exemplo n.º 1
0
 def handleTextfeldList(self, textList):
     logger.info("TextfeldList: text=%s", str(textList))
     for text in textList:
         if len(text) == 0:
             continue
         logger.info("Text: text=%s", text)
         self.scribus.insertText(text + '\n')
Exemplo n.º 2
0
 def handleTextfeldList(self, stil, textList):
     logger.info("TextfeldList: stil=%s text=%s", stil, str(textList))
     for text in textList:
         if len(text) == 0:
             continue
         logger.info("Text: stil=%s text=%s", stil, text)
         self.insertText(text+'\n', stil)
Exemplo n.º 3
0
 def handleAbfahrt(self, abfahrt):
     # abfahrt = (type, beginning, loc)
     typ = abfahrt[0]
     uhrzeit = abfahrt[1]
     ort = abfahrt[2]
     logger.info("Abfahrt: type=%s uhrzeit=%s ort=%s", typ, uhrzeit, ort)
     self.insertText(typ + (': '+uhrzeit if uhrzeit != "" else "")+', '+ort+'\n', 'Radtour_start')
Exemplo n.º 4
0
def fetch_max_property_id_scraped():
    logger.info('Checking the last property scraped...')
    try:
        max_property_id = models.NTypeUnclaimedProperty.objects.latest('property_id').property_id
    except ObjectDoesNotExist:
        logger.info('No Data Exists. Setting Default to 1')
        max_property_id = 1
    return max_property_id
Exemplo n.º 5
0
    def doLogin(self):
        headers = self.headers
        headers["Content-Type"] = "application/x-www-form-urlencoded"
        retCode, retData = self.doPOST(
            "https://kyfw.12306.cn/otn/login/userLogin",
            parse.urlencode({"_json_att": ""}),
            headers=headers)
        # logger.debug("retCode:[{}], retData:[{}]".format(retCode, retData.decode("utf-8", errors="ignore")))

        logger.info("尝试 uamtk 验证...")
        headers[
            "Content-Type"] = "application/x-www-form-urlencoded; charset=UTF-8"

        ok = False
        while not ok:
            retCode, retData = self.doPOST(
                "https://kyfw.12306.cn/passport/web/auth/uamtk",
                parse.urlencode({"appid": "otn"}),
                headers=headers)
            if retCode == 200:
                logger.debug("retCode:[{}], retData:[{}]".format(
                    retCode, retData.decode("utf-8")))
                try:
                    result = json.loads(retData.decode("utf-8"))
                    if result["result_code"] == 0:
                        logger.info("uamtk 验证通过")
                        ok = True
                        self.tokenParams["newapptk"] = result["newapptk"]
                    else:
                        return result["result_message"]
                except:
                    pass

        logger.info("尝试 uamauthclient 验证...")

        ok = False
        while not ok:
            retCode, retData = self.doPOST(
                "https://kyfw.12306.cn/otn/uamauthclient",
                parse.urlencode({"tk": self.tokenParams["newapptk"]}),
                headers=headers)
            if retCode == 200:
                logger.debug("retCode:[{}], retData:[{}]".format(
                    retCode, retData.decode("utf-8")))
                try:
                    result = json.loads(retData.decode("utf-8"))
                    if result["result_code"] == 0:
                        logger.info("uamauthclient 验证通过")
                        ok = True
                        logger.info("成功登录12306, 用户名[{}], 可以买票了".format(
                            result["username"]))
                    else:
                        return result["result_message"]
                except:
                    pass

        self.afterLogin()
Exemplo n.º 6
0
 def handleTel(self, Name):
     telfestnetz = Name.getElementsByTagName("TelFestnetz")
     telmobil = Name.getElementsByTagName("TelMobil")
     if len(telfestnetz)!=0:
         logger.info("Tel: festnetz=%s", telfestnetz[0].firstChild.data)
         self.insertText(' ('+telfestnetz[0].firstChild.data+')', None)
     if len(telmobil)!=0:
         logger.info("Tel: mobil=%s", telmobil[0].firstChild.data)
         self.insertText(' ('+telmobil[0].firstChild.data+')', None, self.textbox)
Exemplo n.º 7
0
 def expTitel(self, event, _):
     if self.linkType == "Frontend":
         self.url = event.getFrontendLink()
     elif self.linkType == "Backend":
         self.url = event.getBackendLink()
     else:
         self.url = None
     logger.info("Titel: " + event.getTitel())
     return event.getTitel()
Exemplo n.º 8
0
 def __init__(self, eventJS, eventJSSearch, eventServer):
     self.eventJS = eventJS
     self.eventJSSearch = eventJSSearch
     self.eventServer = eventServer
     self.tourLocations = eventJS.get("tourLocations")
     self.itemTags = eventJS.get("itemTags")
     self.eventItem = eventJS.get("eventItem")
     self.titel = self.eventItem.get("title").strip()
     logger.info("eventItemId %s %s", self.titel,
                 self.eventItem.get("eventItemId"))
Exemplo n.º 9
0
 def doPOST(self, url, data, headers=None):
     if headers is None: headers = self.headers
     req = request.Request(url, headers=headers)
     logger.debug("cookie: [{}]".format(self._cj))
     logger.info("POST: [{}] ,data [{}]".format(url, data))
     try:
         with My12306._opener.open(req, data=data.encode("utf-8")) as f:
             return f.status, f.read()
     except:
         return 400, iter("")
Exemplo n.º 10
0
def fetch_details_all():
    unprocessed_opps = Summary.query.filter_by(is_processed=False).all()
    for i, unprocessed_opp in enumerate(unprocessed_opps):
        logger.info('Fetching %s of %s: %s' %
                    (i + 1, len(unprocessed_opps), unprocessed_opp.url))
        fetch_details_single(unprocessed_opp.url, unprocessed_opp.state,
                             unprocessed_opp.category,
                             unprocessed_opp.category_id)
        unprocessed_opp.is_processed = True
        unprocessed_opp.date_processed = datetime.now()
        session.commit()
Exemplo n.º 11
0
 def doGET(self, url, data=None, headers=None):
     if data is not None:
         url = url + "?" + data
     logger.debug("cookie: [{}]".format(self._cj))
     logger.info("GET: [{}]".format(url))
     if headers is None: headers = self.headers
     req = request.Request(url, headers=headers)
     try:
         with My12306._opener.open(req) as f:
             return f.status, f.read()
     except:
         return 400, iter("")
Exemplo n.º 12
0
 def expTitel(self, event, _):
     if self.linkType == "Frontend":
         self.url = event.getFrontendLink()
     elif self.linkType == "Backend":
         self.url = event.getBackendLink()
     else:
         self.url = None
     titel = event.getTitel()
     if self.pageNr is not None:
         return titel  # called from evalToc
     logger.info("Titel: %s URL: %s", titel, self.url)
     run = copy.copy(self.run)
     run.pstyle = "MD_P_REGULAR"
     run.cstyle = "MD_C_TOC"  # put the eventId in an invisble font before the titel, for the toc
     run.text = "_evtid_:" + event.getEventItemId() + STX + titel + ETX
     return [run, titel]
Exemplo n.º 13
0
    def calcNummern(self):
        # too bad we base numbers on kategorie and radtyp,which we cannot get from the search result
        self.alleTouren.sort(key=lambda x: x.getDatumRaw())  # sortieren nach Datum
        yyyy = ""
        logger.info("Begin calcNummern")
        for tour in self.alleTouren:
            datum = tour.getDatumRaw()
            if datum[0:4] != yyyy:
                yyyy = datum[0:4]
                tnum = 100
                rnum = 300
                mnum = 400
                mtnum = 600
            radTyp = tour.getRadTyp()
            kategorie = tour.getKategorie()
            if kategorie == "Mehrtagestour":
                num = mtnum
                mtnum += 1
            elif radTyp == "Rennrad":
                num = rnum
                rnum += 1
            elif radTyp == "Mountainbike":
                num = mnum
                mnum += 1
            else:
                num = tnum
                tnum += 1
            tour.eventNummer = str(num)

        self.alleTermine.sort(key=lambda x: x.getDatumRaw())  # sortieren nach Datum
        yyyy = ""
        for termin in self.alleTermine:
            datum = termin.getDatumRaw()
            if datum[0:4] != yyyy:
                yyyy = datum[0:4]
                tnum = 700
            num = tnum
            tnum += 1
            termin.eventNummer = str(num)
        logger.info("End calcNummern")
Exemplo n.º 14
0
 def checkCaptcha(self):
     ok = False
     g = self.getCaptchaImg()
     g.send(None)
     while not ok:
         # g = self.getCaptchaImg()
         posInfo = self.getPosInfo()
         captchaForm = {
             "answer": posInfo,
             "login_site": "E",
             "rand": "sjrand",
         }
         logger.debug(captchaForm)
         retCode, retData = self.doPOST(self._captchaChk,
                                        parse.urlencode(captchaForm))
         logger.info("retCode:[{}]".format(retCode))
         if retCode == 200:
             try:
                 result = json.loads(retData.decode("utf-8"))
                 logger.info("retData:[{}]".format(result))
                 if result["result_code"] == "4":
                     ok = True
                     break
             except:
                 pass
         g.send(None)
     g.close()
     logger.info("验证码校验成功, 尝试登陆")
Exemplo n.º 15
0
 def checkUser(self, user="******", passwd="123456"):
     loginForm = {
         "username": user,
         "password": passwd,
         "appid": "otn",
     }
     logger.info("发送登录数据: {}".format(loginForm))
     ok = False
     while not ok:
         retCode, retData = self.doPOST(self._loginURL,
                                        parse.urlencode(loginForm))
         if retCode == 200:
             logger.debug(retData.decode("utf-8"))
             try:
                 result = json.loads(retData.decode("utf-8"))
                 if result["result_code"] == 0:
                     logger.info("用户名和密码验证通过")
                     ok = True
                     self.tokenParams["tk"] = result["uamtk"]
                 else:
                     logger.info(result["result_message"])
                     sys.exit(1)
             except json.decoder.JSONDecodeError as e:
                 logger.debug("json parse failed: {}".format(e))
                 time.sleep(2)
             except UnicodeDecodeError as e:
                 logger.debug("[{}]".format(e))
Exemplo n.º 16
0
    def handleTermin(self, termin):
        try:
            titel = termin.getTitel()
            logger.info("Title %s", titel)
            kategorie = termin.getKategorie()
            datum = termin.getDatum()[0]
            logger.info("terminTyp %s datum %s", kategorie, datum)

            zeiten = termin.getAbfahrten()
            if len(zeiten) == 0:
                raise ValueError("keine Anfangszeit für Termin %s", titel)
            logger.info("zeiten %s ", str(zeiten))

            beschreibung = termin.getBeschreibung(False)
            logger.info("beschreibung %s", beschreibung)
            zusatzinfo = termin.getZusatzInfo()
            logger.info("zusatzinfo %s", str(zusatzinfo))

        except Exception as e:
            logger.exception("Fehler im Termin '%s': %s", titel, e)
            return

        print("{} - {}".format(
            titel, kategorie))  # terminTyp z.B. Stammtisch, entbehrlich?
        print("{}".format(datum))
        for zeit in zeiten:
            if zeit[1] != "":
                # print("${}: {} Uhr; {}".format(zeit[0], zeit[1], zeit[2]))
                print("{} Uhr; {}".format(zeit[1], zeit[2]))
            else:
                # print("${}: {}".format(zeit[0], zeit[2]))
                print("{}".format(zeit[2]))
        print(beschreibung)
        for info in zusatzinfo:
            if len(info) == 0:
                continue
            print(info)
        print()
Exemplo n.º 17
0
    def getEvents(self, unitKey, start, end, typ):
        unit = "Alles" if unitKey is None or unitKey == "" else unitKey
        startYear = start[0:4]

        with open(self.fn, "r", encoding="utf-8") as f:
            f = XMLFilter(f)
            xmlt = parse(f)
        n, d = parse_element(xmlt)
        jsRoot = elimText(d)
        # jsonPath = "xml2.json"
        # with open(jsonPath, "w") as jsonFile:
        #     json.dump(jsRoot, jsonFile, indent=4)
        js = jsRoot.get("ExportEventItemList")
        js = js.get("EventItems")
        items = js.get("ExportEventItem")
        events = []
        if len(items) == 0:
            return events
        for item in iter(items):
            # item["imagePreview"] = ""  # save space
            titel = item.get("Title")
            if titel is None:
                logger.error("Kein Titel für den Event %s", str(item))
                continue
            if item.get("IsCancelled") != "Nein":
                logger.info("Event %s ist gecancelt", titel)
                continue
            if typ != "Alles" and item.get("EventType") != typ:
                continue
            beginning = item.get("Beginning")
            if beginning is None:
                logger.error("Kein Beginn für den Event %s", titel)
                continue
            begDate = beginning[0:4]
            if begDate < start[0:4] or begDate > end[0:4]:
                continue
            ev = XmlEvent(item)
            if ev.isTermin():
                self.alleTermine.append(ev)
            else:
                self.alleTouren.append(ev)
            begDate = event.convertToMEZOrMSZ(beginning)[0:10]
            if begDate < start or begDate > end:
                logger.info("event " + titel + " not in timerange")
                continue
            # add other filter conditions here
            logger.info("event " + titel + " OK")
            self.events[ev.getEventItemId()] = ev
        return self.events.values()
Exemplo n.º 18
0
    def getCaptchaImg(self):
        while True:
            captchaImgData = {
                "login_site": "E",
                "module": "login",
                "rand": "sjrand",
                random.random(): ""
            }
            retCode, retData = self.doGET(self._captchaImg,
                                          parse.urlencode(captchaImgData))
            logger.info("retCode:{}".format(retCode))

            if retCode == 200:
                png = os.path.join(self._tmp, "captcha.png")
                logger.info("保存图片为:{}".format(png))
                with open(png, "wb") as fw:
                    fw.write(retData)
            try:
                img = Image.open(png)
            except:
                logger.info("未获取到验证码,重新获取...")
                continue
            yield img.show()
Exemplo n.º 19
0
 def insertText(self, text):
     logger.info(text)
     print(text, end="")
Exemplo n.º 20
0
 def handleTextfeld(self, textelement):
     logger.info("Textfeld: text=%s", textelement)
     if textelement is not None:
         self.scribus.insertText(textelement + '\n')
Exemplo n.º 21
0
 def nothingFound(self):
     logger.info("Nichts gefunden")
     print("Nichts gefunden")
Exemplo n.º 22
0
#!/usr/local/bin/python3
from time import strftime, localtime, sleep
from pmu import recordHands
import os
from config import PMULogFolder, mainPlayer
from myLogger import logger
from multiprocessing import Process

currentFolder = strftime("%Y%m%d", localtime())

logger.warning("DuduTrackerPMULiveRecorder is started ...")
logger.info("CurrentFolder : " + currentFolder)


def readLines(file, pos):
    file = open(file, "r", encoding='utf8')
    file.seek(pos)
    lines = file.readlines()
    pos = file.tell()
    file.close()
    sleep(1)
    return (lines, pos)


def parseFile(PMULogFile):
    pos = 0
    while True:
        result = readLines(PMULogFile, pos)
        lines = result[0]
        pos = result[1]
Exemplo n.º 23
0
    def handleTour(self, tour):
        try:
            titel = tour.getTitel()
            logger.info("Title %s", titel)
            tourNummer = tour.getNummer()
            radTyp = tour.getRadTyp()
            kategorie = tour.getKategorie()
            datum = tour.getDatum()[0]
            logger.info("tourNummer %s radTyp %s kategorie %s datum %s",
                        tourNummer, radTyp, kategorie, datum)

            abfahrten = tour.getAbfahrten()
            if len(abfahrten) == 0:
                raise ValueError("kein Startpunkt in tour %s", titel)
            logger.info("abfahrten %s ", str(abfahrten))
            abfahrten = "\n".join(["{}: {} Uhr; {}".format(
                abfahrt[0], abfahrt[1], abfahrt[2]) for abfahrt in abfahrten])
            beschreibung = tour.getBeschreibung(False)
            logger.info("beschreibung %s", beschreibung)
            kurzbeschreibung = tour.getKurzbeschreibung()
            logger.info("kurzbeschreibung %s", kurzbeschreibung)
            zusatzinfo = tour.getZusatzInfo()
            logger.info("zusatzinfo %s", str(zusatzinfo))
            zusatzinfo = "\n".join(zusatzinfo)
            schwierigkeit = schwierigkeitMap[tour.getSchwierigkeit()]
            logger.info("schwierigkeit %s", schwierigkeit)
            strecke = tour.getStrecke()
            if strecke == "0 km":
                logger.error("Fehler: Tour %s hat keine Tourlänge", titel)
            else:
                logger.info("strecke %s", strecke)
            hoehenmeter = tour.getHoehenmeter()
            character = tour.getCharacter()

            if kategorie == 'Mehrtagestour':
                enddatum = tour.getEndDatum()[0]
                logger.info("enddatum %s", enddatum)
            else:
                enddatum = ""

            tourLeiter = tour.getPersonen()
            logger.info("tourLeiter %s", str(tourLeiter))
            if len(tourLeiter) == 0:
                logger.error("Fehler: Tour %s hat keinen Tourleiter", titel)
            tourLeiter = ",".join(tourLeiter)

        except Exception as e:
            logger.exception("Fehler in der Tour '%s': %s", titel, e)
            return

        row = {
            "Typ": "Radtour", "Titel": titel, "Nummer": tourNummer,
            "Radtyp": radTyp, "Tourtyp": kategorie,
            "Datum": datum, "Endedatum": enddatum,
            "Tourlänge": strecke, "Schwierigkeit": schwierigkeit,
            "Höhenmeter": hoehenmeter, "Charakter": character,
            "Abfahrten": abfahrten, "Kurzbeschreibung": kurzbeschreibung,
            "Beschreibung": beschreibung,
            "ZusatzInfo": zusatzinfo, "Tourleiter": tourLeiter}
        self.writer.writerow(row)
Exemplo n.º 24
0
    def handleTermin(self, tour):
        try:
            titel = tour.getTitel()
            logger.info("Title %s", titel)
            kategorie = tour.getKategorie()
            datum = tour.getDatum()[0]
            logger.info("kategorie %s datum %s", kategorie, datum)

            zeiten = tour.getAbfahrten()
            if len(zeiten) == 0:
                raise ValueError("keine Anfangszeit für Termin %s", titel)
            logger.info("zeiten %s ", str(zeiten))
            zeiten = "\n".join(["{}: {} Uhr; {}".format(
                zeit[0], zeit[1], zeit[2]) for zeit in zeiten])
            beschreibung = tour.getBeschreibung(False)
            logger.info("beschreibung %s", beschreibung)
            kurzbeschreibung = tour.getKurzbeschreibung()
            logger.info("kurzbeschreibung %s", kurzbeschreibung)
            zusatzinfo = tour.getZusatzInfo()
            zusatzinfo = "\n".join(zusatzinfo)
            logger.info("zusatzinfo %s", str(zusatzinfo))

        except Exception as e:
            logger.exception("Fehler im Termin '%s': %s", titel, e)
            return

        row = {
            "Typ": "Termin",
            "Titel": titel,
            "Tourtyp": kategorie,
            "Datum": datum,
            "Abfahrten": zeiten,
            "Kurzbeschreibung": kurzbeschreibung,
            "Beschreibung": beschreibung,
            "ZusatzInfo": zusatzinfo}
        self.writer.writerow(row)
Exemplo n.º 25
0
def main():
    logger.info('Fetching Summaries...')
    siteEvents.fetch_summaries()

    logger.info('Fetching Details...')
    siteEvents.fetch_details_all()
Exemplo n.º 26
0
def main():
    if is_running():
        logger.info('Still running, exit!')
        sys.exit(0)

    last_fail_id = -1
    try:
        logger.info('Starting Scraper...')
        max_property_id = fetch_max_property_id_scraped()
        property_id = max_property_id

        not_found_count = 0
        while True:
            property_id += 1
            logger.info('Fetching Property %s' % property_id)

            try:
                res = scrape_single_property(property_id)
            except requests.ConnectionError:
                property_id -= 1
                logger.error("Connection error, sleep 10 minutes...")
                time.sleep(600)
                continue

            if res == -1:
                logger.info("Doesnt Exist")

                if int(math.fabs(last_fail_id-property_id)) == 1:
                    not_found_count += 1
                else:
                    not_found_count = 1
                last_fail_id = property_id

            if not_found_count > 50000:
                logger.info("That's all folks!")
                break
    except:
        logger.exception(sys.exc_info())
    finally:
        logger.info('Done!')
Exemplo n.º 27
0
 def __init__(self, eventItem):
     self.eventItem = eventItem
     self.tourLocations = eventItem.get("TourLocations")
     self.titel = self.eventItem.get("Title").strip()
     self.eventNummer = 0
     logger.info("eventItemId %s %s", self.titel, self.getEventItemId())
Exemplo n.º 28
0
 def handleName(self, name):
     logger.info("Name: name=%s", name)
     self.scribus.insertText(name)
Exemplo n.º 29
0
 def handleTitel(self, tt):
     logger.info("Titel: titel=%s", tt)
     self.scribus.insertText(tt + '\n')
Exemplo n.º 30
0
    def handleTour(self, tour):
        try:
            self.scribus.insertText('\n')
            titel = tour.getTitel()
            logger.info("Title %s", titel)
            datum = tour.getDatum()[0]
            logger.info("datum %s", datum)

            abfahrten = tour.getAbfahrten()
            if len(abfahrten) == 0:
                raise ValueError("kein Startpunkt in tour %s", titel)
            logger.info("abfahrten %s ", str(abfahrten))

            beschreibung = tour.getBeschreibung(False)
            logger.info("beschreibung %s", beschreibung)
            zusatzinfo = tour.getZusatzInfo()
            logger.info("zusatzinfo %s", str(zusatzinfo))
            kategorie = tour.getKategorie()
            radTyp = tour.getRadTyp()
            logger.info("kategorie %s radTyp %s", kategorie, radTyp)
            if kategorie == "Feierabendtour":
                schwierigkeit = "F"
            elif radTyp == "Rennrad":
                schwierigkeit = "RR"
            elif radTyp == "Mountainbike":
                schwierigkeit = "MTB"
            else:
                schwierigkeit = str(tour.getSchwierigkeit())
                if schwierigkeit == "0":
                    schwierigkeit = "1"
                if "1" <= schwierigkeit <= "5":
                    schwierigkeit = "*" * int(schwierigkeit)
            logger.info("schwierigkeit %s", schwierigkeit)
            strecke = tour.getStrecke()
            if strecke == "0 km":
                logger.error("Fehler: Tour %s hat keine Tourlänge", titel)
            else:
                logger.info("strecke %s", strecke)

            if kategorie == 'Mehrtagestour':
                enddatum = tour.getEndDatum()[0]
                logger.info("enddatum %s", enddatum)
            personen = tour.getPersonen()

            logger.info("personen %s", str(personen))
            if len(personen) == 0:
                logger.error("Tour %s hat keinen Tourleiter", titel)

        except Exception as e:
            logger.error("Fehler in der Tour %s: %s", titel, e)
            return

        if kategorie == 'Mehrtagestour':
            self.handleKopfzeileMehrtage(datum, enddatum, kategorie,
                                         schwierigkeit, strecke)
        else:
            self.handleKopfzeile(datum, kategorie, schwierigkeit, strecke)
        self.handleTitel(titel)
        for abfahrt in abfahrten:
            self.handleAbfahrt(abfahrt)
        self.handleTextfeld(beschreibung)
        self.handleTourenleiter(personen)
        self.handleTextfeldList(zusatzinfo)
Exemplo n.º 31
0
 def handleKopfzeileMehrtage(self, anfang, ende, kat, schwierig, strecke):
     logger.info("Mehrtage: anfang=%s ende=%s kat=%s schwere=%s strecke=%s",
                 anfang, ende, kat, schwierig, strecke)
     self.scribus.insertText(anfang + ' bis ' + ende + ':\n')
     self.scribus.insertText('	' + kat + '	' + schwierig + '	' + strecke +
                             '\n')
Exemplo n.º 32
0
 def handleKopfzeile(self, dat, kat, schwierig, strecke):
     logger.info("Kopfzeile: dat=%s kat=%s schwere=%s strecke=%s", dat, kat,
                 schwierig, strecke)
     self.scribus.insertText(dat + ':	' + kat + '	' + schwierig + '	' +
                             strecke + '\n')