locked
flux RSS sous windows phone 7 RRS feed

  • Question

  • Bonjour,

    Comment peut-on développer un flux RSS sous windows phone 7???

    merci

    KETATA Ramy

    Tunisie

    jeudi 17 mars 2011 09:26

Réponses

  • Bonjour,

     

    Voila un petit exemple que tu pourras facilement reproduire :

    Code Xaml :

    <ListBox x:Name="lb">
            <ListBox.ItemTemplate>
              <DataTemplate>
                <StackPanel Orientation="Horizontal">
                  <StackPanel Width="370" Margin="0,0,0,10">
                    <TextBlock Text="{Binding Title}" FontSize="28" TextWrapping="Wrap" Style="{StaticResource PhoneTextAccentStyle}" />
                    <TextBlock Text="{Binding Description}" TextWrapping="Wrap" Style="{StaticResource PhoneTextNormalStyle}" />
                  </StackPanel>
                </StackPanel>
              </DataTemplate>
            </ListBox.ItemTemplate>
          </ListBox>
    

    Code C# :

    public partial class MainPage : PhoneApplicationPage
      {
        // Constructor
        public MainPage()
        {
          InitializeComponent();
          this.Loaded += new RoutedEventHandler(MainPage_Loaded);
        }
    
        void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
          // On crée le WebClient      
          WebClient wc = new WebClient();
          // Une s'abonne à l'évènement qui se déclenche une fois le téléchargement fini.
          wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted); 
          // On télécharge notre flux RSS      
          wc.DownloadStringAsync(new Uri("http://social.msdn.microsoft.com/Forums/fr-FR/wmdevfr/threads?outputAs=rss"));      
               
             
        }
    
        void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {     
          if (e.Error != null) return;      
          // On va transformer le résultat en éléments XML     
          XElement xmlItems = XElement.Parse(e.Result);      
          //On va remplir notre listbox avec les différents Items parcourus dans le XML    
          List<XElement> elements = xmlItems.Descendants("item").ToList();
          
          List<RSSItem> flux = new List<RSSItem>();
          foreach (XElement rssItem in elements)
          {
            RSSItem rss = new RSSItem();
            rss.Description = rssItem.Element("description").Value;
            rss.Link = rssItem.Element("link").Value;
            rss.Title = rssItem.Element("title").Value;
            flux.Add(rss);
          }
          lb.ItemsSource = flux;
        }
      }
    
      public class RSSItem
      {
        public String Description { get; set; }
        public String Link { get; set; }
        public String Title { get; set; }
      }
    
    Voila j'espère que cela peut t'aider.
    jeudi 17 mars 2011 19:52

Toutes les réponses

  • Bonjour,

     

    Voila un petit exemple que tu pourras facilement reproduire :

    Code Xaml :

    <ListBox x:Name="lb">
            <ListBox.ItemTemplate>
              <DataTemplate>
                <StackPanel Orientation="Horizontal">
                  <StackPanel Width="370" Margin="0,0,0,10">
                    <TextBlock Text="{Binding Title}" FontSize="28" TextWrapping="Wrap" Style="{StaticResource PhoneTextAccentStyle}" />
                    <TextBlock Text="{Binding Description}" TextWrapping="Wrap" Style="{StaticResource PhoneTextNormalStyle}" />
                  </StackPanel>
                </StackPanel>
              </DataTemplate>
            </ListBox.ItemTemplate>
          </ListBox>
    

    Code C# :

    public partial class MainPage : PhoneApplicationPage
      {
        // Constructor
        public MainPage()
        {
          InitializeComponent();
          this.Loaded += new RoutedEventHandler(MainPage_Loaded);
        }
    
        void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
          // On crée le WebClient      
          WebClient wc = new WebClient();
          // Une s'abonne à l'évènement qui se déclenche une fois le téléchargement fini.
          wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted); 
          // On télécharge notre flux RSS      
          wc.DownloadStringAsync(new Uri("http://social.msdn.microsoft.com/Forums/fr-FR/wmdevfr/threads?outputAs=rss"));      
               
             
        }
    
        void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {     
          if (e.Error != null) return;      
          // On va transformer le résultat en éléments XML     
          XElement xmlItems = XElement.Parse(e.Result);      
          //On va remplir notre listbox avec les différents Items parcourus dans le XML    
          List<XElement> elements = xmlItems.Descendants("item").ToList();
          
          List<RSSItem> flux = new List<RSSItem>();
          foreach (XElement rssItem in elements)
          {
            RSSItem rss = new RSSItem();
            rss.Description = rssItem.Element("description").Value;
            rss.Link = rssItem.Element("link").Value;
            rss.Title = rssItem.Element("title").Value;
            flux.Add(rss);
          }
          lb.ItemsSource = flux;
        }
      }
    
      public class RSSItem
      {
        public String Description { get; set; }
        public String Link { get; set; }
        public String Title { get; set; }
      }
    
    Voila j'espère que cela peut t'aider.
    jeudi 17 mars 2011 19:52
  • Merci

    :)

    KETATA Ramy

    Tunisie

    vendredi 18 mars 2011 08:16
  • Bonjour,

    lors de l'exécution, j'ai eu un problème:

    "NotSupportedException n'a pas été géré" au niveau de la ligne suivante

    "XElement xmlItems = XElement.Parse(e.Result);"

    Merci

    KETATA Ramy

    Tunisie

    vendredi 18 mars 2011 09:37
  • Bonjour,

     

    Avez-vous vérifié la valeur de e.Result ?

     

    Cordialement,

    Alex

     

    ________________

    Publiez un article sur MSDN !

    Windows Phone 7

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, SharePoint, WPF

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     


    Suivez MSDN sur Twitter 

    vendredi 18 mars 2011 12:43
  • Vous avez testé avec la même URL de flux rss ou vous avez mis une autre adresse ?

     

    vendredi 18 mars 2011 20:04
  • Bonjour hazolhim,

     

    quand j'ai testé avec "http://social.msdn.microsoft.com/Forums/fr-FR/wmdevfr/threads?outputAs=rss"

    ça fonctionne :)

    mais quand j'ai voulu afficher les actualités de blog du site IsaFirewalls, j'ai changé le URL à http://isafirewalls.org/blogs/default.aspx , il m'a apparu l'erreur suivante:

    "NotSupportedException n'a pas été géré" au niveau de la ligne suivante

    "XElement xmlItems = XElement.Parse(e.Result);"

    Merci

    KETATA Ramy

    Tunisie

    mardi 22 mars 2011 10:02
  • aaaah c bon ça fonctionne

    il faut ajouter au  URl "http://......./threads?outputAs=rss"

     

    Merci

    KETATA Ramy

    Tunisie

    mardi 22 mars 2011 15:43
  • Bonjour,

    Je développe une application sur windows phone et je souhaite afficher les news apartir d'un flux rss et j'ai du mal a affiche une image dans la listbox ?

    Merci.

    vendredi 27 mai 2011 09:58
  • Bonjour,

    Il serait mieux de créer un nouveau post, car celui la à été résolu.

    Sinon voici un petit exemple pour afficher une image :

    <ListBox x:Name="listbox1">
              <ListBox.ItemTemplate>
                <DataTemplate>
                  
                  <Image Source="{Binding MonImage}" Width="96" HorizontalAlignment="Left" />
                  
                </DataTemplate>
              </ListBox.ItemTemplate>
            </ListBox>
    

     

     


    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7

    vendredi 27 mai 2011 14:35
  • Bonjour,

    merci de m'avoir répondu mon besoin , je doit lire un flux rss et afficher le titre , la description et l'image (enclosure) et donc j'ai suivi votre tuto et j'ai réussie a afficher le titre et la description, et donc j'ai suivi la mm méthode pour l'image mais sa ne marche pas.

    Cordialement .

     


    lundi 30 mai 2011 13:17
  • Pourriez vous faire voire votre code pour le renseignement de l'image ?

    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7

    lundi 30 mai 2011 16:41
  • mon code xaml :

     

                   <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
                         <ListBox  ItemsSource="{Binding Items}" Height="646" Margin="0,6,0,0" x:Name="listBox1" VerticalAlignment="Top" HorizontalAlignment="Left" Width="450">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                                <Button HorizontalAlignment="Left">
                                    <Button.Content>
                                    <Image Source="" DataContext="{Binding}" Width="150" Height="150" Margin="0,0,0,0" />
                                    </Button.Content>
                                </Button>
                                <StackPanel Width="370" Margin="0,10,0,10" Orientation="Vertical">

                                    <TextBlock Text="{Binding Date}" FontSize="14" TextWrapping="Wrap" Style="{StaticResource PhoneTextAccentStyle}" DataContext="{Binding}"/>
                                    <TextBlock Text="{Binding Title}" FontSize="14" TextWrapping="Wrap" Style="{StaticResource PhoneTextAccentStyle}" DataContext="{Binding}"  />
                                  
                                   
                                </StackPanel>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </Grid>
        </Grid>

     

     

     

    code c# :

     

                 public partial class MainPage : PhoneApplicationPage
               {
                            // Constructor
                              public MainPage()
                    {
                            InitializeComponent();
               
                DisplayPopup();
                this.Loaded += new RoutedEventHandler(MainPage_Loaded);
            }

            void MainPage_Loaded(object sender, RoutedEventArgs e)
            {
                // On crée le WebClient
                WebClient wc = new WebClient();
                // On télécharge notre flux RSS
                wc.DownloadStringAsync(new Uri("http://www.aufaitmaroc.com/feeds/tous.xml"));
              
                // Une fois le flux téléchargé, c'est cette méthode qui s'exécutera
                wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
            
            }

            void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
            {
                // Si une erreur s'est produite pendant le téléchargement, on ne renvoit rien
                if (e.Error != null) return;

                // On va transformer le résultat en éléments XML
               XElement xmlItems = XElement.Parse(e.Result);

                //On va remplir notre listbox avec les différents Items parcourus dans le XML
                listBox1.ItemsSource = from x in xmlItems.Descendants("item")
                                      select new RSSitem //On crée un nouvel élément RSSitem
                                     {
                                           // Pour chaque élément RSS on va extraire les informations suivante que l'on va placer
                                           // dans l'élément que l'on vient de créer.
                                        
                                           Date = x.Element("pubDate").Value,
                                           Link = x.Element("link").Value,//valeur de l'élément <link>
                                           Title= x.Element("title").Value, //valeur de l'élément <title>
                                          
                                          
                                     };

              

            }

     

     

    Class Rssitem :

    public class RSSitem
        {
            public string Title { get; set; }
            public string Date { get; set; }
            public string Link { get; set; }
          
          
           
           
        }

     

    je veux récupérer le titre , la date et l'image

    j'ai pu le faire pour le titre et la date mais pour l'image je n'arrive pas

    je doit récupérer la balise <enclosure.....>

     

     

     

     

     

    mardi 31 mai 2011 10:09
  • Voila le code modifier et cela fonctionne :

    <!--ContentPanel - place additional content here-->
        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
          <ListBox ItemsSource="{Binding Items}" Height="646" Margin="0,6,0,0" x:Name="listBox1" VerticalAlignment="Top" HorizontalAlignment="Left" Width="450">
            <ListBox.ItemTemplate>
              <DataTemplate>
                <StackPanel Orientation="Horizontal">
                  <Button HorizontalAlignment="Left">
                    <Button.Content>
                      <Image Source="{Binding Image}" Width="150" Height="150" Margin="0,0,0,0" />
                    </Button.Content>
                  </Button>
                  <StackPanel Width="370" Margin="0,10,0,10" Orientation="Vertical">
    
                    <TextBlock Text="{Binding Date}" FontSize="14" TextWrapping="Wrap" Style="{StaticResource PhoneTextAccentStyle}" DataContext="{Binding}"/>
                    <TextBlock Text="{Binding Title}" FontSize="14" TextWrapping="Wrap" Style="{StaticResource PhoneTextAccentStyle}" DataContext="{Binding}" />
    
    
                  </StackPanel>
                </StackPanel>
              </DataTemplate>
            </ListBox.ItemTemplate>
          </ListBox>
        </Grid>
    

     

    public partial class MainPage : PhoneApplicationPage
      {
        // Constructor
        public MainPage()
        {
          InitializeComponent();
    
          //DisplayPopup();
          this.Loaded += new RoutedEventHandler(MainPage_Loaded);
        }
    
        void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
          // On crée le WebClient
          WebClient wc = new WebClient();
          // On télécharge notre flux RSS
          wc.DownloadStringAsync(new Uri("http://www.aufaitmaroc.com/feeds/tous.xml"));
    
          // Une fois le flux téléchargé, c'est cette méthode qui s'exécutera
          wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
    
        }
    
        void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
          // Si une erreur s'est produite pendant le téléchargement, on ne renvoit rien
          if (e.Error != null) return;
    
          // On va transformer le résultat en éléments XML
          XElement xmlItems = XElement.Parse(e.Result);
          
          //On va remplir notre listbox avec les différents Items parcourus dans le XML
          listBox1.ItemsSource = from x in xmlItems.Descendants("item")
                      select new RSSitem //On crée un nouvel élément RSSitem
                     {
                       // Pour chaque élément RSS on va extraire les informations suivante que l'on va placer
                       // dans l'élément que l'on vient de créer.
    
                       Date = x.Element("pubDate").Value,
                       Link = x.Element("link").Value,//valeur de l'élément <link>
                       Title = x.Element("title").Value, //valeur de l'élément <title>
                       Image = x.Element("enclosure").LastAttribute.Value
    
                     };
    
    
    
        }
      }
    
      public class RSSitem
      {
        public string Title { get; set; }
        public string Date { get; set; }
        public string Link { get; set; }
        public string Image { get; set; }
    
    
    
      }
    

     

     


    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7

    mardi 31 mai 2011 13:03
  • Merci Pascal pour ta réponse , mais malheureusement sa n'affiche rien , sa ne récupère pas l'image .

    pour m'assurer je veux savoir si tu l'as teste chez toi ?

    mardi 31 mai 2011 14:56
  • Chez moi cela marche très bien. as tu bien modifier le xaml comme ceci :

     

    <Image Source="{Binding Image}" Width="150" Height="150" Margin="0,0,0,0" />
    


    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7

    mardi 31 mai 2011 16:02
  • Bonjour,

    oui je l'ai bien modifier mais je vois pas pourquoi sa ne marche pas chez moi , mais j'ai trouve une autre solution :

     

               public class RSSitem
                   {
                       public string Title { get; set;}
                      public string Date { get; set;}
                      public string Link { get; set;}
                     public Uri Image { get; set; }

                   }

     

    au moment de l'appel je procède comme suit :

     

           Image=new Uri(x.Element("enclosure").Attribute("url").Value)

     

    et finalement le binding :

    <Image Source="{Binding Image}" DataContext="{Binding}" Width="150" Height="150" Margin="0,0,0,0" />

     

     

    mercredi 1 juin 2011 09:13
  • En tous cas que cela soit ma solution ou ta solution, sur mon poste cela marche sans problème.

    Mais en tous cas le DataContext={Binding} sert à rien, car par défaut les items de ta ListBox ont comme DataContext un objet de type RSSitem, ainsi que tous les enfants visuels contenu dans chaque ListBoxItem.


    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7

    mercredi 1 juin 2011 10:17
  • oui je voi , juste une autre questions je voudrais afficher le détails de l'info sur une autre page en cliquant sur l'image et donc je veux afficher que la balise description de chaque image sélectionné , si tu as une idée?
    mercredi 1 juin 2011 11:33
  • Bonjour,

     

    Il te suffit juste de passer en paramètre à l'adresse Uri les informations que tu as besoin.

    C'est dommage, je voulais mettre un tutorial sur la navigation sur winphone7 sur msdn mais cela ne passe pas j'ai une erreur.


    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7


    lundi 6 juin 2011 18:39
  • Bonjour,

     

    j'ai arrivée a afficher la description mais j'ai du mal a afficher l'image voici mon code :

     

     protected override void OnNavigatedTo(NavigationEventArgs e)
            {
                RSSitem currentArticle = (RSSitem)PhoneApplicationService.Current.State["RSSitem"];
                desciption.Text = currentArticle.Desciption;

                image ?


              
              
              
               
               
               
                base.OnNavigatedTo(e);
            }

     

    je veux savoir pour le cas de l'image comment faire ?


    NB: j'ai suivi ce tutorial --->http://nico-pyright.developpez.com/tutoriel/vs2010/csharp/windows-phone-seven/navigation-silverlight-wp7/
    mardi 7 juin 2011 15:56
  • L'idéal est de faire dans la méthode OnNavigatedTo :

    this.DataContext = currentArticle;
    

    Et ensuite dans le fichier xaml :

    <Image Source="{Binding Image}" Width="150" Height="150" Margin="0,0,0,0" />
    
    

     


    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7

    • Proposé comme réponse Pascal Saille mercredi 8 juin 2011 18:32
    mardi 7 juin 2011 19:17
  • Merci beaucoup sa marche très bien :) .
    mercredi 8 juin 2011 08:41
  • Bonjour,

    Merci de créer un nouveau post. car ce post va jamais en finir alors qu'à l'origine il à été créée par Ketata Ramy pour une question précise. Et ce post à eu une réponse.

    Et la on part sur des question différentes à chaque fois.


    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7

    vendredi 10 juin 2011 18:56
  • Hi, I found this the most helpful internet page while trying to create an RSS page. If possible please could you advise how to open an RSS item using this script? I would be very grateful, and reference you in my about page (once I complete my project) etc.

    - Sorry I posted this in English ;-)

    Best regards,


    • Modifié Lynx101 mardi 17 juillet 2012 20:58
    mardi 17 juillet 2012 20:57