Datei aus Internet herunter laden, ohne Browser zu öffnen

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

Moderator: Moderatoren

retuwe61
****
Beiträge: 159
Registriert: So, 18.11.2007 21:25

Datei aus Internet herunter laden, ohne Browser zu öffnen

Beitrag von retuwe61 »

Hallo miteinander, Hallo Frieder D. (falls online).
Ich habe mir einen Kalender erstellt und möchte darin auf Knopfdruck unter Linux von der Seite "http://www.schulferien.org/iCal/" die (2015er niedersächsischen) Feiertage downloaden, ohne den Browser öffnen zu müssen. Zufällig fand ich Frieder D.'s Makro "Download To File", mit dem bei mir anstelle der 3,3 kb großen Datei "Feiertage_Niedersachsen_2015.ics" allerdings nur eine 0 Byte große Datei gespeichert wird.

Wer weiß Rat?
Gruß
Uwe

Ich verwende: LibreOffice 3.5.4.2
Build-ID: 165a79a-7059095-e13bb37-fef39a4-9503d18

Code: Alles auswählen

REM  *****  BASIC  *****
'Copyright (c) 2011 Frieder Delor, Mailto: delorfr@googlemail.com
'The Funktion "GetPath" is originally from: Copyright (c) 2011 Volker Lenhardt
'This program is free software; you can redistribute it and/or modify it under 
'the terms of the GNU General Public License as published by the Free Software
'Foundation; either version 2 of the License, or (at your option) any later 
'version.

'This program is distributed in the hope that it will be useful, but WITHOUT 
'ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
'FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

'You should have received a copy of the GNU General Public License along with 
'this program; if not, write to the Free Software Foundation, Inc., 59 Temple 
'Place, Suite 330, Boston, MA 02111-1307 USA
' ========================================================================
Option Explicit
'-----------------------------------------------
Sub DownloadToFile
Dim iSystem%
Dim sURL As String
Dim sPath$ 
'internetAdresse muss ein direkter Link zum Download sein
sURL="http://www.schulferien.org/iCal/getfile?name=Feiertage_Niedersachsen_2015.ics" 'OriginalLink: http://www.schulferien.org/iCal/Feiertage/icals/Feiertage_Niedersachsen_2015.ics

'pfad auf dem Rechner 
sPath = GetPath	
If sPath = "" Then
  MsgBox "Sie haben kein Verzeichnis ausgewählt" _
            ,0 ,"Fehler" 
  Exit sub
End if
sPath =  ConvertFromUrl(sPath)
sPath = sPath  & "Feiertage_Niedersachsen_2015.ics" 'bitte anpassen
iSystem = GetGUIType
  select case iSystem 	
  Case 1 'Das betriebssysthem ist Windows
  	Win_Download (sURL, sPath )		
  case 3 'Mac os
    MsgBox "Leider funktioniert das Makro nicht unter Mac-OS." _
            ,0 ,"Fehler" 	
  case 4  'Unix oder Linux
  	Linux_Download (sURL, sPath )
  case else
      MsgBox "Das Betriebssystem konnte nicht ermittelt werden." _
            ,0 ,"Fehler"
  end select
end sub
'--------------------------------------------------------------------------------------------
Sub Linux_Download (sURL As String, sPath As String )
Dim iVar%,i%
dim dummy()
  if FileExists(sPath)Then 
  	iVar = MsgBox ("Die Datei " & Chr(10) & sPath & Chr(10) & " existiert bereits." & Chr(10) & _
  	               "Soll die vorhandene Datei überschrieben werden?",4,"Fehler")
  	if iVar =7 Then exit Sub  	
  End if

'Datei herunterladen
  Shell("wget -q " & sURL &" -O " & "'" & sPath & "'")
  For i=1 To 10
    Wait 3000
    If FileExists(sPath) Then Exit For 'bis zu 10 sekunden Warten, bis der download abgeschlossen ist
  Next
  If Not FileExists(sPath) Then 'Fehler nach 10 sekunden
    MsgBox "Die Datei konnte nicht heruntergeladen werden. " & Chr(10) & _
    	"Bitte überprüfen sie die Internetadresse." ,0, "Fehler"
    exit Sub  
  Else
    MsgBox "Der Download war erfolgreich. " ,0, "Erfolg"
  End If 

End Sub

'---------------------------------------------------------------------
Sub Win_Download(sURL As String, sPath As String )
Dim iVar%
  if FileExists(sPath)Then 
  	iVar = MsgBox ("Die Datei " & Chr(10) & sPath & Chr(10) & " existiert bereits." & Chr(10) & _
  	"Soll die vorhandene Datei überschrieben werden?",4,"Fehler")
  	if iVar =7 Then exit Sub  	
  End if
'Datei herunterladen
  If DownloadFile(sURL, sPath) = False Then 
    MsgBox "Die Datei konnte nicht heruntergeladen werden. " & Chr(10) & _
    	"Bitte überprüfen sie die Internetadresse." ,0, "Fehler"
    exit Sub
  Else
    MsgBox "Der Download war erfolgreich. " ,0, "Erfolg"  
  End If 
End Sub
'--------------------------------------------------------------------------------
'Die Funktion "urlmon" aus der Windows API aufrufen
Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
                       (ByVal pCaller As Long, _
                        ByVal szURL As String, _
                        ByVal szFileName As String, _
                        ByVal dwReserved As Long, _
                        ByVal lpfnCB As Long) As Long
                        
'------------------------------------------------------------------------- 
Public Function DownloadFile(URL As String, LocalFilename As String) As Boolean 
  Dim lngRetVal As Long 
  lngRetVal = URLDownloadToFile(0, URL, LocalFilename, 0, 0) 
  If lngRetVal = 0 Then DownloadFile = True 
End Function 
'--------------------------------------------------------------------------
'Ordner über den Ordnerauswahl-Dialog holen
Function GetPath() As String
  Dim  oPathSettings, oFolderDialog
  Dim sPath As String

    oPathSettings = CreateUnoService("com.sun.star.util.PathSettings")
    sPath = oPathSettings.Work
    oFolderDialog = _
          CreateUnoService("com.sun.star.ui.dialogs.FolderPicker")
    oFolderDialog.SetDisplayDirectory(sPath)
    If oFolderDialog.Execute() = _
          com.sun.star.ui.dialogs.ExecutableDialogResults.OK Then
      sPath = oFolderDialog.GetDirectory
    Else
      GetPath = ""
      Exit Function
    End If
  If Right(sPath, 1) <> "/" Then sPath = sPath & "/"
  GetPath = sPath
End Function 

Angewandt wird LibeOffice Version 5.1.6.2
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Datei aus Internet herunter laden, ohne Browser zu öffnen

Beitrag von Stephan »

keine Probleme feststellbar mit OOo 3.3.0

den fehlerhaften Link zur Datei habe ich vorher angepasst zu:

Code: Alles auswählen

sURL="http://www.schulferien.org/iCal/Ferien/icals/Ferien_Niedersachsen_2015.ics"
Gruß
Stephan
retuwe61
****
Beiträge: 159
Registriert: So, 18.11.2007 21:25

Re: Datei aus Internet herunter laden, ohne Browser zu öffnen

Beitrag von retuwe61 »

Hallo Stephan
Diesen Link hatte ich zuvor auch erfolglos verwendet.
Versuchsweise wollte ich nun die noch nicht existierende Datei "Ferien_Niedersachsen_2018.ics" herunterladen.
Anstelle der Meldung, dass die Datei nicht heruntergeladen werden kann, erscheint, dass der Download erfolgreich war.
Erstaunlicherweise wird auch hier wieder eine Leerdatei abgespeichert.

Wenn ich den nachfolgenden Code verwende, klappt es, wobei ja leider der Browser geöffnet wird/bleibt und der Öffnen-Dialog angezeigt wird.

Gruß
Uwe

Code: Alles auswählen

Sub Link_Feiertage
oDoc = ThisComponent
oSheet = ThisComponent.getSheets.getByName ("Work")
oLink = oSheet.getCellByPosition(4,9).STRING  'Adresse: http://www.schulferien.org/iCal/Feiertage/icals/Feiertage_Niedersachsen_2015.ics
oService = createUNOService("com.sun.star.system.SystemShellExecute")
oservice.execute(oLink,"",0)
end sub
Angewandt wird LibeOffice Version 5.1.6.2
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Datei aus Internet herunter laden, ohne Browser zu öffnen

Beitrag von balu »

Hallo Uwe,

Code: Alles auswählen

http://www.schulferien.org/iCal/Feiertage/icals/Feiertage_Niedersachsen_2015.ics
 
dieser Link, oder aber auch für 2015, funktioniert hier bei mir unter WinXP mit FF(16.0.2 was aber keine Rolle spielen sollte) ohne Probleme. Datei wird gespeichert, nachdem ich gesagt habe das sie gespeichert werden soll, und sie ist ca. 3Kb groß. Und ja, ich habe die Datei anschließend in Calc via "Tabelle einfügen aus Datei" importiert und es sind tatsächlich Daten vorhanden.

Was mich nur allgemein wundert ist, warum willst Du die Feiertage via ics importieren? Die Feiertage sind doch eigentlich alle nach einem bestimmten System vorgegeben, seis Ostern, Maifeier etc., da muss doch nicht jedesmal ne neue Datei heruntergeladen werden. Oder habt ihr in Niedersachsen so viele variable "Feiertage" das es unmöglich ist eine Formel dafür in Calc zu erstellen?

Und noch ne andere Frage:
Was machst Du mit der ics-Datei wenn Du sie gedownloaded hast, beziehungsweise wie bearbeitest Du die Daten anschließend auf, für Calc oder Writer?


Für das Thema Ferien hatte ich hier im Forum einen Kalender erstellt, der quasi "per Knopfdruck" die Ferien....ics downloaded, in die Datei importiert (alles per Makro) und anschließend die ics-Daten Calc gerecht aufarbeitet, .
Rasterkalender mit Schulferien. Verspäteter Nikolaus : -)



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
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Datei aus Internet herunter laden, ohne Browser zu öffnen

Beitrag von Stephan »

Du kannst natürlich auch die Datei direkt öffnen und eine Kopie speichern, nur weiß ich nicht warum das bei Dir besser funtionieren sollte, da ja schon der ursprüngliche WEg funktionieren muss aber es nicht tut:

Code: Alles auswählen

sub Main
sPath = GetPath   
If sPath = "" Then
  MsgBox "Sie haben kein Verzeichnis ausgewählt",0 ,"Fehler" 
  Exit sub
End if
url=converttourl("http://www.schulferien.org/iCal/Feiertage/icals/Feiertage_Niedersachsen_2015.ics")
dim myFileProp(0) as new com.sun.star.beans.PropertyValue
myFileProp(0).Name = "Hidden"
myFileProp(0).Value = True
oDocument = StarDesktop.loadComponentFromURL(url, "_blank", 0, myFileProp() )
sURL = ConvertToURL(sPath & "Feiertage_jms.ics")
dim dummy()
oDocument.storeToUrl(sUrl, dummy())
oDocument.Close(True) 
Msgbox "Fertig"
end sub

'Ordner über den Ordnerauswahl-Dialog holen
Function GetPath() As String
  Dim  oPathSettings, oFolderDialog
  Dim sPath As String

    oPathSettings = CreateUnoService("com.sun.star.util.PathSettings")
    sPath = oPathSettings.Work
    oFolderDialog = _
          CreateUnoService("com.sun.star.ui.dialogs.FolderPicker")
    oFolderDialog.SetDisplayDirectory(sPath)
    If oFolderDialog.Execute() = _
          com.sun.star.ui.dialogs.ExecutableDialogResults.OK Then
      sPath = oFolderDialog.GetDirectory
    Else
      GetPath = ""
      Exit Function
    End If
  If Right(sPath, 1) <> "/" Then sPath = sPath & "/"
  GetPath = sPath
End Function
Gruß
Stephan
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Datei aus Internet herunter laden, ohne Browser zu öffnen

Beitrag von Karolus »

Hallo

Was hat die Fragestellung jetzt eigentlich mit LO bzw. AOO zu tun?
bzw. warum sollte ich ausgerechnet LO oder Aoo damit bemühen ?

Auf der Kommandozeile:

Code: Alles auswählen

wget http://www.schulferien.org/iCal/Ferien/icals/Ferien_Niedersachsen_2015.ics 
`wget` gibts ( - oder kannst du installieren - ) auf jedem Linux-system

Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Datei aus Internet herunter laden, ohne Browser zu öffnen

Beitrag von Stephan »

Code: Alles auswählen

Auf der Kommandozeile:
genau das wird im Makro verwendet und führt beim Threadstarter nicht zum Erfolg, wobei das nicht an wget liegen muss sondern daran das der Threadstarter kein Linux verwendet.

Da ich leider nicht weiß wo das Problem beim Threadstarter liegt, kann ich nicht gezielt helfen, denn der Code des Threadstarters ansich ist augenscheinlich einwandfrei und funktioniert bei mir ja.


Gruß
Stephan
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Datei aus Internet herunter laden, ohne Browser zu öffnen

Beitrag von Karolus »

Hallo
genau das wird im Makro verwendet
Ok - ich habs auch gefunden, gut vesteckt in gefühlt 100 Zeilen Basic --- warum diese kuschelige Verpackung :?
Ohne dieses DrumRum bekämst du im Fehlerfall eventuell eine verwertbare Rückmeldung auf der Shell.

Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Datei aus Internet herunter laden, ohne Browser zu öffnen

Beitrag von balu »

Hallo,

kleine korrektur meinerseits.
balu hat geschrieben: oder aber auch für 2015
Da hatte ich mich vertippt, und sollte eigentlich "für 2018" heißen.
Weil,
retuwe61 hat geschrieben: ... die noch nicht existierende Datei "Ferien_Niedersachsen_2018.ics" ...
das also nicht stimmt. Sowohl Feiertage als auch Ferien gibt es auch schon für das Jahr 2018 als ics-Datei zu downloaden.



@Stephan
... sondern daran das der Threadstarter kein Linux verwendet.
Da hast Du wohl etwas übersehen, oder vergessen.
retuwe61 hat geschrieben: Ich habe mir einen Kalender erstellt und möchte darin auf Knopfdruck unter Linux ...


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
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Datei aus Internet herunter laden, ohne Browser zu öffnen

Beitrag von Stephan »

warum diese kuschelige Verpackung
Rein technisch gesprochen würde ich sagen weil hier quasi OO oder LO als Backend für das Skript dienen.
Ohne dieses DrumRum bekämst du im Fehlerfall eventuell eine verwertbare Rückmeldung auf der Shell.
und das ist eine hilfreiche Anmerkung, dessen war ich mir hier nicht einmal bewusst


Trotzdem einmal allgemein:
niemand hier verteidigt quasi vorsätzlich Windows- und Basic-Lösungen, nur die Mehrzahl der Frager versteht doch häufig garnicht worum es geht wenn man ihnen eine grundsätzlich andere Antwort nur umreisst, weil sie darauf fixiert sind nur das Problem zu beseitigen das ihre bereits umrissene Lösung beinhaltet.
Viele der Frager sind imho also darauf angewiesen das man ihnen nicht nur die Alternative nennt, sondern dann auch diese Alternative weitgehend vollständig darstellt, ggf. auch in konkreten einzelnen Schritten.

Für Programmiererfahrene sind Alternativen hingegen immer/meist gedanklich anregend, nur davon hat der eigentliche Frager doch nichts und reagiert deshalb häufig mit Ignorieren des Vorschlags oder Unverständnis.

Da hast Du wohl etwas übersehen, oder vergessen.
In der Tat, das habe ich übersehen, und das könnte hier auch schon die ganze Ursache sein. Somit wäre der Hinweis von Karolus auch für die Fehlerfindung hilfreich.

Vielleicht könnte Karolus deshalb bitte den vollständigen Code für die Kommandozeile hinschreiben.
Wahrscheinlich wäre das das Folgende (beispielhaft), aber ich bin mir nicht sicher:

Code: Alles auswählen

wget -q http://www.schulferien.org/iCal/Ferien/icals/Ferien_Niedersachsen_2015.ics -O <lokalerPfad>/Ferien_Niedersachsen_2015.ics 

Gruß
Stephan
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Datei aus Internet herunter laden, ohne Browser zu öffnen

Beitrag von Karolus »

Hallo

Ich habs tatsächlich so getestet wie hingeschrieben, mit:

Code: Alles auswählen

wget http://www.schulferien.org/iCal/Ferien/icals/Ferien_Niedersachsen_2015.ics   
Die "Antwort" war:

Code: Alles auswählen

--2015-10-21 19:31:21--  http://www.schulferien.org/iCal/Ferien/icals/Ferien_Niedersachsen_2015.ics
Auflösen des Hostnamen »www.schulferien.org (www.schulferien.org)«... 213.133.127.200
Verbindungsaufbau zu www.schulferien.org (www.schulferien.org)|213.133.127.200|:80... verbunden.
HTTP-Anforderung gesendet, warte auf Antwort... 200 OK
Länge: 2417 (2,4K) [text/calendar]
In »»Ferien_Niedersachsen_2015.ics«« speichern.

100%[=====================================================================================================>] 2.417       --.-K/s   in 0,002s  

2015-10-21 19:31:22 (956 KB/s) - »»Ferien_Niedersachsen_2015.ics«« gespeichert [2417/2417]
 
Es wird also per Default ins aktuelle Verzeichnis gespeichert, unter dem "DateiNamen" wie er aus der URL ermittelt wird.

Wenn ich die optionalen Argumente nachlesen möchte, die `wget` nimmt, mach ich das einfach per `wget --help`
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Datei aus Internet herunter laden, ohne Browser zu öffnen

Beitrag von Karolus »

Hallo

Und ja - das alles geht natürlich auch über einen Button aus soffice heraus ( egal welches, egal auf welchem Betriebssystem und ohne externe Shell) :

Code: Alles auswählen

try:
    from urllib import urlretrieve  #python2.7  aus AOO
except ImportError:
    from urllib.request import urlretrieve #python3.x aus LO
    
def download_to_file(*args):
    urlretrieve("http://www.schulferien.org/"
                "iCal/Ferien/icals/"
                "Ferien_Niedersachsen_2015.ics",

                "ferien_2015.ics")
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Datei aus Internet herunter laden, ohne Browser zu öffnen

Beitrag von Stephan »

Ich habs tatsächlich so getestet wie hingeschrieben, mit:
ja, das hatte ich tatsächlich auch so angenommen, aber:
Es wird also per Default ins aktuelle Verzeichnis gespeichert
und (bzw. "denn") das ist das was ich vermutet habe (genauer gesagt dachte ich sogar es könne für wget eine vom Gesamtsystem unabhängige Vorgabe eines Default-Pfades geben) nur ist Vermuten auch bei mir nicht wissen und von Linux verstehe ich eben viel zu wenig um mir sicher zu sein in solchen Detailfragen.
Wenn ich die optionalen Argumente nachlesen möchte, die `wget` nimmt, mach ich das einfach per `wget --help`
Das ist mir bekannt, aber bitte verstehe doch hier die Gesamtsituation: auch wenn es mir bekannt ist, bin ich der Meinung es ist dem Frager nicht bekannt, wenn ich deswegen die help-page von wget hier poste bringe ich mich doch aber auch in die Situation den Eindruck zu erzeugen Dich belehren zu wollen und dazu habe ich garnicht die Absicht, denn ich bin mit Deinen Hinweisen, hier und in vielen Threads sehr einverstanden und einzig wollte ich sagen: 'bitte denke doch daran das das was Du selbstverständlich weist, und was ich zwar nicht weiß, aber verstehen kann wenn Du es mir sagst, für viele normale Frager trotzdem völlig unverständlich bleibt wenn man es nicht genauer erklärt', wahrscheinlich sogar in vielen Fällen sehr langatmig und detailliert erklären muss


Gruß
Stephan
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Datei aus Internet herunter laden, ohne Browser zu öffnen

Beitrag von Stephan »

Code: Alles auswählen

Und ja - das alles geht natürlich auch über einen Button aus soffice heraus
Sorry, nur genau das meine ich. Du postest hier einen Python-Code und selbst ich müsste jetzt erst einmal nachschlagen wie ich den einer Schaltfläche zuordne.

Der normale Frager weiß aber nicht einmal das und wird gleichzeitig vielfach das nicht so direkt sagen wollen um nicht dumm dazustehen, deshalb braucht es vielfach mehr Detailhilfe - nicht weil Python & Co. grundlegend schwieriger wären, sondern weil sie einfach weniger verbreitet sind bei den 'normalen' OfficeAnwendern, weil für Diese irgendwie VBA das ist was sie evtl. noch halbwegs verstehen bzw. womit sie umgehen können.

Was kann man tun?
z.B. schreibe in die FAQ eine Allgemeinanleitung zur Zuweisung von Python an Schaltflächen in OO/LO und verlinke bei Notwendigkeit darauf


Meine Einschätzung, das die Anwender im Officebereich alle eher VBA fixiert sind, muss auch nicht die letztgültige Wahrheit sein, aber ich sehe es ehrlichen Herzens so.


Gruß
Stephan
retuwe61
****
Beiträge: 159
Registriert: So, 18.11.2007 21:25

Re: Datei aus Internet herunter laden, ohne Browser zu öffnen

Beitrag von retuwe61 »

Guten Morgen miteinander.
Das ursprüngliche Problem konnte ich auf meinem Linux-Arbeitsrechner bislang nicht lösen - aber umgehen:
Für meinen Kalender (Schichtplan) habe ich mich jetzt - nach Balu's Tipp - dazu entschieden, aus dessen Rasterkalender (tolles Teil!) die Feiertagsliste zu verwenden.
Habt vielen Dank für eure Bemühungen.
Gruß
Uwe
Angewandt wird LibeOffice Version 5.1.6.2
Antworten