Cerca con Google

Translate

9 giugno 2011

Tutorial 11 - Il nuovo componente WEB di App Inventor


Come visto qualche giorno fa, il team Google ha introdotto un interessantissimo nonchè potentissimo nuovo componente in App Inventor.
Si chiama semplicemente "Web" e ci permette di ricevere dati tramite HTTP GET o HTTP POST nella nostra applicazione.
Questo vuol dire che ogni pagina internet, server web, etc... potrà essere "interrogato" dalla nostra app e potremo avere a disposizione questi dati all'interno di app inventor.
Le possibilità si ampliano di molto rispetto al passato quando l'unico elemento per fare una cosa simile era "TinyWebDB" ma il suo uso era molto più complicato e laborioso.


Usando questo elemento sarà possibile ad esempio costruire un app che visualizzi le previsioni del tempo, le informazioni di borsa, le estrazioni del superenalotto e chi più ne ha più ne metta!
Per facilitare le cose dovremmo trovare una sorgente web che ritorni i risultati idealmente in CSV, ma con qualche lavoro extra sarà possibile leggere anche feed RSS o file XML.

Guardate il video dove ho creato una semplice applicazione che usa yahoo finance per controllare i valori di una azione del mercato azionario.


Vi riporto per comodità l'url che do in pasto al componente web1.url http://download.finance.yahoo.com/d/quotes.csv?f=nl1p2&s= a cui poi dovete aggiungere il nome del simbolo (di borsa) da cercare, come per esempio "eni.mi" o "goog" Dopo che l'app ha ricevuto la risposta dal server web, viene generato l'evento Web1.GotText e nella variabile responseContent avrò il contenuto in format testuale della pagina html richiesta Quindi nel caso dell'esempio del video il valore ritornato sarà ad esempio:
"DANIELI & C.",18.8800,"+1.45%"
 ovvero le informazioni riguardanti il titolo di borsa in formato .csv Per finire vediamo brevemente l'help di google (tradotto da me in italiano) del componente Web

Properties

ResponseFileName
Il nome del file che vogliamo salvare (se decidiamo di salvarlo) dopo aver invocato Web1.Get
SaveResponse
Flag per indicare se vogliamo salvare la risposta in un file o no
Url
L'URL della richiesta web.

Events

GotFile(text url, number responseCode, text responseType, text fileName)
Evento che indica che la richiesta ha terminato il suo lavoro
Se responseCode è 200 allora la risposta è ok (e viene salvata su file il risultato)
GotText(text url, number responseCode, text responseType, text responseContent)
Evento che indica che la richiesta ha terminato il suo lavoro
Se responseCode è 200 allora la risposta è ok (e responseContent contiene la risposta stessa)

Methods

Get()
Esegue un HTTP GET usando la proprietà URL e riceve la risposta.
Se SaveResponse è vero la risposta viene salvata in un file e l'evento GotFile è triggherato.
ResponseFileName può essere usato per specificare il nome del file.
Se SaveResponse è falso allora viene triggherato l'evento GotTextiggered.
text HtmlTextDecode(text htmlText)
Decodifica l'HTML , i caratteri e le entità HTML come &amp;, &lt;, &gt;, &apos;, and &quot; sono cambiate in &, <, >, ', and ".
text JsonTextDecode(text jsonText)
Decodifica il valore JSON ritornato. Se il testo JSON ha le virgolette, queste vengono rimosse.
PostFile(text path)
Esegue una richiesta HTTP POST usando la proprietà Url e i dati dal file specificato, e riceve la risposta. Se SaveResponse è vero, la risposta verrà salvata in un file e levento GotFile verra triggherato. La proprietà ResponseFileName può essere usata per specificare il nome del file. Se SaveResponse è falso, allora verrà triggherato l'evento GotText
PostText(text text, text encoding)
Esegue una richiesta HTTP POST usando la proprietà Url e il testo specificato, e riceve la risposta.
Se SaveResponse è vero, la risposta verrà salvata in un file e levento GotFile verra triggherato. La proprietà ResponseFileName può essere usata per specificare il nome del file.
Se SaveResponse è falso, allora verrà triggherato l'evento GotText
text UriEncode(text text)
Codifica il testo fornito in modo che possa essere utilizzato in un URL.
Aggiornamento 13/06/2011: Come mi è stato chiesto su un commento in Youtube (grazie Jappinahunter), vi faccio vedere come è possibile controllare che l'utente abbia effettivamente inserito una stringa nella casella di ricerca dell'azione. Così faremo partire la richiesta http get del componente web solo quando ce ne sia realmente bisogno. Questo il blocco da modificare nella nostra app per aggiungere questo controllo:
Come vedete controlliamo che dentro la casella SimboloAzione_Textbox ci sia scritto qualcosa (ovvero che la sua lunghezza sia maggiore di 0)
Semplice e funzionale!

79 commenti:

  1. Complimenti per il tutorial!! Sono partito subito da questo che mi interessava, ma ora vado a vedere anche quelli più semplici per imparare ancora meglio.
    Ciao!

    RispondiElimina
  2. Ho trovato il tuo blog tramite questo video, davvero bravo! Per caso hai in programma un tutorial sull'uso del metodo POST?
    Cioè invece di prelevare dati dal web, mandare dati (es. foto, testi) ad una form?
    Grazie Ciao!

    RispondiElimina
  3. non ho mai provato a fare nulla col metodo POST,però è sicuramente un idea che terrò buona per uno dei prossimi tutorial!Grazie per il suggerimento!

    RispondiElimina
  4. Ciao!
    ho seguito passo passo il tuo tutorial, ma al momento della chiamata web ricevo il seguente messaggio:
    BAD ARGUMENTS TO LIST TO CSV ROW.
    THE OPERATION LIST TO CSV ROW CANNOT ACCEPT THE ARGUMENT "ENI", 13.0800, "-1,65%".
    hai idea di quale sia la causa??
    ciao e grazie
    paolo

    RispondiElimina
  5. ciao, scusa se mi ripeto ma avevo inserito un commento qualche giorno fa che poi non ho visto pubblicato, volevo chiederti se sai da cosa può dipendere l'errore "Bad arguments to list to csv row: the operation list to csv row cannot accept the argument "ENI",13.7700,"-2.69". Ho seguito passo passo il tuo tutorial e mi sembra tutto ok, in effetti anche facendo il debug con la funzione watch legge la quotazione corretta di ENI, da cosa può dipendere?
    ciao e grazie
    paolo

    RispondiElimina
  6. Ciao Paolo, scusa se non ho risposto prima
    Hai provato a scaricare e far girare il mio sorgente?
    Di solito quell'errore lo da se il testo in ingresso è vuoto o non contiene virgole
    Se ancora non risolvi mandami i tuoi sorgenti e controllo...

    RispondiElimina
  7. Ciao complimenti tutto il sito ed i tutorial sono eccellenti. Volevo sapere come faccio ad usare altri siti per altre applicazioni? Esempio si può creare una galleria foto ma senza scaricare le foto, o quanto meno solo su richiesta.
    Alessio

    RispondiElimina
  8. Potresti usare il componente WebView ed aprire al suo interno la pagina di Picasa o Flickr con le foto che vuoi visualizzare

    RispondiElimina
  9. Ciao! vorrei sapere come posso creare un app semplice che dando in input l'url adeguato, mi dia in output il download del file pdf generato dall'url. non so quale funzione di WEB usare.. grazie!

    RispondiElimina
  10. Ciao Davide, non devi usare il componente web ma bensi un activitystarter con cui farai partire il browser all'indirizzo (che puoi prendere da una textbox di AI) con il tuo pdf.
    In questo modo il browser del tuo telefono scaricherà il pdf (vedrai il download nella barra delle notifiche)
    Guarda nella mia app Acqua Alta alla voce Altro, scarica pdf maree. E' questo quello che vorresti fare? fammi sapere, ciao

    RispondiElimina
  11. SI!! grazie mille ora è perfetto, ne ho fatta una che visualizza il contenuto in foreground ed un'altra che quindi scarica il pdf relativo al mio url. ancora grazie mille e complimenti per il blog!
    buon lavoro!

    RispondiElimina
  12. Non riesco a incollare il testo su un blocco text! ke tasto devo usare?

    RispondiElimina
  13. Se sei su windows control C per copiare e control V per incollare.

    RispondiElimina
  14. Ciao! Innanzitutto vorrei farti anche io i complimenti per la chiarezza ed i contenuti dei tutorial. Mi sono avvicinato da qualche giorno al mondo delle app e sto provando a crearne una. Ho trovato questo esempio molto calzante a quello che ho in mente e vorrei chiederti qualche ulteriore dritta a chiarimento: se anzichè una singola riga, il sito ti risponde con un elenco di righe con n campi e per ogni riga si vuole esporre sul form oltre ai campi anche un button da programmare in modo parametrico, come si procede?
    Ti ringrazio anticipatamente.

    RispondiElimina
  15. Quel che ritorna la funzione web è l'html del sito di cui vai a fare la query
    quindi starà poi a te fare il parsing dell'html e tirare fuori tutti i dati che ti interessano, lo puoi fare cercando dentro l'html dei tag specifici o delle keyword.
    Cmq il procedimento non è diverso,fai un app di prova e carica la pagina che ti interessa, poi guarda app inventor cosa ti ritorna e da li vedi come procedere, spero di esserti stato d'aiuto, ciao

    RispondiElimina
  16. Ciao... credo di non essermi spiegato bene.
    La mia necessità è di esporre, per ogni riga, una label ed un button.
    Non conoscendo a priori il numero di righe che mi ritornerà la funzione web, quindi dovrei poter creare a runtime tanti oggetti Label e Button quante sono le righe del dataset.
    E' questo passaggio che non riesco a capire come poterlo effettuare.
    Mi puoi aiutare a capire? Grazie.

    RispondiElimina
  17. Ciao mpiliego, come avrai visto i componenti nel design editor van definiti a priori, non puoi definire nulla a livello di runtime che sia un componente del design editor...
    Al massimo puoi sovrastimare il numero dei componenti necessari e lasciarli vuoti o non visibili se non ti servono.
    Altrimenti puoi usare una sola label e formattarla in modo adeguato.
    Ma non puoi putroppo creare tante label e button quante sono le righe...diciamo che è una limitazione per come è stato costruito App Inventor.

    RispondiElimina
  18. Ciao, complimenti per il blog ed i tutorial; davvero interessanti. Sto provando ad usare il web component con il metodo web1.gotfile. Io voglio:
    - visualizzare la pagina web attraverso web view (e credo di saperlo fare)in cui compare l'anteprima di un immagine;
    - scaricare e salvare questa immagine in una cartella di destinazione predefinita clickando su un tasto dell'applicazione e non del sito dove è salvata l'immagine. Credo che per fare questo debba usare web1.gotfiles, ma non riesco a capire come funziona.
    Spero di essere stato abbastanza chiaro, ti ringrazio e aspetto una tua risposta. Ciao :)

    RispondiElimina
  19. Ciao! Complimenti per il tuo blog!
    I Tuoi tutorial sono fantastici!
    Vorrei chiederti una cosa..ho fatto una prova di un'app che scarica un file dato da un indirizzo web..il problema, se così lo vogliamo chiamare, è che mi apre la "finestra" del browser e poi fa il download..si potrebbe evitare di aprire questa "finestra" e fare direttamente il download?..o quantomeno chiudere il browser a download finito..
    Grazie mille!!!

    RispondiElimina
    Risposte
    1. Ciao,non capisco bene, usi il componente web o un activity starter?
      con l'activity starter per esempio nella mia app, quando scarichi il pdf della marea si apre per un attimo il browser ma poi si richiude e vedi il progresso del download nella notification bar.
      Se invece usi il componente web non dovrebbe aprire nessuna finestra ma semplicemente salvare il risultato dove glielo specifichi in ResponseFileName

      Elimina
    2. Intanto ti ringrazio per la risposta!
      Per me utilizzare il componente web o un activity starter è uguale, al momento ho provato con l'activity starter e mi compare un attimo il browser come a te.. me c'è un modo che permette di fare questo download in modo "trasparente"? cioè senza che mi apra nulla, clicco il button per il download e parte subito il download ;)
      Grazie mille!

      Elimina
    3. Prova col componente Web anche se non son sicuro salvi qualunque tipo di file, forse salva solo pagine html.
      Facci poi sapere,al momento non riesco a testare di persona al cosa mi dispiace.

      Elimina
    4. Nada :/ Funzia solo con l'activity ;)

      Elimina
    5. Ora però ho un problema..dopo che faccio partire l'activity per il download, il browser non si chiude da solo ma devo uscire io.. è possibile fare in modo che partito il download il browser si chiuda e torni alla mia app?

      Grazie :)

      Elimina
    6. EDIT: ;) risolto :)
      Vorrei sapere una cosa, è possibile contattarti in privato? Avrei una cosa da chiederti :)

      Grazie :)

      Elimina
    7. Certo, scrivimi per mail o MP di G+ :)

      Elimina
  20. Buongiorno, ringrazio per i preziosi tutorial. Grazie appunto a queste guide sto cercando di implementare un programmino android che gestisca un portafoglio titoli. Vorrei sapere come è possibile ad esempio effettuare una query che mi consenta di avere un elenco di titoli quotati in italia, piuttosto che ad esempio i titoli che negli ultimi mesi hanno realizzato migliori/peggiori performance. E' possibile?
    ringrazio in anticipo e buon android!

    RispondiElimina
    Risposte
    1. Dipende tutto dalla "sorgente" dati che utilizzi,io ho mostrato il funzionamento con yahoo finance e con un singolo titolo, ma di sorgenti che danno dati finanziari ce ne sono molte altre.
      Il lavoro da fare è appunto quello di trovare una sorgente che ti dia i risultati voluti con una http get e poi fare il parsing di questi dati nella tua applicazione.
      Puoi provare a fare tutto questo anche prima di addentrarti in app inventor, l'importante è trovare il sito che ti dia i dati in un formato quanto più possibile simile a una forma testuale o xml (perchè poi è più facile fare il parsing)
      Spero di averti chiarito un pò le idee, semmai guarda anche i video dell'estrazione dati da sorgenti xml dove trovi altre informazioni utili.
      ciao

      Elimina
  21. Ciao Sebastiano e,prima di tutto,grazie per il gran lavoro che stai facendo : seguo il tuo blog da un bel pezzo e mi è di grandissima utilità!
    Sto cercando di sviluppare una app che, tra l'altro, scarichi file .pdf da un indirizzo specifico ... ho provato con il webviewer e con il componente web, ma non c'è stato nulla da fare ...o mi da errori 1109 0 1100 oppure - che è peggio - non fa assolutamente NULLA ! In teoria dovrebbe essere facile, quando clicko un pulsante web1.url viene settato ad un indirizzo, e poi lancio il web1.get ma non c'è nulla da fare, nemmeno se utilizzo il comando we1.gotfile B-(
    Mi puoi dare una mano ? Grazie ...

    RispondiElimina
    Risposte
    1. Cosa vuoi fare poi col pdf? visualizzarlo con il lettore pdf eventualmente installato sul tuo telefono? utilizzarlo all'interno della tua app?
      Perchè onestamente non penso che il componente web possa scaricare tutto un pdf e sopratutto non so poi come potresti visualizzarlo all'interno di App Inventor (non ci sono blocchi per la gestione dei pdf)
      quello che puoi fare è far partire un activitystarter come per aprire una pagina web puntando all'indirizzo del file pdf (così lo scaricherà nel telefono, un pò come accade nella mia app acqua alta)
      Altrimenti puoi usare sempre activitystarter e lanciare direttamente il programma per la visualizzazione pdf, però in questo caso il "problema" è che non tutti gli utenti potrebbero aver installato che ne so Adobe Reader.
      Scrivimi per email cosa vuoi fare esattamente e vedo come posso aiutarti!

      Elimina
  22. Innanzitutto grazie per la velocità B-)
    L'idea è di lanciare il download del pdf che poi l'utente leggerà come e quando vorrà.Penso che si possa fare con il componente web,ma non riesco a farlo funzionare : o mi segnala degli errori (1109) o non fa proprio nulla ! Cosa mi puoi consigliare?
    Nel frattempo...grazie!

    RispondiElimina
    Risposte
    1. Sbagliato! non si usa il componente web,tu vuoi semplicemente lanciare il browser all'indirizzo con il file pdf che ti interessa.
      Guarda il tutorial sugli activitystarter (tipo quello di Google Maps) per avere le idee più chiare.
      Ad ogni modo ti può essere utile anche il seguente esempio:

      Opening a browser to a specified web page. Assuming the page you want to go to is "www.facebook.com" (feel free to substitute your own choice), set the properties to:

      Action: android.intent.action.VIEW
      DataUri: http://www.facebook.com

      Al quale ovviamente devi collegare un pulsante che esegua poi l'activitystarter

      Elimina
    2. PEFETTO !
      Problema risolto B-)
      Se riesco a finire in modo decoroso questa applicazioncina te lo faccio sapere !

      PS grazie davvero

      Elimina
  23. guardo...ci provo e ti faccio sapere ...

    RispondiElimina
  24. Ciao Seba
    complimenti per i tutorial. Avrei bisogno del tuo aiuto. Ho provato il componente webviewer per visualizzare un video su youtube; la pagina viene caricata correttamente, ma il video non parte. Potresti cortesemente aiutarmi ?
    Ciao e grazie mille !!!

    RispondiElimina
    Risposte
    1. la webview usa il broswer del telefono,quindi se il telefono non supporta flash o non lo ha installato il video probabilmente non parte.
      Se youtube parte in html5 dovrebbe andare, onestamente non ho mai provato, semmai prova a linkare le pagine mobile di youtube (quelle che iniziano con m.youtube...)

      Elimina
  25. Ciao Seba. Una domanda: dovre trovo il comando ...call "Notifie1Shortallert" Notice...che hai postato sotto al video?
    Grazie ancora per questi tutorial spettacolari.

    RispondiElimina
    Risposte
    1. devi aggiungere in design editor il componente (non visibile) Notifier, si trova nella palette "Other"
      dopodichè lo potrai usare anche nel blocks editor

      Elimina
  26. Ciao, bel tutorial, mi piace molto questo blog tuoi video sono eccellenti e molto ben spiegato.
    Vorrei sapere come posso prendere i contenuti del mio sito Drupal 7.10 per un app.
    se pudiras contattarmi via e-mail per spiegare più sarebbe buono.
    Complimenti per il tuo eccellente blog e video

    RispondiElimina
  27. Ciao e ancora grazie per tutto quello che stai facendo. Credo di interpretare il desiderio di molti chiedendoti un tutorial sul metodo POSTFILE visto che in rete non si trova assolutamente nulla nemmeno in inglese. Io sto provando senza successo da qualche giorno a fare l'upload di un file dalla SD al PC. Il download da PC invece con il metodo GET non ha problemi. Potresti darci qualche dritta? Penso che sicuramente sbaglio la sintassi complessivamente e l'impostazione delle requestheaders...o sto cercando di fare qualcosa di impossibile??? P.s. come server uso HFS. Ciao

    RispondiElimina
    Risposte
    1. purtroppo di server web ne so poco e pertanto ho grosse difficoltà ad aiutarvi col metodo POST, quando avrò tempo proverò a guardarci ma la cosa mi sembra parecchio complicata.
      Ho letto nei gruppi in inglese di qualcuno che sta cercando di fare la stessa cosa, prova a vedere per esempio qua
      http://ai.kittywolf.net/index.php/WolfWebEmail2

      Elimina
    2. Ciao, ho risolto aggirando il problema installando easyphp server. In pratica invio una URL all'indirizzo di rete del PC tramite il componente web.La URL apre uno script php che effettua il download del file che voglio da telefono a PC.

      Elimina
  28. Ciao,
    sto provando ad estrarre dati da un file xml (feed rss). Fino a ieri tutto ok: ora mi ritorna l'errore 1101 - impossibile avere la risposta dall'URL. Come posso risolvere il problema?

    Grazie

    RispondiElimina
    Risposte
    1. Potrebbe essere un errore temporaneo del server web? prova ad aspettare qualche ora e poi riprovare, se ancora non va o vieni sul forum e metti i blocchi che hai utilizzato o mandami il sorgente per email

      Elimina
    2. Mi sembra strano: se lo carico dal PC è tutto ok. Aspetto qualche ora sperando che tu abbia ragione. Come potrei mandarti i sorgenti via email o ppure mettere i blocchi sul forum?

      Grazie

      Elimina
  29. ho provato a creare il componente web ma mi da questo errore Bad argument list to csv row The operation list csv row cannot accept the arguments: "Eni",17.1500,"-1.49%. qualche mesetto fa ho visto che avevate consigliato a paolo-b di scaricare il mio sorgente, di cosa si tratta? Grazie in anticipo

    RispondiElimina
    Risposte
    1. Ciao Ernesto,quell'errore viene dato di solito quando la funzione list from csv row non ha in ingresso dei valori formattati correttamente come .csv, può accadere perchè magari il server web non da una risposta valida (problema temporaneo) o perchè hai sbagliato qualcosa nel codice,prova a ricontrollare bene il tutto, eventualmente se hai ancora problemi puoi condividere il tuo progetto (facendo download source da my project) e caricarlo su google drive o un servizio simile, altrimenti puoi mettere uno screenshot dei blocchi utilizzati e postare nel forum il tuo problema.

      Elimina
  30. Ciao e complimenti per tutto il tuo operato. Sono un novizio e forse la mia domanda è un po' sempliciotta, ma come si recupera il testo API? Nel video non riesco a capire..

    RispondiElimina
  31. Ho rivisto bene il video e ho capito il sistema. Mi rimane il dubbio su una cosa, nell' url inserisci il filtro nl1p2, se elimino p2 non mi compare la percentuale, quindi potrei invece inserire altri parametri per avere piu info come risultato? Se per esempio voglio aggiornamenti in diretta di una squadra di calcio, i filtri che che vanno immessi credo siano diversi, dove posso trovare spiegati questi tipi di filtri? ciao

    RispondiElimina
    Risposte
    1. Tutto quello che inserisco nel testo del componente web non fa parte direttamente di App Inventor, ma sono appunto le "api" che vengono rese disponibili da alcuni siti (tipo nell'esempio yahoo finance) per estrapolare dei dati dal sito verso l'esterno (l'esterno in questo caso è la nostra app...)

      Quindi nel caso delle tue domande specifiche dovresti cercare in internet informazioni sulla sintassi delle api di yahoo finance
      Una rapida ricerca google ti porta ad esempio a questa pagina:

      http://code.google.com/p/yahoo-finance-managed/wiki/csvQuotesDownload

      dove trovi spiegato come costruire l'url per la restituzione di vari dati dal sito di YFinance
      spero di averti un pò chiarito le idee! ciao

      Elimina
  32. Tutto chiaro, ora ho una visione piu completa. Ho già trovato un sito (inglese) di football che fa per me. Certo che se esistesse nel web una lista dei siti che supportano questo tipo di trasmissione dati sarebbe tutto piu facile e intuitivo, provo a cercare...
    grazie

    RispondiElimina
    Risposte
    1. Ciao Gurzu2, scusa se mi intrometto ma avrei anch' io la necessità di fare qualcosa del genere (cioè accedere ad un formato formattato, tipo xm o html dei risultati di calcio).
      Potresti dirmi quale sito hai trovato e se sai già come ci si debba interfacciare con esso?
      Grazie anticipatamente

      Elimina
  33. Perdonami Seb e tutti gli amici che ti seguono se la mia domanda può sembrare, e lo è, veramente "terra terra"... nel momento in cui hai un "progetto" in testa e vorresti ottenere dei dati, come compi la ricerca sui siti o servizi che rilasciano API ?? O meglio come si riesce a sapere se c'è la possibilità di gestire delle API su un determinato sito ?
    Quasi arrossisco per la mia domanda

    RispondiElimina
    Risposte
    1. la cosa più semplice è cercare con Google le parole chiave: nome del sito + api + documentation
      per esempio appunto con "yahoo finance api documentation"
      oppure in italiano (ma spesso c'è poca documentazione in italiano)
      Purtroppo non credo esista una lista esaustiva di tutte le api di tutti i siti esistenti, credo non sia una cosa fattibile.
      Oppure parti con la parola chiave dei dati che vuoi caricare tramite api e cerchi allo stesso modo, che so "weather api documentation" e vedi quali siti eventualmente offrono
      insomma, prima bisogna fare un lavoro certosino di ricerca ;)
      tranquillo la domanda non è banale me l'hanno fatta in tanti :)

      Elimina
    2. Grazie Seb, gentilissimo... come in AI inizierò a mettere insieme il puzle

      Elimina
  34. scusa potrei farti una domanda, non riesco a trovate come fare un autenticazione ad un sito, quindi login e password per per entrare nella mia sezione , potresti aiutarmi? anche con un link

    RispondiElimina
    Risposte
    1. ciao, non sono esperto in materia, prova a dare un occhio su questo sito:
      http://puravidaapps.com/tutorials.php#taifunOA

      Elimina
  35. Ciao complimenti per il gran lavoro:)
    Avrei bisogno di un aiuto:Vorrei utilizzare le api di youtube per una app.Sul tuo video di esempio sono in csv mentre le api di youtube che ho trovato sono tipo :https://gdata.youtube.com/feeds/api/videos?=
    Se provo con il tuo esempio non funziona.Dove sbaglio??Grazie mille!!!

    RispondiElimina
    Risposte
    1. non sbagli nulla, semplicemente se le api ti ritornano i valori in csv puoi leggere facilmente i dati nella tua app, invece se come nel tuo esempio ritorna una pagina (che mi sembra sia un feed rss in formato xml) allora il lavoro è molto più complicato perchè devi fare il "parsing" di tutta la pagina per estrarre i tag xml che ti interessano, se vuoi ci sono un paio di tutorial sull'xml che ti potrebbero schiarire le idee, ciao

      Elimina
  36. Il comando Get genera un alert quando non c'è connessione internet che invade 1/3 del display. Per eliminarlo si deve riavviare il cellulare. Si dovrebbe scrivere una istruzione condizionale che interrompa la procedura quando manca la connessione. Come rilevare la mancanza del segnale? Grazie.

    RispondiElimina
    Risposte
    1. Ciao, grazie per la segnalazione, è uno dei prossimi tutorial che voglio sviluppare, ad ogni modo bisogna controllare il response code della funzione web ed anche eventuali errori nell'applicazione stessa, ti farò sapere a breve la soluzione, ciao!

      Elimina
  37. Ciao....prima di tutto volevo farti i miei complimenti per tutti i tutorial...da poco uso app inventor ma trovo sicurezza nei tuoi tutorial !!! Grazie e spero che continuerai ;) ... Ho già provato quest'app nel mio telefono android e funziona....ma se io volessi fare un app che mi da le previsioni del meteo, che url dovrei mettere ?? Cioè tu hai messo "http//download.yahoo...." io cosa dovrei mettere ?? :D Grazie in anticipo !! :D

    RispondiElimina
    Risposte
    1. Ciao, grazie per i complimenti, per modificare l'app e crearne una per le previsioni meteo devi trovare come si "costruisce" l'url per prendere le previsioni meteo (da yahoo per esempio), analizzare il file xml o html che ti ritorna la pagina e poi elaborarlo in app inventor per fare in modo di visualizzare solo i dati che ti interessano.
      Puoi vedere un implementazione simile al seguente tutorial:
      http://seblogapps.blogspot.it/2011/07/tutorial-17-importare-dati-da-pagina.html
      oggi però non funziona più perchè le api di google weather sono state rimosse, il procedimento cmq sarà simile se si usano quelle di yahoo, ho anche in programma di fare un tutorial aggiornato sull'argomento, ma per ora guardati bene anche quello sperando che ti sia d'aiuto
      ciao

      Elimina
  38. Salve sebastiano vorrei crare proprio col componente WEB un'applicazione sul superenalotto come posso fare

    RispondiElimina
    Risposte
    1. Ciao Raia,
      bisogna trovare una sorgente affidabile in XML o RSS (o ancora meglio esistesse un API apposita)
      che fornisca le ultime estrazioni del superenalotto, poi con un procedimento simile a questo tutorial (o al tutorial 51 appena pubblicato) si possono leggere e visualizzare le estrazioni.
      Se trovo qualcosa ad-hoc ti faccio sapere, magari anche con un tutorial, ciao

      Elimina
    2. Novità io onestamente non trovo nulla (sono la stessa persona)

      Comunque fai dei bellissimi tutorial sei bravissimo.

      Elimina
    3. nel tal caso devi usare la tecnica del "web scraping" come spiego a grandi linee nel tutorial 38 (http://seblogapps.blogspot.it/2012/11/tutorial-38-importare-dati-da-una.html)
      ovvero trovare almeno una pagina web che possibilmente non cambi nel formato nel tempo (altrimenti devi adattare ogni volta anche la tua app)
      e che abbia le estrazioni del superenalotto (ad esempio) in una tabella html che è abbastanza facile da leggere (come mostro appunto nel tutorial con la classifica di serie A)

      In alternativa ti puoi caricare tutta la pagina web (sempre col componente web) ad esempio questa:
      http://www.estrazionedellotto.it/superenalotto/
      e poi analizzare dove ci sono i numeri estratti nel file html ed usando le funzioni testuali di AI, estrarli per poi utilizzarli nella tua app.
      Non è semplice ma è fattibile, ci vuole solo tempo e pazienza :)

      Elimina
    4. Fortunatamente io ho tutti e due ma non so come fare si potrebbe fare come nel tuo tutorial 51 con l'estrazione di un xml??

      Elimina
  39. Vabbè non fa niente ho risolto sono riuscito a creare una bozza ti manderò i link nei commenti adesso non posso perché sto sul cellulare

    RispondiElimina
  40. Ciao, ho una richiesta da farti ... sono abbonato ad una rivista online e con una url con parametri vari (user, password, data del giorno, ecc) riesco ad aprire, e salvare sul tablet, con il browser la rivista in pdf.

    Posso usare il componente web x fare una app che mi scarichi direttamente il pdf senza passare per il browser?

    Grazie, Ciao, Francesco

    RispondiElimina
    Risposte
    1. dovrebbe essere possibile, a patto che la URL possa essere inviata correttamente (nel senso che non ci sono chiavi od altri dati creati di volta in volta per l'autenticazione), non so che rivista sia ma mi pare strano sia così semplice scaricare un pdf dando solo l'url...
      cmq se fosse così puoi usare il componente web, ed usare il metodo "SaveResponse" e "responsefilename" per salvare il tuo file pdf sul tablet.
      Poi quando hai il file pdf puoi lanciare ad esempio adobe reader tramite activitystarter.
      In linea teorica quindi si può fare! in bocca al lupo, facci sapere come va!

      Elimina
    2. Grazie x la pronta risposta. Provo e vi tengo informati.

      Elimina
  41. mi potresti spiegare cortesemente come si puo' formattare l'uscita in modo da mostrare una tabella?
    ti do il mio csv
    https://docs.google.com/spreadsheet/pub?key=0AlSF7MwJfI-xdGEtSlcyUlZwQWVyV3h4UzV6WUZFVGc&output=csv

    riesco a importare i dati ma non a formattarli in maniera da visualizzare in modo corretto le 4 colonne (incolonnarle ...)

    e poi mi spuntano delle fastidiose ( ) in ogni riga

    grazie seba

    RispondiElimina
    Risposte
    1. da csv non formatti nulla ma puoi solo prendere i dati "grezzi" che poi formatti nella tua app,
      in pratica nell'app crei tante textbox quante sono ad esempio le tue righe e le tue colonne, poi ad ogni textbox imposti il valore andandolo a leggere dal file csv,
      per farti capire guarda l'esempio dell'import da tabella html (quello della classifica di serie A), il procedimento è quello.
      E come vedi li ad esempio ho impaginato le tre squadre coi tre punteggi (se ricordo bene).
      Solo che così è un pò più lungo e laborioso ma almeno ti formatti te come vuoi i dati
      Se invece usi la webview non ti so aiutare perchè non mi sono mai interessato molto su come si possa "impaginare" l'output in html da google docs, ma forse cercando su internet puoi trovare qualche informazione in più se e come si può fare questa cosa.
      Non devi cmq visualizzare direttamente il risultato della get del componente web perchè altrimenti come hai visto ti escono le parentesi (che delimitano un dato dall'altro) e non hai le righe e le colonne ma hai tutto di seguito.
      Spero di averti aiutato, ciao!

      Elimina
  42. Come faccio se il sito è in aspx e non in csv?

    RispondiElimina
    Risposte
    1. Non è il sito che è in csv, ma è il formato che ti ritorna la query HTTP che fai con il componente web.
      Quindi se il tuo sito è in aspx ma ti ritorna comunque il risultato in csv sei a posto,
      altrimenti devi trovare un modo per ottenere gli stessi dati dalla tua pagina aspx ma in formato csv (penso devi agire lato server quindi devi essere te il proprietario del sito)
      Non sono molto pratico di aspx, se ti ritorna tutto in forma testuale magari puoi programmarti te con app inventor delle funzioni che facciano il parsing ed estraggano i dati di tuo interesse

      Elimina
    2. Questo commento è stato eliminato dall'autore.

      Elimina
  43. ciao sono nuova in questa affascinante avventura
    vorrei sapere da voi se fosse possibile in app inventor mettere nell applicazione (sara' difficile spiegarmi...) una stringa di ricerca simile a google che mi fara' apparire i risultati di svariati siti in un unica ricerca Esempio:cerco una bicicletta usata a Roma e mi trovera' degli annunci su Roma su i vari siti e me li fara vedere in un unica pagina vi ringrazio anticipatamente

    RispondiElimina
  44. Sto creando un quiz Vero o Falso su MIT App Inventor 2. Ho creato 3 liste con una variabile globale Domande, Immagini e Risposte. Quando passo allo Screen2 appare l'errore:The operation select list item cannot accept the arguments: Dice che non è possibile selezionare un elemento dalle liste che ho creato. Devo inserire un indice? però se inserisco un indice non posso inserire Pick a Random Item. Non so come risolverlo.

    RispondiElimina