Skript Fehlermeldung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Piquadrat
User
Beiträge: 5
Registriert: Montag 7. Februar 2011, 18:36

Hallo!

Folgendes:
Ich habe ein Skript aus dem Internet aufgegabelt und möchte es verwenden. Ich bin allerdings nicht im Umgang mit Python vertraut und bekomme lediglich eine Fehlermeldung. Eventuell könnt ihr mir weiterhelfen?

Das ist das Skript:

Code: Alles auswählen

from curl import *
import Image, ImageFile, StringIO

curl = 0
mapX = 0
mapY = 0
tileWidth = 336
tileHeight = 248

def prepare():
global curl, mapX, mapY
curl = pycurl.Curl()

# Pretend to be a popular browser. And don’t forget to set up a file to store the cookies, which
# are needed here!
curl.setopt(pycurl.USERAGENT, ‘Mozilla/4.0 (compatible; MSIE 6.0)’)
curl.setopt(pycurl.FOLLOWLOCATION, 1)
curl.setopt(pycurl.COOKIEJAR, ’stadtplan_cookies.txt’)
curl.setopt(pycurl.URL, ‘http://www.fahrinfo-berlin.de/Stadtplan/index’)
curl.setopt(pycurl.HTTPGET, 1)

# Send this initial request and ignore the resulting HTML page. This will create a new session
# on the server.
dev_null = StringIO.StringIO()
curl.setopt(pycurl.WRITEFUNCTION, dev_null.write)
curl.perform()
dev_null.close()

# This is the position on the map at which the BVG application starts
mapX = 26
mapY = 34

def download(x, y):
# If the connection to the server has not yet been established, do it now.
global curl, mapX, mapY
if curl == 0:
prepare()

# Move the map to the desired location by sending fake scroll clicks to the server.
dev_null = StringIO.StringIO()
curl.setopt(pycurl.WRITEFUNCTION, dev_null.write)
print ‘Seeking to ‘ + str(x) + ‘, ‘ + str(y) + ‘… ‘,
while (mapX != x) or (mapY != y):
direction = ”
if y < mapY:
direction = direction + ‘N’
mapY = mapY – 1
elif y > mapY:
direction = direction + ‘S’
mapY = mapY + 1
if x < mapX:
direction = direction + ‘W’
mapX = mapX – 1
elif x > mapX:
direction = direction + ‘E’
mapX = mapX + 1
curl.setopt(pycurl.URL, ‘http://www.fahrinfo-berlin.de/Stadtplan/index?move=’ + direction + ‘&’)
curl.perform()
dev_null.close()

# Now that the map is at the correct location, download the map image.
print ‘Downloading map image… ‘,
curl.setopt(pycurl.URL, ‘http://www.fahrinfo-berlin.de/Stadtplan/index/image?ref=0′)
imageParser = ImageFile.Parser()
curl.setopt(pycurl.WRITEFUNCTION, imageParser.feed)
curl.perform()

# As the map images contain a scale in the bottom left corner, we’ll just use the top left quarter of it.
print ‘Decoding and cropping image’
mapImage = imageParser.close()
mapTile = mapImage.crop((0, 0, tileWidth, tileHeight))

return mapTile

# Define which part of the map we want to download and create a huge image in which the individual tiles will
# be composited.
box = (0, 0, 60, 67)
completeMap = Image.new(‘RGB’, (tileWidth * (box[2] – box[0]), tileHeight * (box[3] – box[1])))

# Download each tiny map image and composite it onto the huge map image.
for y in range(box[1], box[3]):
for x in range(box[0], box[2]):
tile = download(x, y)
completeMap.paste(tile, ((x – box[0]) * tileWidth, (y – box[1]) * tileHeight))

# Save the whole map after each row. Better to be save than sorry!
completeMap.save(‘plan.png’)

# Close the connection to the server. We’re done here!
curl.close()
Dieses habe ich in eine DATEI.py gepackt und Python mittels Python 2.7.1 Windows Installer installiert. Nun meine Frage: Die Datei muss doch in der Shell ausgeführt werden, nicht? Wenn ich die Datei ausführe bekomme ich die Fehlermeldung "expected an indeted block". Muss ich jetzt alle entsprechenden Zeilen einrücken? Was mache ich falsch?

Sorry, bin wie gesagt nicht mit Python vertraut und möchte nur dieses eine Skript zum Laufen bringen. ;)

Danke im Voraus!
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Piquadrat hat geschrieben:Wenn ich die Datei ausführe bekomme ich die Fehlermeldung "expected an indeted block". Muss ich jetzt alle entsprechenden Zeilen einrücken? Was mache ich falsch?
Ja, richtig. Du machst falsch, dass die Zeilen nicht eingerückt sind.

Und vermutlich brauchst du noch ein Modul wie ``pycurl``, weil das in Zeile 1 importiert wird. Ebenso die Python Imaging Library (PIL), die in Zeile 2 importiert wird.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Piquadrat
User
Beiträge: 5
Registriert: Montag 7. Februar 2011, 18:36

So weit so gut. Nächstes Problem: Die Backticks sind nicht in der richtigen Kodierung. Kann das sein? Beim Ausführen meckert er bei den ` und ´.
Das Skript wurde so zur Verfügung gestellt, also sollte es doch eigentlich (wie oben angegeben) schon einmal funktioniert haben. Gehe ich da recht der Annahme? Welche Standards muss ich noch beachten und was hat es mit den Modulen auf sich? Analog zu Libraries a lá .net?
problembär

Ich denke, das sind einfach Strings in single-quotes: 'Hallo'
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Piquadrat hat geschrieben:Das Skript wurde so zur Verfügung gestellt, also sollte es doch eigentlich (wie oben angegeben) schon einmal funktioniert haben. Gehe ich da recht der Annahme?
Nein, in der Form wie du es gepostet hast, kann es nie funktioniert haben.
Piquadrat hat geschrieben:Welche Standards muss ich noch beachten und was hat es mit den Modulen auf sich? Analog zu Libraries a lá .net?
Ich kenne mich jetzt nicht genau mit .NET aus, aber ich vermute dass es durchaus vergleichbar ist.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Piquadrat
User
Beiträge: 5
Registriert: Montag 7. Februar 2011, 18:36

Alles klar.

Zu den Backticks: Im HTMLQuelltext der Seite auf dem ich das Script fand ist wird tatsächlich der Links- und Rechtsbacktick verwendet (Unicode &#8216;). Wundert mich. Kann es sein, dass das damit zutun hat, dass der PhytonViewer nicht funktioniert?

Siehe http://wp1173987.wp090.webpack.hosteuro ... age_id=630 (da hab ich das Skript her)

Habe das Skript nun bereinigt. Tabs und Backticks sind nun korrekt. Beim ersten elif meckert er, dass er die Syntax nicht kennt "invalid syntax". Jemand Vorschläge?

Außerdem: Danke schonmal für die bisherige Hilfe! :)
BlackJack

Es sieht so aus als wenn das Skript von hier stammt: http://wp1173987.wp090.webpack.hosteuro ... age_id=630

Da hat jemand beim Umgang mit Wordpress Mist gebaut und die Blogsoftware hat sämtliche Einrückung verschluckt und die Anführungszeichen durch "schöne" typographische Anführungszeichen ersetzt. Und damit den Quelltext ziemlich unbrauchbar gemacht.

Am besten den Autor von der Seite mal fragen ob er das Skript noch einmal richtig ins Netz stellen kann.

Andererseits mag die BVG das sicher nicht so gerne wenn man ihre Kartendaten abschnorchelt.
Piquadrat
User
Beiträge: 5
Registriert: Montag 7. Februar 2011, 18:36

BlackJack hat geschrieben:Es sieht so aus als wenn das Skript von hier stammt: http://wp1173987.wp090.webpack.hosteuro ... age_id=630

Da hat jemand beim Umgang mit Wordpress Mist gebaut und die Blogsoftware hat sämtliche Einrückung verschluckt und die Anführungszeichen durch "schöne" typographische Anführungszeichen ersetzt. Und damit den Quelltext ziemlich unbrauchbar gemacht.

Am besten den Autor von der Seite mal fragen ob er das Skript noch einmal richtig ins Netz stellen kann.

Heyho!
Jo, der BBCode scheint irgendwie nicht gefruchtet zu haben, das war auch meine Vermutung. Der Autor der Seite hat keine Kontaktdaten angegeben. Leider. :(


Problem von oben ist nun gelöst. Ebenso alle "-" ersetzt. Nun folgende (abschließende) Fehlermeldung, die ich nicht zu entziffern weiß:

*** 'return' outside function BVG.py, line73

Was hat es mit dem return mapTile auf sich?

Oh man. :/
BlackJack hat geschrieben:Andererseits mag die BVG das sicher nicht so gerne wenn man ihre Kartendaten abschnorchelt.
Da ist bestimmt was dran. Ich denke die ~150MB werden sie verkraften. :P
BlackJack

@Piquadrat: Offensichtlich hast Du das ``return`` dort nicht zur passenden Funktion eingerückt. Du musst alle Einrückungen wieder herstellen, das heisst Du musst verstehen was das Programm im Detail tun soll. Und dazu musst Du auch Python mindestens soweit können, dass Dir die Bedeutung dieser Fehlermeldung klar ist.

Es geht der BVG sicher auch nicht um 150 MiB sondern um das Kartenmaterial selbst und dass die meisten Internetdienste in ihren AGBs eine Klausel haben, dass man den Dienst nicht einfach so automatisiert abgrasen darf.
Piquadrat
User
Beiträge: 5
Registriert: Montag 7. Februar 2011, 18:36

Skript steht soweit, im fehlt nur noch das Modul curl. Gibt es dazu präzise Dokumentation? Finde leider kein StepByStep. Spielt es eine Rolle ob ich Pycurl, curl oder liburl oder wie sie alle heißen mögen installiere?

Fehlermeldung:
Traceback (most recent call last):
File "C:\Python27\BVGNEW.py", line 1, in <module>
from curl import *
File "C:\Python27\curl\__init__.py", line 9, in <module>
import os, sys, urllib, exceptions, mimetools, pycurl
ImportError: DLL load failed: Das angegebene Modul wurde nicht gefunden.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

BlackJack hat geschrieben:Es geht der BVG sicher auch nicht um 150 MiB sondern um das Kartenmaterial selbst und dass die meisten Internetdienste in ihren AGBs eine Klausel haben, dass man den Dienst nicht einfach so automatisiert abgrasen darf.
Als Alternative sei hier OpenStreetMap genannt, wo es wohl kein Problem ist, wenn man die Tiles haben will.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten