Aller au contenu

Besoin d'aide: projet gratuit et communautaire de transports.


Profete162

Recommended Posts

Salut le peuple,

Je fais appel à vos connaissances pour un soucis et une philosophie sur laquelle je bloque depuis un moment déjà. Je pense que certains d'entre vous pourraient peut-être trouver en 10-20 minutes la solution à un soucis qui me trotte dans la tête depuis un an déjà.

Le principe de base est assez simple, c'est mon appli de scrapping du site web de la SNCB ( équivalent de la SNCF en Belgique) qui bloque depuis hier. J'ai utilisé une méthode un peu bourrine et évidemment cela ne fonctionne plus apres remodelage du site.

Cette appli s'appelle BETrains, est gratuite sur le market, et elle permettait en plus d'afficher les horaires de trains et les classiques recherches:

* Lancer Google Navigation vers n'importe quelle gare belge!

* Permet une sorte de chat par train. Cr0vax l'a essayé lors d'un voyage à Bruxelles et semblait s'amuser avec. J'ai transformé ces dialogues ( disponibles dans les détails de chaque train depuis l'appli) en un flux twitter. Cela vous permettra de vous rendre compte du succès et de l'utilité d'une telle option: http://twitter.com/betrains

* Position quasi en temps réel d'un train sur Google Maps ( inutile donc indispensable)

*etc.

Je vais commencer par la partie philosophique qui va faire un gros pavé et ensuite la partie technique.

Cela pourra laisser la place à un gros sujet de discussion philosophique et technique et ca peut être sympa.

Philosophie - légalité:

Je sais que l'on va me dire que ces données sont protégées par copyright cités sur la première page, mais faire une appli qui se connecte aux pages avec les avantages d'un smartphone et de l'appli dédiée ( position GPS, listviews, boutons cliquables, etc..) et vraiment supérieur à un site web simple ( en plus, je fais la concrégation des infos de 3 sites webs)

Je me pose donc une première question pour savoir en quoi cette appli est différente d'un navigateur web avec des skins ou des codes css propres. Si on veut interdire une telle application, pourquoi ne pas interdire alors tous les modules et css qui permettent de skinner une page web? Quelle est la différence entre une appli de ce type et un navigateur optimisé pour un site? J'ai vu beaucoup d'extensions Firefox permettant de modifier l'apparence d'une page web et resculpter son design soi-même

Deuxième point: Un autre utilisateur belge à créé un site optimisé pour smartphones: irail.be permettant à peu pres la même chose que m.sncb.be, mais sous une forme plus adaptée au smarphones. Je vous invite donc à essayer ces 2 sites et l'applications BETrains android avec votre smartphone et de me dire ce que vous en pensez.

Il a donc comme moi contacté la SNCB depuis plus d'un an demandant à utiliser leurs données, et est évidemment resté sans réponses. Il y a quelques semaines, une lettre de menaces de poursuite en justice. L'affaire a fait pas mal de bruit, un cabinet d'avocats s'en est mêlé et le site est maintenant de retour ( preuve que l'on ne pourrait pas interdir ce genre de pratique? )

Plus de détails ici pour les curieux: http://blog.tuinslak.org/2010/07/irail-is-back/

Voilà, je vais voir pour tenter d'en faire une news, prendre vos avis et voir vos connaissances juridiques, et lancer un débat.

Partie technique:

Pour les curieux et les programmeurs, il faut savoir que pour ma part, ne connaissant rien aux proxy, sniffer de paquets, cookies, etc.. mon appli fonctionnait en utilisant une adresse de ce genre:

Cliquez dessus et regardez la bien pour vous en rendre compte:

http://hari.b-holding.be/Hafas/bin/query.exe/fn?&REQ0JourneyStopsS0A=1&REQ0JourneyStopsS0G=MONS&REQ0JourneyStopsZ0A=1&REQ0JourneyStopsZ0G=BRAINE-L%20ALLEUD&REQ0JourneyDate=27.010.10&REQ0JourneyTime=19:030&Timesel=depart&ViaName=&ViaMode=NEE&DateMode=ANDERS&PLANNER=TRUE&start=1&queryPageDisplayed=yes

On voit tres bien dans le lien les villes de Mons et Braine l'alleud ainsi que la date et heure qui aparaissent. Je tombais directement sur la page du train en question.

Maintenant, je tombe sur une page intermédiaire qui me demande de choisir mes gares et un click sur OK m'emmene enfin à la page ou je voulais arriver.

Si un dev à une idée pour arriver à la page concernée directement ( comme si j'appuyais sur "confirmer" depuis le lien du dessus) je lui en serais reconnaissant. Si il veut rester anonyme, je prends toutes les responsabilités sur moi.

Pour info, Je faisais un scrapping simple du code html que je remettais en forme:

    DefaultHttpClient httpclient = new DefaultHttpClient();
           HttpGet get = new HttpGet(mon_url);
           HttpResponse response;
               try {
                     response = httpclient.execute(get);
                     HttpEntity entity = response.getEntity();        
                     BufferedReader buf = new BufferedReader(new InputStreamReader(entity.getContent()));
                    etc...

Enfin, voilà pour mon soucis.

Je pense que c'est un long problème qui est soulevé et qui a de quoi faire parler pas mal de gens.

J'aimerais donc votre avis là dessus et avoir quelques conseils techniques.

Lien vers le commentaire
Partager sur d’autres sites

C'est marrant c'est exactement le problème qui risque de m'arriver si le site change un petit peu :mad:

Quand tu dis

Pour les curieux, ne connaissant rien aux proxy, sniffer de paquets, cookies, etc..

C'est toi qui n'utilise pas de sniffer ?

Lien vers le commentaire
Partager sur d’autres sites

Oui, ma phrase est mal tournée, je vais corriger, je voulais dire quelquechose du genre

Pour les curieux ( lisant cette rubrique technique, il faut savoir que, pour ma part, ) ne connaissant rien aux proxy, sniffer de paquets, cookies, etc..

Edit: merci, c'est corrigé!

Lien vers le commentaire
Partager sur d’autres sites

Je ne sais pas si je suis le mieux placé pour t'aider mais je vais essayer de trouver une solution à ton problème en passant un coup de sniffer ( Wireshark je t'aime :P ).

Pour ma part je fais la même chose que toi à coup de HTTPPost et de parsing manuel ( je n'ai pas d'autre idée ou solution )

Lien vers le commentaire
Partager sur d’autres sites

As tu essayé de contacter directement la SNCB par mail ou téléphone pour savoir si il y avait en interne ou spécifiquement pour les développeurs une API ou un webservices de permettant de faire toutes c'est choses ? Sinon leur suggérer de le faire pour étoffer leurs services à la population habitué aux trajets sur rail :)

Lien vers le commentaire
Partager sur d’autres sites

Je dirais 8 mails aux différentes organisations de la SNCB ( railtime, SNCB, hari,etc..) depuis juillet 2009

Des contacts sur place menacés de faire "silence radio" - tel quel dans le mail- et de ne pas me répondre.

Avec insistance et mouvement des avocats signalés dans le mail plus haut, j'ai un RDV avec eux fin aout.

Lien vers le commentaire
Partager sur d’autres sites

De toute façon si ils sont aussi hermétiques que la SNCF on est pas sortit de l'auberge ...

Pourtant mettre à disposition des webservices pour ce type de services nationaux et internationaux ferais la plus grande choix des utilisateurs de smartphones, mais bon après c'est une politique :P

Lien vers le commentaire
Partager sur d’autres sites

C'est honnetement complètement débile de leur part, ca ne peut que leur faire de la pub que d'avoir une application.

Et en plus comme elle n'est pas dév par eux, ca ne leur coute rien.

S'ils pensent que cela peut leur faire une mauvaise image, ils n'ont qu'a regarder l'appli et la controler de temps en temps pour voir ce qu'ils en pensent.

Et vu l'état de la version actuelle pas de problème :/

Edit : Mais bon je dis ca mais ca risque d'être la même pour moi :mad:

Lien vers le commentaire
Partager sur d’autres sites

Un ami à moi a travaillé pour la SNCF dans le but de développer un programme en interne pour la gestion des trajets et autres, ils avaient soumis l'idée d'un webservices pour l'extérieur mais rien à faire, leurs directives étaient clair ça doit rester en interne, c'est bien dommage d'arriver dans un monde 2.0 ou on garde tout pour soit :mad:

Lien vers le commentaire
Partager sur d’autres sites

Connaissant plus la programmation web que java, je te dirais honnetement que ça sent la requete en POST :).

En effet (j'ai vérifié). Suffit ensuite de récupérer les champs et leurs valeurs (pour ceux déjà renseignés comme les input hidden) et renseigner les autres en fonctions des choix faits dans ton appli.

Ensuite un scrapper pour récupérer les résultats de ta requete.

Possible que j'arrive trop tard ^^

Lien vers le commentaire
Partager sur d’autres sites

Oui, infernus m'a beaucoup aidé.

Le gros soucis, c'est que je dois me connecter sur une première page ( juste pour scrapper un identifiant, puis une seconde page et ca prend un temps dingue!)

enfin ca fonctionne, mais je vais me battre pour retrouver la vitesse d'avant.

Lien vers le commentaire
Partager sur d’autres sites

+1 pour la requête post, par contre tu vas te heurter aux problèmes que j'ai eu avec termobile.fr : si jamais tu dois commencer à interroger plusieurs pages d'affilé (ici ça n'a pas l'air d'être le cas) le smartphone va commencer à faire la gu*****... Déjà, tu dois avoir rencontré quelques problèmes pour le parsing HTML par le tél, qui est vite limité en mémoire pour traiter de lourdes pages.

Ma solution : un script PHP sur un serveur, c'est lui qui interroge les pages (via l'extension "curl", qui permet beaucoup de souplesse tout en étant très simple à utiliser) et qui renvoie du JSON, beaucoup plus facile à analyser par le smartphone.

-> http://termobile-ws.sfhost.net pour les spécifications du webservice

-> http://code.google.com/p/horaires-ter-sncf/source/browse/#svn/webservice/lib pour les sources complètes

Lien vers le commentaire
Partager sur d’autres sites

Merci Naholyr...

En fait tu as raison. Quand j'interrogeais une seule page et que je faisait la bidouille via URL, la vitesse était quasi instantanée.

Par contre, ici, c'est 2 pages en Post et la vitesse passe à 15 secondes.

C'est affolant de voir la différence entre les 2.

Lien vers le commentaire
Partager sur d’autres sites

Exactement le problème que l'on a :(

ll y a 2-3 pages suivant la version avec ou sans details.

Mais c'est aussi le problème que j'ai sur mon appli. Donc d'après toi Naholyr les ralentissements sont dus à la taille de la page à parser ?

Edit : @Naholyr : Merci pour le lien vers ton blog/site. C'est très instructif, faudra que je vois si je peux mettre cela en place :)

Lien vers le commentaire
Partager sur d’autres sites

Mais c'est aussi le problème que j'ai sur mon appli. Donc d'après toi Naholyr les ralentissements sont dus à la taille de la page à parser ?
La taille de la page à parser, l'inefficacité des fonctions de traitements de chaines de caractères sur la JVM Android, ou encore la mauvaise qualité des connexions http avec nos connexions mobiles... Je ne sais pas quelle est la vraie cause, mais en tous cas la différence est incroyablement flagrante !

Pour le "parcours" de 3 pages nécessaires pour consulter les horaires sur termobile (donc 3x requête HTTP + parsing) ça mettait facilement 10 secondes sur mon Hero, quand ça allait au bout (ça plantait au moins une fois sur 4...). Le même traitement mais en PHP ne prenait plus qu'une demi-seconde, et l'interrogation d'une page renvoyant du JSON avec le smartphone ne prenait que dalle non plus. Bilan je suis passé, pour un traitement similaire, à une appli lente et instable à une appli qui répond en 1 seconde maxi ;)

Lien vers le commentaire
Partager sur d’autres sites

Pour une appli de ce genre avec parsing de page web l'idée serais de faire un traitement extérieur pour éviter de s'embêter, si tu as un espace perso free ou autres crée un webservices en php qui traitera tes demandes et te renverra le résultat sous forme XML ou JSON pré-formaté ce qui sera plus facile à intégrer à ton application, et si une modification est à faire tu la fait sur le webservices et non pas sur l'application, du coup pas de mise à jour supplémentaire :)

Lien vers le commentaire
Partager sur d’autres sites

Ah ca m'interesse grandement ça !

@Naholyr : Personellement je me suis mis en tête que c'était dû en grande partie à la latence du réseau. Après je n'en sais rien :)

@acesyde : Justement j'ai un compte free :D

Bon comme je suis encore à mes balbutiements pour ce qui est du dev' Android, et que là vous me proposer de faire du Php, je crois que je vais avoir besoin de votre aide, si, bien sûr, cela nous vous gêne pas ;)

Lien vers le commentaire
Partager sur d’autres sites

Malheuresement je n'ai absolument aucune base en PHP :mad:

Mais je pense que j'y jetterai un coup d'oeil, j'arriverai a comprendre, je me fais pas de soucis :P

Je vous remercie encore de votre aide, si jamais j'en ai encore besoin ( et surement ) je vous contacte par ce topic :)

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...