ICS download im Browser = OK. Per Makro nur begrenzt OK

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Benutzeravatar
balu
********
Beiträge: 3810
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

ICS download im Browser = OK. Per Makro nur begrenzt OK

Beitrag von balu »

Hallo Leude! :-)

Mir geht es darum, das ich mittels FILECOPY in einem Makro ICS Dateien downloaden will. Und prinzipiel funktioniert das auch.

Doch jetzt kommt das große aber.

ABER
das funzt nicht auf jeder Internet-Seite!!

Im Detail.
Fährt man mit der Maus über einen dementsprechenden Link, so kann man unten im Browser die download Adresse sehen. Kommt darauf an das dies im Browser nicht deaktviert ist.
Wenn die gewünschte Datei auch noch die Dateiendung ".ics" hat, ist ja alles bestens.

Klickt man nun diesen Link an, so popt ein kleines Fenster auf das eine bestimmte Aktion von einem verlangt (speichern oder öffnen mit ...).

Und je nach Browser kann man in diesem Fenster bestimmte Informationen lesen, wie z.B.:
- Name der Datei
- WWW Adresse
- Dateigröße

Bei einem klick auf "speichern" wird dies ausgeführt. Kein Problem bis hier, denn das folgt jetzt.

Wenn der zuvor erwähnte downloadlink im Browser nicht die Dateiendung ".ics" hat, sondern irgend etwas anderes wie z.B.:

"ical4.php?land=1&type=1&year=2022"

so ist das wohl auf dem ersten Blick keine ICS-Datei, aber wenn man dennoch draufklickt wird das vorhin erwähnte Pop-Up Fenster erscheinen und man kann dort lesen, das es sich um eine ICS-Datei handelt. Klickt man nun auf "speichern", so wird das ausgeführt.

So viel dazu.

Kommen wir nun zu dem FILECOPY-Problem.

Ist der downloadlink mit der Dateiendumg ".ics" versehen, so kann man mit FILECOPY die Datei "downloaden".
Aber ohne eindeutige Dateiendung funktioniert das leider nicht. FILECOPY gibt dann die Fehlermeldung raus:

"Pfad nicht gefunden"

Ich habe eine Beispieldatei angehängt. Dort könnt ihr selber die eine oder andere von mir ausgesuchte Internetseite testen.
Doch dazu muss an der Stelle neben:
"Das lokale Datei-Verzeichnis mit Dateiname.ics-->"
eingetragen werden.

Dann neben:
"WWW-Adresse auswählen --->"
ein paar auswählen und testen.

Dann den download-Butten drücken.

Ich habe ein paar PRINT-Befehle eingebaut die Auakunft über Erfolg oder Misserfolg geben.

Unten rechts sind die ausgewählten WWW-Seiten anklickbar um zu überprüfen was dann geschieht.

Meine Fragen lauten:

a)
Kann man FILECOPY irgendwie dazu bringen auch Dateien ohne eindeutige Dateiendung zu kopieren?

b)
Welche alternativen gibt es in StarBasic?

c)
Geht das eventuell mit der Schlange (Python) einfacher und/oder leichter?


Ich bedanke mich schonmal für Eure Geduld meinen Text durchzulesen.
Und ich freue mich schon auf Eure Antworten :-)

AOO 4.1.13



Gruß
balu
Dateianhänge
FILECOPY_Arbeitsbeispiel_02.ods
(20.78 KiB) 100-mal heruntergeladen
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: ICS download im Browser = OK. Per Makro nur begrenzt OK

Beitrag von F3K Total »

Hallo Balu,
ich hatte mich aus anderen Gründen, Navikarten herunterladen, mal mit dem Thema beschäftigt.
FileCopy hat nicht funktioniert.
Ich habe nun ein Basic Makro, was eine .bat Datei erzeugt. die dann mit Windows Powershell die Daten herunterlädt.
Kannst du dir ja mal ansehen.
Zwei Dateien, beide in einen Ordner legen, und dann den Button "Herunterladen" in der Calc-Datei drücken.
Es erscheint ein Powershell-Fenster, das den Fortschritt zeigt, in dem gemeinsamen Ordner wird ein Jahresordner angelegt, in den die .ics Datein des Jahres geschrieben werden.

Gruß R
Dateianhänge
Balu.zip
(15.98 KiB) 62-mal heruntergeladen
Karolus
********
Beiträge: 7440
Registriert: Mo, 02.01.2006 19:48

Re: ICS download im Browser = OK. Per Makro nur begrenzt OK

Beitrag von Karolus »

Hallo Balu

Ich antworte mal auf Punkt C:
Ja unbedingt … und zwar Betriebssystemunabhängig und ohne indirektes Basic-geschwurbel um in ausführbare Batch-dateien zu schreiben … ? was würde passieren bei Pfad|URL-namen mit Umläüten ??
aber andererseits hast du jetzt eine für dein Windows und dein AOO eine Lösung - damit erübrigt sich für dich die Frage nach python ohnehin!

apropos Schlange: Nein - der Name der Sprache wurde eigentlich aus dem Titel der Sketch-serie Monty Python and the Flying Circus kreiert!

@Rik (F3K Total): gibts in Windows(Powershell) nicht sowas wie wget oder curl ?
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: ICS download im Browser = OK. Per Makro nur begrenzt OK

Beitrag von F3K Total »

Guten Morgen Karolus,
Karolus hat geschrieben:
  1. Ja unbedingt … und zwar Betriebssystemunabhängig und ohne indirektes Basic-geschwurbel um in ausführbare Batch-dateien zu schreiben … ? was würde passieren bei Pfad|URL-namen mit Umläüten ??
  2. aber andererseits hast du jetzt eine für dein Windows und dein AOO eine Lösung - damit erübrigt sich für dich die Frage nach python ohnehin!
  3. @Rik (F3K Total): gibts in Windows(Powershell) nicht sowas wie wget oder curl ?
zu...
  1. Da hast du natürlich Recht, hast dir vermutlich meine Datei angesehen, funktioniert nur mit "sauberen Pfaden". Ich kann, wie du weißt, leider kein Python. Auf das G-Wort hättest du auch verzichten dürfen.
  2. eben nicht!
  3. Kann ich nicht sagen, ich habe mir den Code, den meine Basicvariante erzeugt, irgendwo zusammengesucht, eben aus dem Grund weil FILECOPY nicht funktioniert hat.
Also kurz und gut, wenn du da eine betriebssystemunabhängige Alternative in Phyton anbieten würdest, wäre ich dir dankbar.
Denn ich nutze ja auch Linux, um mich ggf. bald von Windows komplett zu trennen.
PS: Stehe auf Monty Python ;-) ... ala ich bin Brian, und meine Frau ist auch Brian ...

Beste Grüße von R
Zuletzt geändert von F3K Total am Sa, 15.10.2022 13:39, insgesamt 1-mal geändert.
Karolus
********
Beiträge: 7440
Registriert: Mo, 02.01.2006 19:48

Re: ICS download im Browser = OK. Per Makro nur begrenzt OK

Beitrag von Karolus »

Hallo … Brian…?

1. da g-Wort ist allgemein in Bezug Basic gemeint…ansonsten gibts bei deinem Code nix zu meckern…was API-sachen betrifft hab ich schon jede Menge Code von dir abgeschrieben. und an den fehlenden phyton-kenntnissen kannst du noch arbeiten →python.

2. Hab ich gemeint in Bezug zu deiner batch-Lösung… ich vermute sie wird funktionieren.
Also kurz und gut, wenn du da eine betriebssystemunabhängige Alternative in Phyton anbieten würdest, wäre ich dir dankbar.
Denn ich nutze ja auch Linux, um mich ggf. bald von Windows komplett zu trennen.
Freut mich, und ich fang mal einem Screenshot direkt aus jupyter notebook an.
ics_import2.png
ics_import2.png (86.06 KiB) 1958 mal betrachtet
requests ist eine gern benutze third-party-lib … rich auch aber nicht essentiell fürs Thema.
Was wäre denn eine Lösung: eine .ics - Datei oder nicht gleich besser etwas für alle Bundesländer für alle Jahre von bsplw. 2022 bis 2025 ?
Anschlussfrage: Sollen die dann auch gleich in Calc inportiert werden – wenn ja ? in welcher Struktur?
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Karolus
********
Beiträge: 7440
Registriert: Mo, 02.01.2006 19:48

Re: ICS download im Browser = OK. Per Makro nur begrenzt OK

Beitrag von Karolus »

Hallo
Bitte den Code vorsichtig benutzen, bei zu vielen Zugriffen von der gleichen Addresse blockiert die Seite den vollständigen Download
Hier mal ein komplettes Beispiel (python ab ~3.5, mit requests ) Ferien termine für 16 Bundesländer und 4 Jahre in den Ordner ~/Downloads/ferien/

Code: Alles auswählen

from pathlib import Path
from requests import get    


def write_file(p, content):
    with open(p, "w") as ics:
        ics.write(content)
        
def main(*_):        
    outpath = Path().home() / "Downloads" / "ferien"
    baseurl = "https://www.ferienwiki.de/exports/ferien/"    #"2023/de/"
    laender = ['baden-wuerttemberg',
                 'bayern',
                 'berlin',
                 'brandenburg',
                 'bremen',
                 'hamburg',
                 'hessen',
                 'mecklenburg-vorpommern',
                 'niedersachsen',
                 'nordrhein-westfalen',
                 'rheinland-pfalz',
                 'saarland',
                 'sachsen',
                 'sachsen-anhalt',
                 'schleswig-holstein',
                 'thueringen']
    
    jahre = [2022,2023,2024,2025]

    for jahr in jahre:
        for land in laender:
            response = get(f"{baseurl}{jahr}/de/{land}.ics")
            name = response.headers["Content-Disposition"].split("=")[-1]
            name = name.strip('"')
            p = outpath / name
            write_file(p, response.text)
Zuletzt geändert von Karolus am Sa, 15.10.2022 15:30, insgesamt 1-mal geändert.
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Karolus
********
Beiträge: 7440
Registriert: Mo, 02.01.2006 19:48

Re: ICS download im Browser = OK. Per Makro nur begrenzt OK

Beitrag von Karolus »

Hallo
mit itertools.product sehen die letzen Zeilen auch noch etwas aufgeräumter aus:

Code: Alles auswählen

from pathlib import Path
from requests import get 
from itertools import product


def write_file(p, content):
    with open(p, "w") as ics:
        ics.write(content)
        
def main(*_):        
    outpath = Path().home() / "Downloads" / "ferien"
    baseurl = "https://www.ferienwiki.de/exports/ferien/"    #"2023/de/"
    laender = ['baden-wuerttemberg',
                 'bayern',
                 'berlin',
                 'brandenburg',
                 'bremen',
                 'hamburg',
                 'hessen',
                 'mecklenburg-vorpommern',
                 'niedersachsen',
                 'nordrhein-westfalen',
                 'rheinland-pfalz',
                 'saarland',
                 'sachsen',
                 'sachsen-anhalt',
                 'schleswig-holstein',
                 'thueringen']
    
    jahre = [2022,2023,2024,2025]

    for jahr, land in product(jahre,laender):
        response = get(f"{baseurl}{jahr}/de/{land}.ics")
        name = response.headers["Content-Disposition"].split("=")[-1]
        name = name.strip('"')
        p = outpath / name.strip('"')
        write_file(p, response.text)
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: ICS download im Browser = OK. Per Makro nur begrenzt OK

Beitrag von F3K Total »

Hallo Karolus,
ich bekomme es nicht hin, habe in dem Ordner, in dem ich die Datei main.py gespeichert habe, unter Linux den Befehl

Code: Alles auswählen

python3 main.py
abgesetzt, keine Regung ...
Gruß R
Karolus
********
Beiträge: 7440
Registriert: Mo, 02.01.2006 19:48

Re: ICS download im Browser = OK. Per Makro nur begrenzt OK

Beitrag von Karolus »

Hallo

Ich hab oben noch eine Warnung geschrieben, bitte lesen!
Die Datei solltest du umbenennen, damit keine Verwirrung entsteht!
Falls du eine python-datei in der Form ausfühst, musst du unten noch zwei extra Zeile einfügen, in diesem Fall (weil die Funktion ``main()`` ausgeführt werden soll wäre das:

Code: Alles auswählen

if __name__ == "__main__":
    main()
Das ganze noch mal am Stück mit einem eingebauten sleep(10) und reduziert auf ein Jahr, um eine blockieren von der Downloadseite zu verhindern.

Code: Alles auswählen

from pathlib import Path
from requests import get 
from itertools import product
from time import sleep



def write_file(p, content):
    with open(p, "w") as ics:
        ics.write(content)
        
def main(*_):        
    outpath = Path().home() / "Downloads" / "ferien"
    outpath.mkdir(exist_ok=True)
    baseurl = "https://www.ferienwiki.de/exports/ferien/"    #"2023/de/"
    laender = ['baden-wuerttemberg',
                 'bayern',
                 'berlin',
                 'brandenburg',
                 'bremen',
                 'hamburg',
                 'hessen',
                 'mecklenburg-vorpommern',
                 'niedersachsen',
                 'nordrhein-westfalen',
                 'rheinland-pfalz',
                 'saarland',
                 'sachsen',
                 'sachsen-anhalt',
                 'schleswig-holstein',
                 'thueringen']
    
    jahre = [2023]  # absichtlich auskommentiert #2024, 2025]

    for jahr, land in product(jahre,laender):
        response = get(f"{baseurl}{jahr}/de/{land}.ics")
        name = response.headers["Content-Disposition"].split("=")[-1]
        name = name.strip('"')
        p = outpath / name.strip('"')
        print(len(response.text), name)
        write_file(p, response.text)
        sleep(10)
        
if __name__ == "__main__":        
    main()
Es sollten die Zeichenanzahl und der Name der Datei ausgegeben werden, alle ~10Sekunden, falls die Anzahl <100 angezeigt wird, darfst du abbrechen mit <Strg>c
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: ICS download im Browser = OK. Per Makro nur begrenzt OK

Beitrag von F3K Total »

Hallo Karolus,
dann habe ich wohl etwas falsch gemacht, ich hatte die Datei zunächst mit getferien.py benannt, lief aber nicht, daher dachte ich, sie müsse main.py heißen, weil im Code ja auch ein def main steht. Ist also nicht so? Der Dateiname ist frei wählbar?

Gruß R
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: ICS download im Browser = OK. Per Makro nur begrenzt OK

Beitrag von F3K Total »

... ah ... jetzt läuft es ...
k.png
k.png (18.62 KiB) 1899 mal betrachtet
Danke R
Karolus
********
Beiträge: 7440
Registriert: Mo, 02.01.2006 19:48

Re: ICS download im Browser = OK. Per Makro nur begrenzt OK

Beitrag von Karolus »

Ja der Dateiname ist relativ frei wählbar, aber :
-- ``main.py`` sollte per Konvention ausschliesslich für den Einstiegspunkt in grösseren Paketen gewählt werden.
-- eine Datei sollte man nicht bsplw. `requests.py` nennen, wenn man darin requests oder aus requests importiert!

hast du eigentlich requests per pip install requests --user installiert? das wird nämlich benötigt!
die letzte Frage hat sich erübrigt, das scheint zu klappen!!

Die Seite mag mich nicht mehr, :oops:
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Benutzeravatar
balu
********
Beiträge: 3810
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: ICS download im Browser = OK. Per Makro nur begrenzt OK

Beitrag von balu »

[https://www.youtube.com/watch?v=jHPOzQzk9Qo]monty[/url]

Moinsen R und Karolus :-)

Das Video konnte ich mir jetzt echt nicht verkneifen. *freundlich-grins*

[bäck-tu-topic]

Ein recht herzliches danke schön für Eure schnellen Antworten. Ich war wirklich sehr erfreulich überrascht *daumen-hoch-halte*.

Sorry das ich mein Betriebssystem nicht angegeben hatte, aber das hatte ich einfach vergessen näher zu erwähnen.
Karolus hat geschrieben: ... und zwar Betriebssystemunabhängig ...
Bingo!!!

Mein Office hatte ich noch erwähnt, weil ich mit LO zur Zeit nicht arbeiten kann, fette Augenprobleme (Nein! Kein Scherz!).*heul*


@R
Noch arbeite ich mit WinXP.
Habe mir aber dennoch dein Archiv mal angesehen und getestet. Doch leider funktioniert es nicht. Der Grund dürfte wohl klar sein.
F3K Total hat geschrieben: Denn ich nutze ja auch Linux, um mich ggf. bald von Windows komplett zu trennen.
Da bist Du mir etwas voraus. Will auch komplett umsteigen, aber erst dann, wenn MEINE Augen wieder OK sind.

Ich war so schön mit meinem "Virtuellem Keyboard" am tippen, als mir einfiel meine Beisprldatei zu testen. Und ich musste entsetzt feststellen, die funzt übergaupt nicht. *ICH-gehe-mal-Asche-duschen*.

Hatte die Zellen verschoben, aber nicht das Makro geändert.
Korektierte Datei im Anhang.

Meine Güte!
Ihr beide seid ja recht fleißig. Da komme ich ja gar nicht hinterher.

Thema Python.

Ich weiss nicht ob das möglich ist, ein dementsprechendes Makro zu schreiben das man als Anwender nix nachinstalieren muss?
Deshalb auch meine angabe zum benutzten Office.

Sorry, aber ich muss zum Ende kommen.



Gruß
balu
Dateianhänge
FILECOPY_Arbeitsbeispiel_03.ods
(20.79 KiB) 63-mal heruntergeladen
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Karolus
********
Beiträge: 7440
Registriert: Mo, 02.01.2006 19:48

Re: ICS download im Browser = OK. Per Makro nur begrenzt OK

Beitrag von Karolus »

Hallo Balu

Ich komme erst morgen dazu mir das anzuschauen, aber konkret du benutzt Libreoffice auf Windows?

Gute Besserung!
et_jeht_wieder.png
et_jeht_wieder.png (75.4 KiB) 1878 mal betrachtet
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Benutzeravatar
balu
********
Beiträge: 3810
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: ICS download im Browser = OK. Per Makro nur begrenzt OK

Beitrag von balu »

Hallo Karolus

Die letzte LO Version die ich auf meinem System instalieren konnte, war die LO 5.1.5.2. Aber aktuell kann ich nicht damit arbeiten, weil LO nicht das Farbschema von WinYP übernimmt. AOO macht das aber.

Las dir ruhig Zeit.



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Antworten