Aller au contenu

Création d'une appli: "interroger" 1 page web et en tirer des morceaux


Profete162

Recommended Posts

Bonjour à tous,

Pour ma première appli ( ma premiere idée de photos HDR était ridicule), j'aimerais interroger une page web qui contient des formulaires à remplir ( exemple: itinéraires de train-avion, etc...) et affichet les résultats dans mon appli.

Je pense que c'est un bon but simple, mais j'ai besoin de quelques lignes ou d'applis similaire à décortiquer pour me faire une idée.

Possédez vous des snippet ou un tuto java/android/autre qui me permettrait de me faire une idée de la marche à suivre?

C'est une technique un peu particulière qui diffère de tous les tutos que je trouve.

Je vous remercie d'avance pour tous les renseignements que vous pourriez m'apporter.!

EDIT:

Je pense que j'ai besoin de 2 infos claires et pas trop difficiles (je l'espère.. lol)

1) comment se connecter à une page web et remplir des champs d'un formulaire?

2) comment remettre en page les résultats recus?

RE-EDIT:

J'ai trouvé ceci, mais je n'y comprends rien, est-ce une piste à crauser?

http://www.developpez.net/forums/d446518/java/general-java/langage/remplir-formulaire-html-java/

Modifié par Profete162
Lien vers le commentaire
Partager sur d’autres sites

Pour vous donner plus d'infos, je pense qu'il s'agit d'un formulaire de type "GET"( je viens d'apprendre le mot à l'instant)

Je pense donc que cela sera un peu plus facile pour moi :-p

car l'adresse est de type:

http: //hari.b-holding.be/Hafas/bin/query.exe/fn?&REQ0JourneyStopsS0A=1&REQ0JourneyStopsS0G=mons&REQ0JourneyStopsZ0A=1&REQ0JourneyStopsZ0G=charleroi-sud&REQ0JourneyDate=22.009.09&REQ0JourneyTime=22:005&Timesel=depart&ViaName=&ViaMode=NEE&DateMode=ANDERS&PLANNER=TRUE&start=1&queryPageDisplayed=yes

Je pense qu'en fait, je n'aurai pas besoin de remplir le formulaire car toutes les infos sont comprises dans l'URL!

Modifié par Profete162
Lien vers le commentaire
Partager sur d’autres sites

pfiou.... bon c'est chaud :D

le pb étant que t as une première requête qui va chercher la corespondance entre deux saisies de villes et des villes existantes.

En gros tu peux tape depart : B arrivée : C ça te rempli deux listes de choix....

plus toutes les options du formulaire ...tu vas t'amuser.

et en plus apparement t'as pas le droit :

http://www.b-rail.be/main/F/legal/copyright/index.php

mais bon, en gros ton GET ça marche comme ça:

dans ta page si tu as un formulaire avec une saisie et un bouton, tu auras dans le code HTML de la page un truc comme ça:

un texte appelé montexte et un bouton et l action toto.php.

si tu appelle la page via tonsite/toto.php?montexte=bonjour

c'est comme si tu avais tapé bonjour dans le texte ...le problème c'est que si tu regarde le code de ton formulaire...il est compliqué.

ET l'action prend une sale tête à la fin:

http://hari.b-holding.be/hafas/bin/query.exe/fn?seqnr=1&ident=0f.0429611.1253653262&OK#focus

le ident=pleindetrucsalaconquejepigepasdoucavien

et surtout le liste de choix de villes qui n apparait pas dans le code....donc surement récupéré en ajax quelquepart :/

là t'es mal barré (c'est faisable mais c'est ptetre plus chiant que le hdr :lol: :lol: :lol:

Bon en tout cas pour faire un get: dans l example url est la chaine que tu as donné, http://xxx/toto.html?bidule=truc&etc


                    httpclient = new DefaultHttpClient();
            HttpGet get = new HttpGet(url);
                HttpResponse response;

           response = _httpclient.execute(get);
           HttpEntity entity = response.getEntity();        

           if (entity != null) {

ICI LES TRUCS A FAIRE

               entity.consumeContent();
           }
       } catch (ClientProtocolException e1) {

           e1.printStackTrace();
       } catch (IOException e1) {

           e1.printStackTrace();
       }        

alors les trucs à faire c'est récupérer un inputstream à partir de la response et balancer ça dans je sais plus quoi pour avoir le texte de la page, ou directement la traiter en XML.....si tu veux je fais un exemple sur la page de recherche google qui est vachement plus simple ..... lol

Lien vers le commentaire
Partager sur d’autres sites

Merci pour toutes les infos, je vais lire attentivement ton message!

Je pense que c'est plus simple que ce que tu dis: si j'arrive à joindre cette page en remplacant les caracteres en gras suivants:

(pour éviter qu'il ne mette automatiquement des balises html sur le forum, j'ai retiré le http de l'adresse

//hari.b-holding.be/Hafas/bin/query.exe/fn?&REQ0JourneyStopsS0A=1&REQ0JourneyStopsS0G=VilleA&REQ0JourneyStopsZ0A=1&REQ0JourneyStopsZ0G=VilleB&REQ0JourneyDate=22.009.09&REQ0JourneyTime=22:005&Timesel=depart&ViaName=&ViaMode=NEE&DateMode=ANDERS&PLANNER=TRUE&start=1&queryPageDisplayed=yes

ca passera, non?

EDIT: merci pour l'avertissement "légal" sur le site. Je suis en train d'écrire un mail à la SNCB pour demander si je peux developper l'appli.

Au pire, je ne la distribue pas et m'en sers d'exercice.

Modifié par Profete162
Lien vers le commentaire
Partager sur d’autres sites

ah oui ça a l air de passer mais la ville doit etre très précise avec arrêt et tou:

//hari.b-holding.be/Hafas/bin/query.exe/fn?&REQ0JourneyStopsS0A=1&REQ0JourneyStopsS0G=bruxelles-midi%20[b]&REQ0JourneyStopsZ0A=1&REQ0JourneyStopsZ0G=Ville-Pommeroeul%20[b]&REQ0JourneyDate=22.009.09&REQ0JourneyTime=22:005&Timesel=depart&ViaName=&ViaMode=NEE&DateMode=ANDERS&PLANNER=TRUE&start=1&queryPageDisplayed=yes

l j ai mis Bruxelles-midi [ B ] avec %20 pour l espace...

Va falloir que tu ait toutes les gares et arrets prédéfinis.....gloups mais dans ce cas ça marche.

Donc méthode : faire un get avec apache (HttpGet), récupérer la HttpResponse, la mettre dans un xml ou String pour décomposer le résultat.

avantage du String : tu peux couper la partie qui t interesse (genre le tableau de corresponsances avec horaires) pour la mettre dans un webview et l afficher direct sans manip.

Lien vers le commentaire
Partager sur d’autres sites

bon je te file un code (tuto si j y arrive) pour choper une page

et en récupérer un String. (mais pas avant demain soir)

En gros on chope google et on injecte le resultat dans un WebView. (ça sers à rien...lol)

après tu n aura plus qu'à recup ta page de trains...mais bon en extraire les resultats va être tendu.

Lien vers le commentaire
Partager sur d’autres sites

bon je te file un code (tuto si j y arrive) pour choper une page

et en récupérer un String. (mais pas avant demain soir)

En gros on chope google et on injecte le resultat dans un WebView. (ça sers à rien...lol)

après tu n aura plus qu'à recup ta page de trains...mais bon en extraire les resultats va être tendu.

Je me rends bien compte, mais rien que le faire avec Google sera déjà un excellent exercice et un tuto qui, je le pense, servira à plein de monde!

(J'ai mon appli qui demande les 2 champs départ-arrivée et qui reconstruit l'URL désirée en string, donc une fois que j'aurai le code HTML dans une textview, je serai super content!.)

Je ne t'en demanderai pas plus, promis.

Modifié par Profete162
Lien vers le commentaire
Partager sur d’autres sites

En fait, j'ai trouvé ceci:

        setContentView(R.layout.main);


       Toast my_message = Toast.makeText(this,"Message1",1);
       my_message.show();


       try {
           URL url = new URL("http://www.google.com");

           BufferedReader in = 
               new BufferedReader(new InputStreamReader(url.openStream()));
           String str;

           while ((str = in.readLine()) != null) {
               System.out.println(str);
               my_message = Toast.makeText(this,"Message2",1);
               my_message.show();


           }

           in.close();
       } 
       catch (MalformedURLException e) {} 
       catch (IOException e) {}

Qui ne fonctionne malheureusment pas... Le message1 s'affiche bien, mais pas le second

Lien vers le commentaire
Partager sur d’autres sites

t'es fou !!!!!!

une fois en faisant une boucle foirée sur des toasts il m a fallu 30 minutes pour qu'ils s'affichent tous !!!!!!

mets ton texte dans une chaine et sors la avec System.out.println(tachaine)

ou Log.d("ton applis",tachaine)

et ça sors sur le logcat que tu consulte via la vue DDMS dans eclipse.

(pour débugger c'est sympa)

Sinon tu pose un point d'arret et tu lance en debug (mais ça rame)

des questions sur DDMS ou le point d'arret ?

Au passage petite habitude (pas forcément correcte sur mobile) à prendre.

T upeux faire:

Toast.makeText(this,"Message1",1).show();

ça évite la variable inutile.

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...