16/08/2013

[WindowsPhone] Twitter avec TweetSharp

Bonjour à toutes et à tous,
On se retrouve aujourd'hui pour un article sur la mise en place de TweetSharp sous WindowsPhone pour récupérer le flux d'un twittos.

Depuis que Twitter a changé son API, il n'est plus possible d'effectuer une requête GET de manière anonyme pour récupérer un flux de tweets.
Nous allons donc voir comment mettre en place l'OAuth.

Compte Développeur Twitter

La première chose à effectuer est de déclarer son application sur son compte développeur.
A noter que si vous pensez ne pas avoir de compte développeur, sachez qu'il est associé à votre identifiant Twitter.

On se connecte donc à l'adresse suivante https://dev.twitter.com/, et on s'authentifie avec "sign in" et ses identifiants Twitter.

Une fois connecté, on accède à ces applications :

On clique ensuite sur "Create an application", on renseigne le formulaire et on finalise en cliquant sur "Create your Twitter Application".

Ensuite vous récupérer vos "Consumer key" et "Consumer secret" :

Et vous cliquez sur "Create my access token" pour les récupérer :

Gestionnaire de paquets

Donc maintenant que nous avons toutes les informations nécessaires on va pouvoir s'attaquer au code ! On ouvre Visual Studio et le manager de packages NuGet. Vérifiez qu'il soit bien à jour (version 2.4 minimum !!). Démarrez le gestionnaire en passant par: "Outils" > "Gestionnaire de package de bibliothèques" > "Console du Gestionnaire de package", et lancez la commande :

Install-package TweetSharp.

Requete TweetSharp

Une fois vos paquets installés, vous créez votre classe de TwitterItem :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MyApp.Model.ModeleClient : INotifyPropertyChanged
{
    public class TwitterItem
    {
        private string _tweetid;
        public string TweetId
        {
            get
            {
                return _tweetid;
            }
            set
            {
                if (_tweetid != value)
                {
                    _tweetid = value;
                    NotifyPropertyChanged();
                }
            }
        }

        private string _username;
        public string UserName 
        {
            get
            {
                return _username;
            }
            set
            {
                if (_username != value)
                {
                    _username = value;
                    NotifyPropertyChanged();
                }
            }
        }

        private string _message;
        public string Message 
        {
            get
            {
                return _message;
            }

            set
            {
                if (_message != value)
                {
                    _message = value;
                    NotifyPropertyChanged();
                }
            }
        }

        public string _imagesource;
        public string ImageSource 
        {
            get
            {
                return _imagesource;
            }
            set
            {
                if (_imagesource != value)
                {
                    _imagesource = value;
                    NotifyPropertyChanged();
                }
            }
        }
        public event PropertyChangedEventHandler PropertyChanged;
        
        protected void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
}

Et enfin sur votre classe qui gère la récupération des données depuis Twitter :

using MyApp.Model.ModeleClient;
using MyApp.Resources;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Threading;
using System.Xml.Linq;
using TweetSharp;

namespace MyApp.Model.Services
{
    
    public class TwitterService
    {

        private readonly ObservableCollection<TwitterItem> _data = new ObservableCollection<TwitterItem>();
        public ObservableCollection<TwitterItem> Data { get { return _data; } }

        public void LoadData(string Request)
        {

            var service = new TweetSharp.TwitterService("consumerkey", "consumersecret");
            service.AuthenticateWith("access token", "access token secret");

            var options = new ListTweetsOnUserTimelineOptions { ScreenName = "pascalpereznet", Count = 50 };

            Data.Clear();
            service.ListTweetsOnUserTimeline(options, (statuses, response) =>
                {
                    if (response.StatusCode == HttpStatusCode.OK)
                    {
                        foreach (var status in statuses)
                        {
                            Data.Add(new TwitterItem { TweetId = status.Id.ToString(), Message = status.Text, ImageSource = status.User.ProfileImageUrl, UserName = status.User.ScreenName });

                        }
                    }
                    else
                    {

                    }
                });
        }
    }
}

Conclusion

Voilà, cette requête va vous permettre de pouvoir récupérer une liste de Tweets d'un Twittos.
Pour plus d'informations sur TweetSharp et les requêtes possibles, la documentation est ici.
A bientôt

Aucun commentaire:

Enregistrer un commentaire