Ecco la guidaTV gratuita per sky!

Però c'è il problema che il nome del file deve contenere parametri variabili, c'e' modo di passare parametri allo script da VBA?

Per tutto quello scritto prima della nota di cui sopra non vedo grossi problemi...
La note però potrebbe cambiare la prospettiva, leggi bozza macro sotto:
Codice:
Sub GetFileFromFtpMac()
''Get file from ftp-server and place it in same folder as excel-file

'Declarations
Dim ScriptToRun As String
Dim UserPath As String
Dim PathtoHD As String
Dim FTPpathtofile As String
Dim Localfilename As String

'Variables
'Enclose all in ""
FTPpathtofile = "ftp://1.1.1.1/folder/ftpfile.file"
Localfilename = "localfilename.file"

'Get path to excel-file
'Alternatively UserPath can be hardcoded
PathtoHD = MacScript("path to startup disk as string")
UserPath = Right(ThisWorkbook.Path, Len(ThisWorkbook.Path) - Len(PathtoHD)) 'Path to excelfile
UserPath = Replace(UserPath, ":", "/") 'POSIX the path
UserPath = "/" & UserPath & "/" & Localfilename ' Add prefix and filename

'construct applescript call
ScriptToRun = "tell application " & Chr(34) & "Finder" & Chr(34) & " to do shell script " & Chr(34) & "curl -o " & FTPpathtofile & Chr(34) & " " & Chr(38) & " quoted form of " & Chr(34) & UserPath & Chr(34)

'run applescript
MacScript (ScriptToRun) 'Run Curl command in terminal via applescript...

End Sub

E' una macro che da la possibilità di "confezionare" l'Applescript in VBA e alla fine lanciarlo... quindi se non ho capito male i parametri che variano nel nome dei file da scaricare dal sito Sky potrebbero essere gestiti in VBA così da non avere il problema di passare i parametri da VBA a Applescrip.
Il problema vero è che avevo già fatto delle prove con questa macro ma non ero riuscito a farla funzionare... a naso credo andrebbe semplificata perchè nasceva per poter essere gestita da computer in rete ma le mie conoscenze attuali di VBA mi tarpano un po' le ali...
Jump riesci a diradare la nebbia?
Ciao
 
Ma questa è unavera istruzione o una meta istruzione?!?
Codice:
ScriptToRun = "tell application " & Chr(34) & "Finder" & Chr(34) & " to do shell script " & Chr(34) & "curl -o " & FTPpathtofile & Chr(34) & " " & Chr(38) & " quoted form of " & Chr(34) & UserPath & Chr(34)
Il risultato è:
tell application "Finder" to do shell script "curl -o http://guida.skytv.it/blablabla" & quoted form of "C:\temp\localfile.txt"


Cioè questa sarebbe una vera riga di comando della shell del mac?!?
 
Ultima modifica:
Stando all'help di Office per Windows:

Funzione MacScript

Esegue uno script AppleScript e restituisce l'eventuale valore restituito dallo script.
Sintassi
MacScript script
L'argomento script è un'espressione di tipo String, che può essere rappresentata da una serie di comandi AppleScript oppure può specificare il nome di uno script AppleScript o di un file script.
Osservazioni
È possibile creare script che includono più righe mediante l'inserimento di caratteri di ritorno a capo (Chr(13)).

Quindi non servirebbe nemmeno uno script esterno cui passare i parametri, basta trovare la giusta linea di comando e scriverla direttamente dentro alla chiamata MacScript().

Se fosse vero, sarebbe molto più semplice, perchè basterebbe scrivere:
Codice:
Public Function URLDownloadToFile(TipoFile as integer, strurl as string, nomefile as string, dummy1 as integer, dummy2 as integer)
 
CommandLine = "tell application " & Chr(34) & "Finder" & Chr(34) & " to do shell script " & Chr(34) & "curl -o " & strurl & Chr(34) & " " & Chr(38) & " quoted form of " & Chr(34) & nomefile & Chr(34)

MacScript (CommandLine) 

end function
...funziona? :eusa_think:
 
Il risultato è:
tell application "Finder" to do shell script "curl -o http://guida.skytv.it/blablabla" & quoted form of "C:\temp\localfile.txt"

Cioè questa sarebbe una vera riga di comando della shell del mac?!?Si questa è una riga di comando di Applescript ma così com'è scritta non fa al caso nostro...

Si... questa è una riga di comando Applescript ma così com'è scritta non fa proprio al caso nostro...

Ci lavoro un po' e ti faccio sapere....
 
Qualora riuscissi a mettere giù il maniera corretta la stringa per l'applescript basterebbe sostituire:

Questa:
Codice:
Public 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

Con questa:
Codice:
Public Function URLDownloadToFile(TipoFile as integer, strurl as string, nomefile as string, dummy1 as integer, dummy2 as integer)
CommandLine = [B]"stringa corretta Applescript"[/B]
MacScript (CommandLine) 
end function

Perchè funzioni tutto?:D
O ci sarebbe ancora qualcosa da sistemare?:crybaby2:
 
marpar ha scritto:
Perchè funzioni tutto?:D
O ci sarebbe ancora qualcosa da sistemare?:crybaby2:
leggi bene il mex sopra, secondo me per far funzionare tutto basta questa dichiarazione, da copiare pari-pari col copia-incolla nella macro!

Codice:
Public Function URLDownloadToFile(TipoFile as integer, strurl as string, nomefile as string, dummy1 as integer, dummy2 as integer)
 
CommandLine = "tell application " & Chr(34) & "Finder" & Chr(34) & " to do shell script " & Chr(34) & "curl -o " & strurl & Chr(34) & " " & Chr(38) & " quoted form of " & Chr(34) & nomefile & Chr(34)

MacScript (CommandLine) 

end function
 
Manuale curl - https://developer.apple.com/library/mac/#documentation/Darwin/Reference/Manpages/man1/curl.1.html

Estrapolato dal manuale:
Codice:
       -o/--output <file>
              Write output to <file> instead of stdout. If you are using {} or [] to  fetch  multiple  docu-
              ments,  you  can  use  '#' followed by a number in the <file> specifier. That variable will be
              replaced with the current string for the URL being fetched. Like in:

                curl http://{one,two}.site.com -o "file_#1.txt"

              or use several variables like:

                curl http://{site,host}.host[1-5].com -o "#1_#2"

              You may use this option as many times as the number of URLs you have.

              See also the --create-dirs option to create the local directories dynamically. Specifying  the
              output as '-' (a single dash) will force the output to be done to stdout.
 
marpar ha scritto:
Allora forse il codice giusto è:

Codice:
Public Function URLDownloadToFile(TipoFile as integer, strurl as  string, nomefile as string, dummy1 as integer, dummy2 as integer)
 
CommandLine = "tell application " & Chr(34) & "Finder" &  Chr(34) & " to do shell script " & Chr(34) & "curl "  & strurl & Chr(34) & " -o " & Chr(38) & " quoted form  of " & Chr(34) & nomefile & Chr(34)

MacScript (CommandLine) 

end function

(ho spostato "-o" più avanti)
 
jumpjack ha scritto:
Allora forse il codice giusto è:

Codice:
Public Function URLDownloadToFile(TipoFile as integer, strurl as  string, nomefile as string, dummy1 as integer, dummy2 as integer)
 
CommandLine = "tell application " & Chr(34) & "Finder" &  Chr(34) & " to do shell script " & Chr(34) & "curl "  & strurl & Chr(34) & " -o " & Chr(38) & " quoted form  of " & Chr(34) & nomefile & Chr(34)

MacScript (CommandLine) 

end function

(ho spostato "-o" più avanti)

Ho inserito questo codice ma quando provo a lanciare "Scarica programmazione" mi viene restituito l'errore "Impossibile trovare il progetto o la librera."
 
Usando solo AppleScript con questo comando scarico il file e lo chiamo come voglio sanvandolo sul desktop:

Codice:
do shell script "curl -L http://guidatv.sky.it/app/guidatv/contenuti/data/grid/grid_GGGGGGGG_channels.js -o Users/DELL/Desktop/nomefile"
 
Ultima modifica:
Non so se il tuo programma ha esigenza di scrivere dei file e dove (o esegue tutto in memoria) ma una cosa da non trascurare è che su mac i path si scivono con la slash "/" e invece su Windows con la backslash "\".

Nella stringa per l'applescript dovrebbe gestire la cosa il comando "quoted form of" .... (spero di non aver scritto delle castronerie)
 
marpar ha scritto:
Ho inserito questo codice ma quando provo a lanciare "Scarica programmazione" mi viene restituito l'errore "Impossibile trovare il progetto o la librera."
devi interrompere l'esecuzione del programma (sul PC si fa con CTRL+PAUSA) e vedere quale riga della macro viene evidenziata.

marpar ha scritto:
Non so se il tuo programma ha esigenza di scrivere dei file e dove (o esegue tutto in memoria) ma una cosa da non trascurare è che su mac i path si scivono con la slash "/" e invece su Windows con la backslash "\".
Ottima osservazione.
L'unico punto della macro che "tratta" il backslash è questo:

Codice:
Sub SetupTempFolder()
Dim fso
Dim fol As String
fol = Sheets(NOME_FOGLIO_RICERCA).Cells(1, 7) ' change to match the folder path
Path = fol
If Mid$(Path, Len(Path), 1) <> "\" Then Path = Path & "\"
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FolderExists(fol) Then
    fso.CreateFolder (fol)
Else
    ' MsgBox fol & " already exists!", vbExclamation, "Folder Exists"
End If
End Sub

Serve a correggere il percorso dove vengono salvati i file temporanei, che va indicato nella cella G1 del foglio DETTAGLI.
 
Stasera, non appena a casa (di mezzo c'è un torneo di calcio di mio figlio).. con calma... proverò a mettere a fuoco tutte le problematiche....
Jump... intanto ti ringrazio..
A domani per l'update..
Buona serata
 
Ultima modifica:
1° punto fermo... questa macro funziona da VBA e scarica il file grid_GGGGGGGG_channels.js sul desktop:
Codice:
Sub ScaricafilesitoSky()

Dim ScriptToRun As String

ScriptToRun = "tell application " & Chr(34) & "Finder" & Chr(34) & " to do shell script " & Chr(34) & "curl -L " & "http://guidatv.sky.it/app/guidatv/contenuti/data/grid/grid_GGGGGGGG_channels.js" & " -o " & "/Users/Marco/desktop/grid_GGGGGGGG_channels.js" & Chr(34)

MacScript (ScriptToRun) 

End Sub
 
jumpjack ha scritto:
leggi bene il mex sopra, secondo me per far funzionare tutto basta questa dichiarazione, da copiare pari-pari col copia-incolla nella macro!

Codice:
Public Function URLDownloadToFile(TipoFile as integer, strurl as string, nomefile as string, dummy1 as integer, dummy2 as integer)
 
CommandLine = "tell application " & Chr(34) & "Finder" & Chr(34) & " to do shell script " & Chr(34) & "curl -o " & strurl & Chr(34) & " " & Chr(38) & " quoted form of " & Chr(34) & nomefile & Chr(34)

MacScript (CommandLine) 

end function

Jump una precisazione.... stringa applescript a parte... ma nella macro "URLDownloadToFile" CommandLine dove viene dichiarata?
Ho capito male o TipoFile as integer deve diventare CommandLine as String?
Altro punto dolente, noi abbiamo esigenza di rinominare i files in un certo modo "nomefile" ma mi sembra di capire che il comando curl con l'opzione -o richieda un path (vedi mio post 294 con macro VBA funzionante), tu i 4 files li conservi in una cartella o l'elaborazione avviene in memoria?
Grazie
Ciao
 
Ultima modifica:
marpar ha scritto:
1° punto fermo... questa macro funziona da VBA e scarica il file grid_GGGGGGGG_channels.js sul desktop:
Allora è fatta.
Pero' verifica che il file contenga dati utili! Cioè, l'url da scaricare deve contenere il genere al posto di GGGGGGG, senno' ti ritrovi con un file che contiene... un messaggio di errore!
I generi disponibili sono:

genere(1) = "intrattenimento"
genere(2) = "cinema"
genere(3) = "sport"
genere(4) = "mondi"
genere(5) = "news"
genere(6) = "bambini"
genere(7) = "primafila"
genere(8) = "musica"

Pero' mi ricordo che c'era un file in cui sono contenuti. Solo che la macro non lo scarica, boh? Mi pareva di sì. :eusa_think:
 
jumpjack ha scritto:
Allora è fatta.
Pero' verifica che il file contenga dati utili! Cioè, l'url da scaricare deve contenere il genere al posto di GGGGGGG, senno' ti ritrovi con un file che contiene... un messaggio di errore!
I generi disponibili sono:

genere(1) = "intrattenimento"
genere(2) = "cinema"
genere(3) = "sport"
genere(4) = "mondi"
genere(5) = "news"
genere(6) = "bambini"
genere(7) = "primafila"
genere(8) = "musica"

Pero' mi ricordo che c'era un file in cui sono contenuti. Solo che la macro non lo scarica, boh? Mi pareva di sì. :eusa_think:

Hai letto il mio post 295?
I files posso scaricarli tutti nella dir dove risiede il file xslm e quindi usare a fine stringa ... & "/Users/Marco/desktop/" & nomefile & Chr(34) ?
 
marpar ha scritto:
Jump una precisazione.... stringa applescript a parte... ma nella macro "URLDownloadToFile" CommandLine dove viene dichiarata?
Da nessuna parte, sono pigro, non dichiaro quasi mai le variabili quando programmo in BASIC... :D

Ho capito male o TipoFile as integer deve diventare CommandLine as String?
No no, Commandline non viene passato come parametro: per cambiare il meno possibile la macro bisogna "giocare" solo con il contenuto della funzione URLDownloadToFile, lasciando inalterati tutti i parametri (senno' dovresti cambiare tutte le chiamate nella macro!).

Gli unici parametri utili sono l'URL e il nome del file di destinazione.

Avevo definito TipoFile pensando di aggirare il problema di non poter passare parametri allo script, ma in realtà ora non serve più, si puo' tranquillamente usare la dichiarazione:

Codice:
Public Function URLDownloadToFile(Inutile1 as integer, strurl as string, nomefile as string, Inutile2 as integer, Inutile3 as integer)

Poi nel corpo della funzione devi semplicemente scaricare il file e salvarlo dove ti pare, basta che il percorso sia contenuto nella variabile nomefile, in modo che le istruzioni successive sappiano dove andare a leggere il file.

Altro punto dolente, noi abbiamo esigenza di rinominare i files in un certo modo "nomefile" ma mi sembra di capire che il comando curl con l'opzione -o richieda un path (vedi mio post 294 con macro VBA funzionante), tu i 4 files li conservi in una cartella o l'elaborazione avviene in memoria?
Grazie
Ciao
Come dicevo sopra, i dat scaricati vengono salvati localmente su disco, e successivamente ricaricati per essere elaborati. Non so se esiste un modo per scaricare un file nella memoria invece che nel disco... ma anche se esistesse, significherebbe dover riscrivere la macro (anche se di certo sarebbe più veloce!)
 
Mi sa che nella fretta non leggi bene (o tutti) i miei messaggi... :)

Come dicevo, il percorso di salvataggio è indicato nella cella G1 del secondo foglio; SetupTempFolder() si limita a leggere quella cella e ad elaborarla poi in modo opportuno (cioè, semplicemente aggiunge in fondo un "\" e crea la cartella se non esiste).
Se in G1 c'e' già il percorso corretto, e se la cartella già esiste, SetupTempFolder() neanche serve, l'ho aggiunta solo per rendere più resistente agli errori la macro.

Se sei sicuro che una certa cartella esiste sempre su tutti i Mac, puoi semplicemente memorizzarne il percorso in PATH una volta per tutte a inizio macro. (PATH è una variabile globale della macro).

Pero' sarebbe utile usare una cartella apposita, perchè la macro salva decine e decine di file e poi non li cancella (l'idea era di rendere così disponibili anche i palinsesti dei giorni scorsi per eventuali ricerche a posteriori, tipo "come si chiamava quel programma che hanno fatto ieri sul tale canale...?").
 
jumpjack ha scritto:
Mi sa che nella fretta non leggi bene (o tutti) i miei messaggi... :)

Come dicevo, il percorso di salvataggio è indicato nella cella G1 del secondo foglio; SetupTempFolder() si limita a leggere quella cella e ad elaborarla poi in modo opportuno (cioè, semplicemente aggiunge in fondo un "\" e crea la cartella se non esiste).
Se in G1 c'e' già il percorso corretto, e se la cartella già esiste, SetupTempFolder() neanche serve, l'ho aggiunta solo per rendere più resistente agli errori la macro.

Se sei sicuro che una certa cartella esiste sempre su tutti i Mac, puoi semplicemente memorizzarne il percorso in PATH una volta per tutte a inizio macro. (PATH è una variabile globale della macro).

Pero' sarebbe utile usare una cartella apposita, perchè la macro salva decine e decine di file e poi non li cancella (l'idea era di rendere così disponibili anche i palinsesti dei giorni scorsi per eventuali ricerche a posteriori, tipo "come si chiamava quel programma che hanno fatto ieri sul tale canale...?").

Mi hai preceduto... avevo cancellato il post...:5eek: tutto chiaro!!!

PS hai letto i messaggi privati?
 
Ultima modifica:
Indietro
Alto Basso