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 :

[C#]flux rss et compression gzip


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 33
    Par défaut [C#]flux rss et compression gzip
    Bonjour,
    je debute en C# et je veux crée un petit gestion de flux rss

    les flux rss non compressé fonctionne tres bien mais pas les compressé.

    je souhaite ajouter le support de la compression gzip.

    pour info j'utilise la XmlTextReader pour gerre mon xml

    pouvais vous m'aider.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Par défaut
    Salut,

    Utilises plutôt System.ServiceModel.Web.SyndicationFeed qui va mieux dans ce cas.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 33
    Par défaut
    Citation Envoyé par cybermaxs Voir le message
    Salut,

    Utilises plutôt System.ServiceModel.Web.SyndicationFeed qui doit mieux ce cas.
    le resultat est le meme, je n'arrive pas a parcer mon flux qui arrive en compressé en gzip

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Par défaut
    euh

    J'ai peur qu'il faille dans ce cas faire la requête par toi même via HttpWebRequest. Voici un lien qui doit t'aider pour ça (méthode GetUrl).

    à la fin de la méthode essaye de pluger le XmlReader avec SyndicationFeed

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    ça doit pouvoir se gérer avec un WebClient.OpenRead + GZipStream...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    string feedUrl = "http://www.developpez.com/index/rss";
    using (WebClient wc = new WebClient())
    using (Stream netStream = wc.OpenRead(feedUrl))
    using (Stream gzStream = new GZipStream(netStream, CompressionMode.Decompress))
    using (XmlReader reader = XmlReader.Create(gzStream))
    {
        SyndicationFeed feed = SyndicationFeed.Load(reader);
        // ...
    }

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 33
    Par défaut
    Merci a tous !
    voila se que j'ai fait :

    j'ai fait un classe gestionFlux
    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
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    using System.Web;
    using System.Net;
    using System.IO.Compression;
     
    namespace RSS_Reader
    {
        class GestionFlux
        {
            /// <summary>
            /// Determines if GZip is supported
            /// </summary>
            /// <returns></returns>
            public static bool IsGZipSupported()
            {
                string AcceptEncoding = HttpContext.Current.Request.Headers["Accept-Encoding"];
                if (!string.IsNullOrEmpty(AcceptEncoding) &&
                     (AcceptEncoding.Contains("gzip") || AcceptEncoding.Contains("deflate")))
                    return true;
                return false;
            }
     
            /// <summary>
            /// Sets up the current page or handler to use GZip through a Response.Filter
            /// IMPORTANT:  
            /// You have to call this method before any output is generated!
            /// </summary>
            public static void GZipEncodePage()
            {
                if (IsGZipSupported())
                {
                    HttpResponse Response = HttpContext.Current.Response;
     
                    string AcceptEncoding = HttpContext.Current.Request.Headers["Accept-Encoding"];
                    if (AcceptEncoding.Contains("gzip"))
                    {
                        Response.Filter = new System.IO.Compression.GZipStream(Response.Filter,
                                                  System.IO.Compression.CompressionMode.Compress);
                        Response.AppendHeader("Content-Encoding", "gzip");
                    }
                    else
                    {
                        Response.Filter = new System.IO.Compression.DeflateStream(Response.Filter,
                                                  System.IO.Compression.CompressionMode.Compress);
                        Response.AppendHeader("Content-Encoding", "deflate");
                    }
                }
            }
     
            public static String GetUrl(string Url)
            {
                HttpWebRequest Http = (HttpWebRequest)WebRequest.Create(Url);
                Http.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");
     
     
                HttpWebResponse WebResponse = (HttpWebResponse)Http.GetResponse();
     
                Stream responseStream = responseStream = WebResponse.GetResponseStream();
                if (WebResponse.ContentEncoding.ToLower().Contains("gzip"))
                    responseStream = new GZipStream(responseStream, CompressionMode.Decompress);
                else if (WebResponse.ContentEncoding.ToLower().Contains("deflate"))
                    responseStream = new DeflateStream(responseStream, CompressionMode.Decompress);
     
                StreamReader Reader = new StreamReader(responseStream, Encoding.Default);
     
                string feed = Reader.ReadToEnd();
     
                WebResponse.Close();
                responseStream.Close();
     
                return feed;
            }
     
        }
    }
    et voila le corp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    String feedString = GestionFlux.GetUrl(feedUrl);
                byte[] byteArray = Encoding.ASCII.GetBytes(feedString);
                using (MemoryStream gzStream = new MemoryStream( byteArray ))
                using (XmlReader reader = XmlReader.Create(gzStream))
                {
                    SyndicationFeed feed = SyndicationFeed.Load(reader);
                    foreach(SyndicationItem item in feed.Items)
                    {
     
                                    //...
                    }
                }

    dite moi ce que vous en pensé

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Pirion Voir le message
    Bonjour,
    je debute en C# et je veux crée un petit gestion de flux rss

    les flux rss non compressé fonctionne tres bien mais pas les compressé.

    je souhaite ajouter le support de la compression gzip.

    pour info j'utilise la XmlTextReader pour gerre mon xml

    pouvais vous m'aider.
    Je pense que la classe GZipStream devrait t'aider

    Citation Envoyé par cybermaxs Voir le message
    Salut,

    Utilises plutôt System.ServiceModel.Web.SyndicationFeed qui doit mieux ce cas.
    Je sais pas si ça gère la compression, mais c'est clair que c'est plus simple que de décoder le RSS à la main

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

Discussions similaires

  1. activer/désactiver la compression GZIP des pages
    Par iubito dans le forum Développement Web en Java
    Réponses: 7
    Dernier message: 20/08/2008, 21h35

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