Latitude
(Themenstarter)
Anmeldungsdatum: 10. November 2012
Beiträge: 196
|
Ich tippe mal auf "Die Welt-Wand", c't 15/2015, S. 76 ff.
Oh ja... Richtig getippt 😀 Das c't-Häftchen is einfach mega gut^^ Was in dem Artikel leider nicht gesagt/erwähnt wird, ist dass der Google-Server nach ca. 120-130 Anfragen die IP sperrt wegen 'Automatisierter Abfrage' - als Fehlermeldung im Terminal erscheint dann nur 'Forbidden'. Ich wollte dies erst lösen indem ich ein Delay von einer random Sekundenzahl zwischen 0 und 15 einfüge. Hat nicht funktioniert ☹ 😢 Ich habe dann aber nochmals geGooglet und den Befehl von FritzBox/Skripte | curl "http://fritz.box:49000/upnp/control/WANIPConn1" -H "Content-Type: text/xml; charset="utf-8"" -H "SoapAction:urn:schemas-upnp-org:service:WANIPConnection:1#ForceTermination" -d "<?xml version='1.0' encoding='utf-8'?> <s:Envelope s:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'> <s:Body> <u:ForceTermination xmlns:u='urn:schemas-upnp-org:service:WANIPConnection:1' /> </s:Body> </s:Envelope>"
|
verwendet und in die Erste Schleife eingefügt. Dadurch wechselt der Rounter nach jeder vollständigen X-Achse selbstständig die IP. Da Dieser wechsel nder IP laut Web-Interface der Fritzbox max. 30 Sekunden dauert habe ich nach dem Befehl noch "Sleep 30" eingefügt und es hat prima funktioniert... Was mich aber im Momment etwas irritiert: In dem Artikel sagt der Autor etwas von 1,1GB Bilddaten, bei einem "scale" von 2 - ich habe als scale 4 verwendet (also sollte jedes Bild ja größer sein - was es auch ist (statt 512x512 ist es 1.024x1.024)) Allerdings habe ich nur 620MB Bilder (es sind 14.065) Ich hoffe mal das zusammensetzten funktioniert wenigstens beim ersten Versuch - wobei... währe ja irgendwie langweilig wenn immer alles sofot funktionieren würde 😬 😛 NACHTRAG: Ich habe gerade die VM neugestartet und jetzt zeigt er mir 1,2GB an 😀 Allerdings ist meine Maus nicht da wo sie mir angezeigt wird... Komisch...
|
Latitude
(Themenstarter)
Anmeldungsdatum: 10. November 2012
Beiträge: 196
|
Soo, ich habe ja jetzt alle Bilder. Aber das mit dem zusammensetzen klappt nicht - die VM schmiert einfach ab und mein Laptop, auf dem ich gerade extra Ubuntu im Dualboot installiert habe hängt sich auf (i7-4thGen, 16GB RAM, SSD) Darf man hier nach dem Befehl fragen oder muss ich dazu jetzt extra ein neues Theama eröffnen? Ach, was solls. Ich frag einfach mal: Ich verstehe nicht ob die Syntax so wie sie im C't Heft steht bei mir funktioniert. Ich weiß nicht für was die ganzen Sachen stehen. Auch "http://www.imagemagick.org/Usage/montage/" kann mir da nicht wirklich helfen da dort nur steht WIE es bei welchem Sachverhalt geht, aber nicht was der Befehl einzeln bedeutet Befehl aus c't:
montage 'tiles/'*.png -tile 128x120 -geometry +0+0 worldmap.png Also so wie ich das Interpretiere: "tiles/*.png" - Ist der Pfad zu den Bildern (bei mir sind das .jpeg's also muss ich das ändern) "-tile" - Keine Ahnung "128x120" sind die Werte der X und Y-Achsen (bei mir 127x122 - warum keine ahnung, is aber so) "-geometry +0+0" - Keine Ahnung, in den Beispielen steht da was von +2+2 bei einem 2x2 Bild... "worldmap.png" ist das fertige Bild, hoff ich
Naja, aber die beiden "Keine Ahnung's" sind eben das Problem :/ Ich schreibe ungern einfach nur ab, wenn will ich etwas dabei lernen Bearbeitet von jug: Unser Forum kann auch Listen
|
jug
Ehemalige
Anmeldungsdatum: 19. März 2007
Beiträge: 12335
Wohnort: Berlin
|
Latitude schrieb: Darf man hier nach dem Befehl fragen oder muss ich dazu jetzt extra ein neues Theama eröffnen? Ach, was solls. Ich frag einfach mal:
Nein, das gehört nun wirklich nicht hier rein. ~jug
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11185
Wohnort: München
|
Latitude schrieb: Ich verstehe nicht ob die Syntax so wie sie im C't Heft steht bei mir funktioniert. Ich weiß nicht für was die ganzen Sachen stehen. Auch "http://www.imagemagick.org/Usage/montage/" kann mir da nicht wirklich helfen da dort nur steht WIE es bei welchem Sachverhalt geht, aber nicht was der Befehl einzeln bedeutet
Dann schau doch mal hier: http://www.imagemagick.org/www/montage.html
|
Latitude
(Themenstarter)
Anmeldungsdatum: 10. November 2012
Beiträge: 196
|
Naja, ich weiß leider immernoch nicht ob ich jetzt bei -geometry +0+0 oder etwas anderes einsetzen muss... Aber da jug ja meinte ich darf hier nicht weiter danach fragen hab ich einen neuen Thread eröffnet
|
Latitude
(Themenstarter)
Anmeldungsdatum: 10. November 2012
Beiträge: 196
|
Noch eine letzte Frage: ich habe mich nun entschieden (weil es extrem viele Bilder sind, die VM extrem Langsam und ich die zum ordentlichen Sortieren, Zählen, Verwalten bla bla blaaa - kann ja leider nicht alle auf einmal zusammenfügen) nochmals downloaden sollte - diesmal mit geringerem Scale^^ - entschied ich mich den vorgeschlagenen Python3 Skript zu verwenden. Allerdings ist da wieder das Problem das Google die IP wegen zu vielen Anfragen in zu wenig Zeit sperrt. Ich wollte dies wieder mit dem Befehl | curl "http://fritz.box:49000/upnp/control/WANIPConn1" -H "Content-Type: text/xml; charset="utf-8"" -H "SoapAction:urn:schemas-upnp-org:service:WANIPConnection:1#ForceTermination" -d "<?xml version='1.0' encoding='utf-8'?> <s:Envelope s:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'> <s:Body> <u:ForceTermination xmlns:u='urn:schemas-upnp-org:service:WANIPConnection:1' /> </s:Body> </s:Envelope>"
|
kompensieren. Allerdings funktioniert der Befehl unter Python3 nichtmehr - "invalid syntax" wird bei "Envelope" angezeigt ☹ Wie mach ich das jetzt ab blödesten?
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11185
Wohnort: München
|
Latitude schrieb: Allerdings funktioniert der Befehl unter Python3 nichtmehr - "invalid syntax" wird bei "Envelope" angezeigt ☹ Wie mach ich das jetzt ab blödesten?
Zeig doch mal den relevanten Abschnitt aus deinem Code, der das aufruft.
|
Latitude
(Themenstarter)
Anmeldungsdatum: 10. November 2012
Beiträge: 196
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | import random
import time
import urllib.request
max_x = 122
max_y = 127
for x in range(1, max_x + 1):
curl "http://fritz.box:49000/upnp/control/WANIPConn1" -H "Content-Type: text/xml; charset="utf-8"" -H "SoapAction:urn:schemas-upnp-org:service:WANIPConnection:1#ForceTermination" -d "<?xml version='1.0' encoding='utf-8'?> <s:Envelope s:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'> <s:Body> <u:ForceTermination xmlns:u='urn:schemas-upnp-org:service:WANIPConnection:1' /> </s:Body> </s:Envelope>"
for y in range(1, max_y + 1):
url = "https://mt0.google.com/vt?lyrs=p&scale=2&x={x}&y={y}&z=7&hl=loc".format(x=x, y=y)
filename = "{x:04d}x{y:04d}.png".format(x=x, y=y)
print("downloading {url} as {filename}".format(url=url, filename=filename))
with open(filename, "wb") as f, urllib.request.urlopen(url) as response:
f.write(response.read())
#time.sleep(random.uniform(0, 15))
|
Bei dem Bash-Skript hat das einfache einfügen bestens Funktioniert... Die Fehlermeldung:
|
alien@alien-VirtualBox:~$ python3 '/home/alien/Schreibtisch/python3-Fritz.py'
File "/home/alien/Schreibtisch/python3-Fritz.py", line 13
curl "http://fritz.box:49000/upnp/control/WANIPConn1" -H "Content-Type: text/xml; charset="utf-8"" -H "SoapAction:urn:schemas-upnp-org:service:WANIPConnection:1#ForceTermination" -d "<?xml version='1.0' encoding='utf-8'?> <s:Envelope s:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'> <s:Body> <u:ForceTermination xmlns:u='urn:schemas-upnp-org:service:WANIPConnection:1' /> </s:Body> </s:Envelope>"
^
SyntaxError: invalid syntax
alien@alien-VirtualBox:~$
|
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11185
Wohnort: München
|
Naja um einen Shell-Befehl in einem Python-Skript aufzurufen ist ein bisschen mehr nötig als den curl-Befehl zu kopieren... Prinzipiell könnte man sich da mit subprocess behelfen, aber schöner ist es doch das gleich direkt in Python zu implementieren.
Hier ist ein Beispiel, wie man das in Python 2 lösen könnte: http://homework.nwsnet.de/releases/ef29/ Für Python3 sieht das Ganze dann so aus: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 |
import random
import socket
import time
import urllib.request
from contextlib import closing
max_x = 122
max_y = 127
def reconnect(host='fritz.box', port=49000, debug=False):
# Prepare HTTP data to send.
http_body = '\r\n'.join((
'<?xml version="1.0" encoding="utf-8"?>',
'<s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">',
' <s:Body>',
' <u:ForceTermination xmlns:u="urn:schemas-upnp-org:service:WANIPConnection:1"/>',
' </s:Body>',
'</s:Envelope>'))
http_data = '\r\n'.join((
'POST /upnp/control/WANIPConn1 HTTP/1.1',
'Host: %s:%d' % (host, port),
'SoapAction: urn:schemas-upnp-org:service:WANIPConnection:1#ForceTermination',
'Content-Type: text/xml; charset="utf-8"',
'Content-Length: %d' % len(http_body),
'',
http_body))
# Connect to the box and submit SOAP data via HTTP.
with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as s:
s.connect((host, port))
s.send(http_data.encode('utf-8'))
if debug:
data = s.recv(1024)
print('Received:', data)
for x in range(1, max_x + 1):
reconnect()
for y in range(1, max_y + 1):
url = "https://mt0.google.com/vt?lyrs=p&scale=2&x={x}&y={y}&z=7&hl=loc".format(x=x, y=y)
filename = "{x:04d}x{y:04d}.png".format(x=x, y=y)
print("downloading {url} as {filename}".format(url=url, filename=filename))
with open(filename, "wb") as f, urllib.request.urlopen(url) as response:
f.write(response.read())
#time.sleep(random.uniform(0, 15))
|
|
Latitude
(Themenstarter)
Anmeldungsdatum: 10. November 2012
Beiträge: 196
|
Das mit dem Subprocess habe ich schon gelesen, hat bei mir aber nie funktioniert. Keine Ahnung warum... Vertmutlich hab ich mich zu blöd angestellt 😀 😎 Aber wenn das jetzt so mit Python3 funktioniert find ich das echt super spitze und kann mich nur herzlichst bedanken 😉 Ich hoffe jetzt einfach nur das es nicht zu weiteren Komplikationen kommt 😬
|