Seite 1 von 1

Skript Fehlermeldung

Verfasst: Montag 7. Februar 2011, 18:44
von Piquadrat
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!

Re: Skript Fehlermeldung

Verfasst: Montag 7. Februar 2011, 18:49
von Leonidas
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.

Re: Skript Fehlermeldung

Verfasst: Montag 7. Februar 2011, 18:52
von Piquadrat
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?

Re: Skript Fehlermeldung

Verfasst: Montag 7. Februar 2011, 19:03
von problembär
Ich denke, das sind einfach Strings in single-quotes: 'Hallo'

Re: Skript Fehlermeldung

Verfasst: Montag 7. Februar 2011, 19:06
von Leonidas
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.

Re: Skript Fehlermeldung

Verfasst: Montag 7. Februar 2011, 19:16
von Piquadrat
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! :)

Re: Skript Fehlermeldung

Verfasst: Montag 7. Februar 2011, 19:22
von 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.

Re: Skript Fehlermeldung

Verfasst: Montag 7. Februar 2011, 19:26
von Piquadrat
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

Re: Skript Fehlermeldung

Verfasst: Montag 7. Februar 2011, 19:44
von 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.

Re: Skript Fehlermeldung

Verfasst: Montag 7. Februar 2011, 20:07
von Piquadrat
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.

Re: Skript Fehlermeldung

Verfasst: Montag 7. Februar 2011, 20:19
von Leonidas
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.