IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

Extraire une valeur d'une page web


Sujet :

Visual C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 11
    Points : 3
    Points
    3
    Par défaut Extraire une valeur d'une page web
    Bonjour,

    Je souhaite réaliser un programme en qui extrait une valeur d'une page web.

    Ceci pour enregistrer les cours de la bourse sur la page de yahoo par exemple.

    Existe-t-il une fonction en C++ pour rentrer automatiquement une valeur dans le champ code valeur de la page web et en récupérer le cours ?

    Merci.

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    il te faut manipuler des objets httpqqchose
    ca dépend ce que tu utilises, MFC ? .Net ?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    J'utilise en fait Visual C++ 2005.

    Je ne sais pas si MFC ou .Net sont installés.

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    .net, c'est sur que ca y est
    MFC, ca dépend si c'est la version express ou pas.

    Dans tous les cas, il faut ouvrir une connexion http et lire le contenu de la page

    en C++/CLI, il faut faire un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		HttpWebRequest ^ HttpWReq = dynamic_cast<HttpWebRequest^>(WebRequest::Create(url));
    		HttpWReq->CachePolicy = gcnew Cache::HttpRequestCachePolicy(Cache::HttpRequestCacheLevel::Reload);
    		HttpWResp = dynamic_cast<HttpWebResponse^>(HttpWReq->GetResponse());
    		sr = gcnew StreamReader(HttpWResp->GetResponseStream());
    		Xml::XmlDocument ^ xml = gcnew Xml::XmlDocument();
    		xml->LoadXml(sr->ReadToEnd());

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    En effet ces commandes ne me sont pas familières.

    As tu un livre ou bien un site web à me conseiller pour se genre de fonction.

    Merci.

  6. #6
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    le site de developpez.com regorge de tutoriaux en tous genre.

    Il te faut déjà te familiariser avec le C++
    Ensuite choisir entre MFC et .NET (mfc est payant et n'est pas dispo dans la version gratuite de visual c++)
    Et voir les tutoriaux MFC ou C++/CLI

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    J'ai trouvé cette source sur le net :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
    private bool DoResquest(string URL, out string newURL)
    {
    	//Défini l'URL de destination de la redirection à vide. Car elle n'est définie que si il y a redirection.
    	newURL = "";
    	try
    	{
    		// Créer la requête HTTP.
    		HttpWebRequest req = (HttpWebRequest)WebRequest.Create(URL);
    		// Défini les champs de méthode, de type de navigateur, de types acceptés.
    		req.Method = method.Text;
    		req.UserAgent = useragent.Text;
    		req.Accept = accept.Text;
    		// Supprime le suivi de la redirection automatique.
    		req.AllowAutoRedirect = false;
    		// Défini les cookies, et si nécessaire, ajout le cookie utilisateur.
    		req.CookieContainer = cookies;
    		if (cookie.Text != "")
    		{
    			int signpos = cookie.Text.IndexOf("=");
    			string cookiename = cookie.Text.Substring(0, signpos);
    			string cookieval = cookie.Text.Substring(signpos + 1);
    			req.CookieContainer.Add(new Cookie(cookiename, cookieval, "/", req.RequestUri.Host));
    		}
    		// Si la method est POST, alors il faut mettre les données dans le corps de la requête.
    		if (method.Text == "POST")
    		{
    			string data = postdata.Text;
    			// Définition des informations concernant le corps
    			req.ContentLength = data.Length;
    			req.ContentType = contenttype.Text;
    			// Ecriture des données.
    			Stream reqout = req.EndGetRequestStream(req.BeginGetRequestStream(new AsyncCallback(AsyncRequestWriter), null));
    			StreamWriter wri = new StreamWriter(reqout, Encoding.GetEncoding(850));
    			wri.Write(data);
    			wri.Close();
    			reqout.Close();
    		}
    		// Exécution de la requête.
    		HttpWebResponse res = (HttpWebResponse)req.GetResponse();
    		// Ajout des nouveaux cookies si présents.
    		cookies.Add(res.Cookies);
    		// Afficher les premières informations de la requête (Method, URL, Etat de réponse et en-têtes.
    		result.Text += "---------------------------------------------------\r\n";
    		result.Text += req.Method + " " + URL + "\r\n";
    		result.Text += res.StatusCode + " - " + res.StatusDescription + "\r\n";
    		result.Text += res.Headers.ToString() + "\r\n";
    		// Suivant l'état. Redirection ou non.
    		switch (res.StatusCode)
    		{
    			// Redirection normale.
    			case HttpStatusCode.Redirect:
    				method.SelectedIndex = 0;
    				newURL = res.Headers.Get("Location");
    				break;
    			// Redirection gardant la methode.
    			case HttpStatusCode.RedirectKeepVerb:
    				newURL = res.Headers.Get("Location");
    				break;
    			// Redirection mettant la méthode à GET.
    			case HttpStatusCode.RedirectMethod:
    				method.SelectedIndex = 0;
    				newURL = res.Headers.Get("Location");
    				break;
    			// Tout les autres état, nottament, OK
    			default:
    				// Affiche les données du flux
    				Stream resin = res.GetResponseStream();
    				StreamReader rea = new StreamReader(resin, Encoding.GetEncoding(850));
    				result.Text += rea.ReadToEnd().Replace("\r\n", "\n").Replace("\n", "\r\n");
    				rea.Close();
    				resin.Close();
    				break;
    		}
    		// Ferme la réponse
    		res.Close();
    		// Ferme la requête
    		req.Close();
    	}
    	catch (Exception ex)
    	{
    		// Affiche l'exception dans la zone de résultat.
    		result.Text += ex.ToString();
    	}
    	// Il y a redirection seulement si une adresse a été mise dans newURL.
    	return newURL.Length != 0;
    }
    Mais je n'arrive pas à la faire fonctionner.

    Dans un premier temps j'aimerais simplement écrire un code pour rentrer la valeur (par exemple Bouygues) et valider pour afficher le cours de l'action sans récupérer le contenu.

    Merci.

  8. #8
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    ca ressemble à du C# ...

    tu as essayé mon exemple ?

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Oui j'ai essayé ton exemple mais je n'arrive pas à le faire fonctionner.

    Je ne sais pas quelles librairies déclarer.

    De plus je ne sais pas où rentrer la valeur cherchée (par exemple Bouygues).

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <iostream>
     
     
    void main()
    {
    HttpWebRequest ^ HttpWReq = dynamic_cast<HttpWebRequest^>(WebRequest::Create(www.yahoo.fr));
    		HttpWReq->CachePolicy = gcnew Cache::HttpRequestCachePolicy(Cache::HttpRequestCacheLevel::Reload);
    		HttpWResp = dynamic_cast<HttpWebResponse^>(HttpWReq->GetResponse());
    		sr = gcnew StreamReader(HttpWResp->GetResponseStream());
    		Xml::XmlDocument ^ xml = gcnew Xml::XmlDocument();
    		xml->LoadXml(sr->ReadToEnd());
    }
    Merci.

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. Extraire le contenu d'une boite "dialogue de page web"
    Par Oliv- dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 04/02/2013, 10h41
  3. Réponses: 1
    Dernier message: 11/03/2010, 14h47
  4. Recuperer les valeur d'une listbox sur un page web
    Par will97 dans le forum Réseau/Web
    Réponses: 2
    Dernier message: 02/03/2009, 04h39
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo