Infernus Posté(e) 23 juillet 2010 Share Posté(e) 23 juillet 2010 Faudrait que je sache par où commencer en fait :/ J'essai de trouver la partie parsing dans le code de Naholyr :rolleyes: Edit : trouvé le parsing, par contre... outch >< un bon samaritain serait motivé pour m'épauler ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
acesyde Posté(e) 23 juillet 2010 Share Posté(e) 23 juillet 2010 Utilisons ce topic pour en parler, met nous la portion de code que tu ne comprends pas et je pense que des âmes charitables t'aiderons (ainsi que moi) :P Lien vers le commentaire Partager sur d’autres sites More sharing options...
Profete162 Posté(e) 23 juillet 2010 Auteur Share Posté(e) 23 juillet 2010 Compte rendu de mes tests "tout sur le mobile": je risque d'éditer ce post encore de nombreuses fois, mais ca me permet de réfléchir à voix haute et de noter mes tests Par contre, je fais quelques stats intéressantes sur le scrapping. C'est donc utilisé pour mon appli des trains. méthode 1 la méthode classique ou on a directement l'URL: cette url contient les paramètres . J'ai eu la chance de tomber sur cette adresse par hasard du genre: http:// blabla.com/search&depart=ville1&arrivee=ville2 DefaultHttpClient httpclient = new DefaultHttpClient(); HttpGet get = new HttpGet(mon_url); HttpResponse response; Méthode 2 elle est une vraie requete post avec plein de paramètres sur le navigateur, l'user agent, etc... HttpGet get = new HttpGet("http://hari.b-holding.be/HAFAS/bin/query.exe/"+langue+"?"); ResponseHandler responseHandler = new BasicResponseHandler(); String test = client.execute(get, responseHandler); //return test; //text.setText(test); List vars = new ArrayList(); vars.add(new BasicNameValuePair("REQ0JourneyDest_Bike_enable", "0")); vars.add(new BasicNameValuePair("REQ0JourneyDest_KissRide_enable", "0")); vars.add(new BasicNameValuePair("queryPageDisplayed", "yes")); vars.add(new BasicNameValuePair("REQ0JourneyStopsS0A", "1")); vars.add(new BasicNameValuePair("fromTypeStation", "select")); vars.add(new BasicNameValuePair("REQ0JourneyStopsS0F", "DselectStationAttribute;GA")); vars.add(new BasicNameValuePair("REQ0JourneyStopsS0G", s_depart)); vars.add(new BasicNameValuePair("REQ0JourneyStopsS0ID", null)); vars.add(new BasicNameValuePair("REQ0JourneyStopsZ0A", "1")); vars.add(new BasicNameValuePair("toTypeStation", "select")); vars.add(new BasicNameValuePair("REQ0JourneyStopsZ0F", "selectStationAttribute;GA")); vars.add(new BasicNameValuePair("REQ0JourneyStopsZ0G", s_arrivee)); vars.add(new BasicNameValuePair("REQ0JourneyStopsZ0ID", null)); vars.add(new BasicNameValuePair("REQ0JourneyDate", s_jour+"/"+s_mois+"/"+s_an)); vars.add(new BasicNameValuePair("wDayExt0", "Lu|Ma|Me|Je|Ve|Sa|Di")); vars.add(new BasicNameValuePair("REQ0JourneyTime", s_heure+":"+s_minutes)); vars.add(new BasicNameValuePair("REQ0HafasSearchForw", "1")); vars.add(new BasicNameValuePair("REQ0JourneyProduct_prod_list", trainOnly)); vars.add(new BasicNameValuePair("start", "Confirmer")); client = new DefaultHttpClient(); httppost = new HttpPost("http://hari.b-holding.be/HAFAS/bin/query.exe/fn?OK"); httppost.addHeader("User-Agent", "Please Provide an API"); httppost.addHeader("Host", "hari.b-holding.be"); httppost.addHeader("Accept", "text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1"); httppost.addHeader("Accept-Language", "fr-FR,fr;q=0.9,en;q=0.8"); httppost.addHeader("Referer","http://hari.b-rail.be/HAFAS/bin/query.exe/fn?OK"); httppost.addHeader("Accept-Charset", "iso-8859-1, utf-8, utf-16, *;q=0.1"); httppost.addHeader("Accept-Encoding", "deflate, gzip, x-gzip, identity, *;q=0"); httppost.addHeader("Content-Type", "application/x-www-form-urlencoded"); try { httppost.setEntity(new UrlEncodedFormEntity(vars)); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } response = client.execute(httppost); Quelques précisions: * Avant, j'utilisais toujours méthode 1 dans tout mon code. mon appli était super rapide, tout se faisait sur le téléphone. * Apres: ils ont bloqué certains paramètres du site ( à noter que maintenant leur site est de plus en plus à chier et lent du coup!) et je dois me connecter via 2 requêtes de type méthode 2 pour certaines méthode. Les tests: Test1: connexion de 2 requêtes méthode 2 à la suite pour rechercher la liste des trains. Chaque étape est séparée. La première me sert à récupérer un ID que je dois passer en parametre pour la requête 2. Test2: Une requête méthode 1 sur un site mobile Test3: une requête de méthode 1 sur un site mobile. Les temps de scrapping et de parsing sont aussi séparés Je précise que ces 3 tests sont fait sur des pages différentes, je ne peux pas comparer. Je n'avais pas fait de tests de vitesse avant, malheureusement. Les résultats en Edge: (trajet - Méthode1) Test1 scrapping: 10secondes et ensuite 4 secondes pour la seconde page Test1 parsing: 80-180ms (gare - Méthode2) Test2 scrapping: 1200-1600 ms Test2 parsing: 2-15 ms (train - Méthode2) Test3 scrapping: idem Test3 parsing:idem Les résultats en 3G: ( désolé pas de 3G à la maison) Les résultats en wifi: (trajet - Méthode1) Test1 scrapping: 3-4 sec et ensuite 2,5 secondes pour la seconde page Test1 parsing: 80-180ms (gare - Méthode2) Test2 scrapping: 200-300 ms Test2 parsing: 2-15 ms (train - Méthode2) Test3 scrapping: idem Test3 parsing:idem CONCLUSIONS: La méthode post semble prendre beaucoup plus de temps. Je dois encore voir ce qui bloque et pose problème. Comme on le disait, il y a peut-être des soucis de ports et de connexions capricieuses La méthode direct à partir de l'url est beaucoup plus efficace. Est-ce dû au fait que je suis sur un site mobile? En tous cas, une chose est sûre, le parsing ne ralentit pas vraiment ( 150ms au pire) A creuser, je risque d'éditer ce post encore de nombreuses fois, mais ca me permet de réfléchir à voix haute et de noter mes tests. Lien vers le commentaire Partager sur d’autres sites More sharing options...
acesyde Posté(e) 23 juillet 2010 Share Posté(e) 23 juillet 2010 Profete162 tu utilises quoi comme méthode pour parser tes retours de données ? regex ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Profete162 Posté(e) 23 juillet 2010 Auteur Share Posté(e) 23 juillet 2010 Le truc, c'est que les champs de retour et la mise en page est tellement variable que mon code est pourri. Il est à noter aussi que ce code date d'il y a un an, soit 2 semaines apres mon premier tutoriel java et je l'ai jamais amélioré... http://pastebin.com/vB7agSbw Tu n'imagines même pas toutes les combinaisons de html possibles différentes que je dois parser... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Infernus Posté(e) 23 juillet 2010 Share Posté(e) 23 juillet 2010 La vache c'est long sur le premier scraping oO @acesyde : En fait je sais absolument pas par où commencer, et j'ai pas l'intention de me concentrer plus que ca sur le php. En gros juste ce qu'il faut pour que je puisse faire ça, que je me concentre sur l'api Android ( ce qui m'occupera déjà bien assez ^^ ) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Profete162 Posté(e) 23 juillet 2010 Auteur Share Posté(e) 23 juillet 2010 Ce qui me semble intéressant de remarquer, c'est ces 2 points: * le "post" gagne un facteur 2 en passant de edge en wifi * la méthode "url" elle recoit un facteur 6 d'amélioration. Comme le supposait naholyr je pense, la méthode 1 possède des temps de connexion plus grands ( j'y connais rien, j'imagine juste) et des conctantes auxquelles on ne peut rien faire. Lien vers le commentaire Partager sur d’autres sites More sharing options...
acesyde Posté(e) 23 juillet 2010 Share Posté(e) 23 juillet 2010 Essaye de travailler avec les expressions régulières pour parser le code d'une page HTML, rien qu'avec ce système tu gagnes en temps de code et d'exécution sur le parser. Par contre niveau appréhension de la syntaxe c'est loin d'être facile, mais pourtant bien utile :( Lien vers le commentaire Partager sur d’autres sites More sharing options...
Profete162 Posté(e) 23 juillet 2010 Auteur Share Posté(e) 23 juillet 2010 Oui, mais bon.. Gagner 80ms sur un truc de 15 secondes, c'est pas ma priorité le parsing :P Avant cela, j'aimerais gagner mes 10 secondes de "scrapping" Mais un grand merci pour l'info, cela fera une belle piste pour moi repartir apres avoir réglé les gros problèmes. Lien vers le commentaire Partager sur d’autres sites More sharing options...
naholyr Posté(e) 23 juillet 2010 Share Posté(e) 23 juillet 2010 En effet j'ai peur qu'on ne puisse pas améliorer grand-chose, à partir du moment où on doit faire du POST et/ou plusieurs connexions d'affilé, c'est la mort :( Autre gros avantage du parseur perso sur un serveur : si le site change, on met à jour le service web, et l'appli est directement corriger, pas besoin de déployer une mise à jour sur le market ;) on est ainsi sûr que le correctif est valable pour *tous* les utilisateurs d'un coup. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Infernus Posté(e) 23 juillet 2010 Share Posté(e) 23 juillet 2010 Ouep et ca c'est vraiment génial ;) Bon faut que je me motive à regarder ca moi :P Edit : Je crois que je ne vais pas avoir besoin de ca, c'est juste la connexion qui prend du temps :( l'analyse met moins de 300ms Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.