<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Je tente d'importer (légalement) des données sportives depuis un site Web (par exemple, les résultats des Jeux paralympiques de 2012 à Londres). Le site public soumet des requêtes à la base de données IPC et renvoie une page HTML contenant de nombreux tableaux, en fonction de la combinaison des éléments suivants: compétition (Jeux paralympiques de Londres); Sport (athlétisme); Sexe (F); Événement (100 m); Classe AWD (F37); qui comprend un tableau séparé pour chaque étape de la compétition (rondes / finales / finales) et le nombre de manches. Il y a environ 20 classes AWD par événement et généralement <20 tables par page, en fonction de la popularité de l'événement. Pour automatiser partiellement ceci dans JMP, j'ai un script d'environ 360 ("20x 18) instructions" ouvertes "de la forme:
Ouvrir(
" http://www.paralympic.org/ipc_results/results.php?competition=2004PG&gender=m&sport=athletics&discipline=&event=100%20m&eclass=T11 ",
Tableau HTML (3)
)
pour le groupe Homme 100m F11 (aveugle) (le troisième tableau de la page). Je concatène ensuite les tables produites en répétant ceci pour tous les événements. Mon problème est que bien que ce processus fonctionne correctement pour un script qui autorise 20 tables par classe (concaténation de 20 des déclarations ci-dessus); Lorsque j'essaie d'inclure tous les 18 événements (360 = 20 x 18), l'exécution s'interrompt sans erreur après le premier événement (par exemple, 100 m) et ne produit pas de sortie pour l'événement suivant (200 m). Est-ce parce qu'il n'y a que 12 tables dans cette combinaison événement / classe (je ne pense pas), ou d'autres problèmes? (J'utilise un PC 4 cœurs, 64 bits avec 16 Go de RAM, exécutant WinXP).
J'apprécierais les conseils de toutes les personnes qui ont déjà utilisé le choix "Internet ouvert" sur le Web.
Je ne sais pas pourquoi cela se casse, mais c'est peut-être à cause d'une connexion réseau de plus en plus lente lorsque le nombre de demandes est important. Ou qu'une requête échoue pour une autre raison.
Concaténez-vous toutes les tables en même temps ou une à la fois (et fermez-vous ensuite la table source)? Cette dernière approche exige moins de votre ordinateur.
Le code ci-dessous semble fonctionner, même si la liste d'événements est étendue bien au-delà des deux événements de l'exemple (j'utilise JMP 10 pour Mac et dispose d'une connexion réseau assez rapide). J'ai utilisé Try () pour éviter un arrêt s'il y a moins de 20 tableaux par page.
dt = Nouvelle table ( "Tous les résultats" , Nouvelle colonne ( "Table source" , Personnage ) ) ;
liste des événements = { "100" , "400" } ; // Seulement deux événements dans cet exemple
Pour ( je = 1 , je <= N articles ( liste des événements ) , je ++,
Essayer ( // boucle d'échappement s'il n'y a plus de table pour cet événement
Pour ( j = 1 , j <= 20 , j ++,
// Try (Close (dt1, no save)); // Ferme la sous-table précédente (le cas échéant)
dt1 = Ouvrir (
" http://www.paralympic.org/ipc_results/results.php?competition=2004PG&gender=m&sport=athletics&discipline=&event= "
|| liste des événements [ je ] || "% 20m & eclass = T11" ,
Tableau HTML ( j )
) ;
Attendre ( 0 ) ; // Donnez à JMP l'occasion de terminer le téléchargement, augmentez l'argument si le réseau est lent
dt1 << nom du décor ( liste des événements [ je ] || "_table" || Carboniser ( j ) ) ;
col = dt1 << Nouvelle colonne ( "Table source" , personnage ) ;
Pour chaque rangée ( dt1 : col = ( dt1 << obtenir un nom ) ) ;
dt << enchaîner ( dt1 , Ajouter au premier tableau ( 1 ) ) ;
Fermer ( dt1 , pas de sauvegarde ) ; // Fermer la sous-table
)
)
) ;