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

C# Discussion :

Obtenir l'adresse de la page web contenant les images


Sujet :

C#

  1. #1
    Membre régulier
    Homme Profil pro
    autre
    Inscrit en
    Janvier 2015
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Janvier 2015
    Messages : 142
    Points : 108
    Points
    108
    Par défaut Obtenir l'adresse de la page web contenant les images
    Bonjour,

    Je télécharge une image (via drag drop) d'un site web.
    J'ai trois informations à récupérer :

    1 - l'adresse de l'image
    Pas de souci, je l'obtiens lors du drag drop :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                string URLImage = (String)e.Data.GetData(DataFormats.UnicodeText);
    J'obtiens : http://monsite.fr/wp-content/uploads...bwg=1602521488
    (En l’occurrence, l'image provient d'un plugin Wordpress).

    2 - L'adresse du site
    Pas de souci, je la récupère ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                   Uri uri = new Uri(URLImage);
                            SiteImageLabel.Text= uri.Scheme + "://" + uri.Host; // Obtient : http://monsite.fr
    3- L'adresse de la page ou article où se trouve l'image téléchargée ainsi que d'autres images
    Par exemple : http://monsite.fr//2020//10//12//brule-parfum-tripode/
    Mais ça je ne sais pas le faire.

    Comment obtenir l'adresse de la page précise d'un site depuis lequel on récupère un élément ?
    C'est l'adresse qui apparait dans mon navigateur quand je suis sur la page de l'article.

    Merci

  2. #2
    Membre régulier
    Homme Profil pro
    autre
    Inscrit en
    Janvier 2015
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Janvier 2015
    Messages : 142
    Points : 108
    Points
    108
    Par défaut
    J'ajoute une chose.

    L'adresse qu'il me faut récupérer est présente dans le code source de la page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <link rel="canonical" href="http://monsite.fr/2020/10/17/petite-table-en-ceramique/" />
    Merci

  3. #3
    Membre éprouvé
    Homme Profil pro
    Administrateur Systèmes, Clouds et Réseaux /CAO/DAO/Ingénierie Electrotechnique
    Inscrit en
    Décembre 2014
    Messages
    449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur Systèmes, Clouds et Réseaux /CAO/DAO/Ingénierie Electrotechnique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 449
    Points : 991
    Points
    991
    Par défaut
    A moins qu'il n'existe un algorithme déjà fait j'aurais tendance à te dire de te tourner vers ce qu'on appelle le parsing. Donc de lire une page et d'extraire la chaine qui t'intéresse... J'ai pas fait jusqu'à présent de drag & drop donc à moins que ça te permette directement de récupérer plus d'infos, c'est la seule chose qui me vienne en tête. Egalement il faudrait que tu en dises peut être un petit peu plus sur ce que tu veux faire, si ça va être tourné evrs un seul site ou bien si tu veux pouvoir faire ça sur n'importe quelle fenêtre.

  4. #4
    Membre régulier
    Homme Profil pro
    autre
    Inscrit en
    Janvier 2015
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Janvier 2015
    Messages : 142
    Points : 108
    Points
    108
    Par défaut
    Bonjour daerlnaxe,
    Je souhaite effectivement faire cela sur n'importe quelle page d'où l'utilisateur peut récupérer une image. Il s'agira, le plus souvent, de son propre site.
    Je construis une appli lui permettant de gérer, hors ligne, ses produits ou articles en vente.
    Une fonctionnalité doit lui permettre de générer automatiquement, pour une liste de produits sélectionnés, le fichier CSV utilisé comme source de données d'un Market place en ligne (ici, pour commencer, celui de Facebook).
    Le lien vers la page du produit en vente est requis dans le CSV, et je voudrais que l'utilisateur n'ai pas à s'en préoccuper. Il fournira de toute façon l'image du produit pour mon appli, cette dernière devra être capable de récupérer le reste des infos.

    J'ai été agréablement surpris de pouvoir récupérer facilement le Hostname du site dans l'URL de l'image.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Uri uri = new Uri(URLImage);
    SiteImageLabel.Text= uri.Scheme + "://" + uri.Host; // Obtient : http://monsite.fr
    Je me demandais si d'autres infos étaient récupérables ainsi, à travers l'url de l'image.
    Mais Uri semble ne rien faire d'autre que de 'bidouiller' le nom du lien et ne pas envoyer de requête au site source de l'image.

    Parser le site pour en extraire l'info, nécessiterait que je connaisse déjà l'adresse de la page pour récupérer son code source.
    La page est un article d'un blog Wordpress.

    Le lien récupéré dans l'image est : http://monsite.fr/wp-content/uploads...bwg=1602521488
    alors que l'info que je cherche est : http://monsite.fr//2020//10//12//brule-parfum-tripode/

    L'idée sur laquelle je me penche actuellement est de récupérer l'url de la page en cours de mon navigateur.
    Pour l'instant, tout ce que je trouve concerne l'utilisation de ASP .NET.
    Or je ne l'utilise pas.
    Merci

  5. #5
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 155
    Points : 7 404
    Points
    7 404
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Tu dis que tu récupères l'image par drag & drop.

    Peux-tu nous en dire plus ?
    Tu veux récupérer l'adresse de quoi dans quel outil ?

    Dans les informations du drag & drop tu as peut-être des informations de contexte du navigateur. Le souci c'est que c'est renseigné à la discrétion du programmeur du navigateur, donc d'un navigateur à l'autre tu n'auras pas forcément les mêmes informations.

    Sinon, récupérer l'adresse du navigateur n'est pas forcément une bonne idée non plus : de plus en plus de sites passent par de l'ajax, et l'url ne reflète pas forcément le contenu affiché. Ce sera mieux que rien, mais pas de certitude. Quant à récupérer cette adresse, pareil que pour le drag & drop : ce sera probablement une logique très différente d'un navigateur (et version) à l'autre.
    On ne jouit bien que de ce qu’on partage.

  6. #6
    Membre régulier
    Homme Profil pro
    autre
    Inscrit en
    Janvier 2015
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Janvier 2015
    Messages : 142
    Points : 108
    Points
    108
    Par défaut
    Bonjour StringBuilder,

    Je travaille sous Windows.form.
    Ce sera sûrement plus parlant si je poste la méthode entière :

    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
     
            private void ArticleImage_DragDrop(object sender, DragEventArgs e)
            {
                Color CouleurFond = new Color();
                CouleurFond = System.Drawing.Color.Transparent;
     
                string URLImage = (String)e.Data.GetData(DataFormats.UnicodeText);
     
     
                if (string.IsNullOrWhiteSpace(ClePrimaireLabel.Text) == false)
                {
     
                    string Message = "Remplacer l'image de " + RefTxt.Text + " ?";
                    string Caption = "Nouvelle image";
                    var result = MessageBox.Show(Message, Caption, MessageBoxButtons.YesNo,
                                                            MessageBoxIcon.Information,
                                                            MessageBoxDefaultButton.Button1);
                    if (result == System.Windows.Forms.DialogResult.Yes)
                    {
                        if (ArticleImage.Image != null)
                        {
                            ArticleImage.Image.Dispose();
                        }
     
                        Image bmp;
                        bmp = DownloadImage(URLImage);
                        if (bmp != null)
                        {
                            URLImage1Label.Text = URLImage;
     
                            Uri uri = new Uri(URLImage);
                            URLSiteLabel.Text= uri.Scheme + "://" + uri.Host; // Obtient : http://mobilier.zuleika-arts.fr
     
     
                            UPDATE_URLs_Image(URLImage, URLSiteLabel.Text,""); 
    // C'est ici que je devrais récupérer toutes les infos à enregistrer dans ma table SQLite - private void UPDATE_URLs_Image(string CleImage, string CleURLSite, string CleURLPage) mais il me manque CleURLPage
     
     
                            Image CetteImage = Padding_Reduce_Image(bmp, CouleurFond, 250, 250);
                            ArticleImage.Image = CetteImage;
     
                            Enr_Tmp_Image_Article(bmp); // Image tempo : Enregistre l'image TEMPORAIRE téléchargée sur le disque 
     
                            EnrElemTimer.Start();
                            VoyantImageLabel.Visible = true;
     
                            Copy_Article_Image(int.Parse(ClePrimaireLabel.Text)); // si la fiche existe on enregistre directement l'image #Cle.jpg sur le disque 
                                                                                  // à partir de tmp.jpg. Pas besoin de cliquer 'enregistrer la fiche'. 
     
                            // On change directement l'image dans ArticleImagesList, pas besoin de recharger tout pour voir apparaitre l'image dans le ListView
                            string imgKey = ClePrimaireLabel.Text.Trim();// the key of the image to update
                            Image previousImage = ArticleImagesList.Images[ArticleImagesList.Images.Keys.IndexOf(imgKey)];
                            ArticleImagesList.Images.RemoveByKey(imgKey);
                            previousImage.Dispose();
                            ArticleImagesList.Images.Add(imgKey, CetteImage);
                            //}
                        }
                    }
                }
                else // CléPrimaire est vide
                {
                    if (ArticleImage.Image != null)
                    {
                        ArticleImage.Image.Dispose();
                    }
     
                    Image bmp;
                    bmp = DownloadImage(URLImage);
                    if (bmp != null)
                    {
                        URLImage1Label.Text = URLImage;
                        Image CetteImage = Padding_Reduce_Image(bmp, CouleurFond, 250, 250);
                        ArticleImage.Image = CetteImage;
     
                        Enr_Tmp_Image_Article(bmp); // Image tempo : Enregistre l'image TEMPORAIRE téléchargée sur le disque 
     
                    }
                }
            }
    quant au modèle des pages en question, le voici :
    http://mobilier.zuleika-arts.fr/2020...raynaud-ronde/
    Et c'est cette adresse que je souhaite récupérer.

    Je drag drop une des images de la page dans une PictureBox de mon appli.

    Dans les informations du drag & drop tu as peut-être des informations de contexte du navigateur.
    Ce serait formidable.
    ce sera probablement une logique très différente d'un navigateur (et version) à l'autre.
    Mais ce serait déjà un progrès

    Merci

  7. #7
    Membre régulier
    Homme Profil pro
    autre
    Inscrit en
    Janvier 2015
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Janvier 2015
    Messages : 142
    Points : 108
    Points
    108
    Par défaut
    Bonjour,

    L'information que je recherche (l'adresse de la page d'où je récupère l'image), n'existe pas dans l'opération de drag drop d'une image.

    J'ai résolu mon problème en le prenant à l'envers.
    Je drag drop "l'image mise en avant" de l'article qui contient uniquement l'adresse de la page (à défaut de l'URL de l'image affichée à l'écran), et je récupère toutes les images que la page contient.


    J'utilise HtmlAgilityPack (découvert sur ce site).

    Je remplis une liste avec les URL de toutes les images.
    J'affiche dans mon picturebox la 2 ème de la liste (la 1ère c'est toujours celle du logo, testé sur plusieurs sites).

    Généralement je récupère une quinzaine d'images. En cas de besoin j'ai construis deux boutons Next et Previous à ma pictureBox, pour naviguer entre les images extraites.
    La première est souvent la bonne.

    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
     
            private bool Extrait_Images_URL(string url)
            {
                ImagesCandidates = new List<string>(); // Variable globale
                ImagesCandidates.Clear();
     
                HtmlWeb web = new HtmlWeb();
                HtmlAgilityPack.HtmlDocument doc = web.Load(url);
     
                var links = doc.DocumentNode.Descendants();
     
                foreach (var link in links)
                {
                    var elem = link.Attributes["src"];
     
                    if (elem != null)
                    {
                        var match = ImagesCandidates
                            .FirstOrDefault(stringToCheck => stringToCheck.Contains(elem.Value));
     
                        if (match == null) // Pas de doublons
                        {
                            if (elem.Value.Contains("jpg") || elem.Value.Contains("png")) ImagesCandidates.Add(elem.Value);
                        }
                    }
                }
                if (ImagesCandidates.Count > 2)
                {
                    PreviousImageBtn.Visible = true;
                    NextImageBtn.Visible = true;
                }
     
                    if (ImagesCandidates.Count>0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
    Si cela peut servir à quelqu'un.
    Merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 14/01/2010, 01h55
  2. Adresse d'une page web
    Par harris_macken dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 18/03/2009, 14h14
  3. Comment faire 1 page web contenant des petits box comme ca ?
    Par mohamed dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 11/11/2006, 16h04
  4. obtenir le txt d'un page web
    Par Husqvarna dans le forum Langage
    Réponses: 3
    Dernier message: 28/11/2005, 15h33
  5. Obtenir des infos sur une page web en ligne
    Par Logan_Cale dans le forum Web & réseau
    Réponses: 1
    Dernier message: 20/08/2005, 15h36

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