[CodePlex] Yammer : Yammer API SDK

Hello à tous

Vous trouverez sur Codeplex, un de mes petit projet qui va vous permettre d’implémenter du Yammer (RSE Microsoft) dans vos applications grâce à ce petit Wrapper C#.

Lien ici : https://yammerapisdk.codeplex.com/

Pour le moment celui-ci vous permet essentiellement de consommer des informations sur les urls suivantes :

  • api/v1/messages.json
  • api/v1/messages/private.json
  • api/v1/messages/received.json
  • api/v1/messages/following.json
  • api/v1/messages/my_feed.json
  • api/v1/messages/algo.json
  • api/v1/messages/sent.json
  • api/v1/streams/notifications.json
  • api/v1/users/current.json
  • api/v1/users.json
  • api/v1/groups.json
  • api/v1/users/[:id].json
  • api/v1/networks/current.json

D’autres fonctionnalités vont arriver notamment celle relatives à de l’administration, de la suppression et du post de message.

Je rajouterais aussi un Kit de Site Internet utilisant cette API avec les dernières nouveautés WEB

Enjoy !

 

Yammer : Développez avec Yammer c’est facile !

Introduction

De plus en plus nous sommes confrontés à l’utilisation des RSE, et l’on ne peut pas ne pas passer outre. Aujourd’hui le message de Microsoft est très clair nous sommes dans l’air du Cloud Computing et de ce fait Yammer, plateforme de RSE, fait partie toute intégrante du nuage magique. Elle trouve sa place tout naturellement dans cet écosystème où se mêlent gestion documentaire, SharePoint et Office 365.

Comment aborder le développement ?

Yammer propose à ce jour et selon sa propre documentation, plusieurs API pouvant être exploitées assez facilement (http://developer.yammer.com/documentation/ ). Nous retrouvons ainsi dans le détail :

  • API REST
  • SDK  : JavaScript, Ruby, Python
  • SDK Mobile : IOS, Windows Phone 8
  • Widget Embarqué : HTML/JavaScript
  • OpenGraph : API centrée sur les activités liées à l’utilisateur

Vous l’aurez compris nous pouvons développer avec Yammer sur tout type de support que cela soit du Web, du client lourd, des Apps etc… les possibilités sont pluriels et les idées ne manquent, que cela soit sur des outils tiers, ex : outils d’analyse et de reporting ( GoodData Yammer Analytics) ou des outils CRM. Un APP Store Yammer est présent et vous permets de consommer des apps et/ou d’en publier

Si l’on se concentre un peu plus sur la partie REST API, nous distinguons plusieurs « end points » disponible pour les développeurs (http://developer.yammer.com/restapi ) :

  • Messages
  • Users
  • Groups
  • Search
  • Activities
  • Autocomplete
  • Invitations
  • Suggestions
  • Networks

Plus concrètement, cette api se manipule uniquement en HTTPS et vous donnent des réponses JSON.

Quant aux opérations fournit, uniquement du GET, POST et DELETE.

Quand est-il du modèle d’authentification ?

Le modèle d’authentification est basé sur OAuth 2.0, apportant une simplicité d’opération et d’implémentation sur tout type de support client. Lorsque l’on développe des Yammer Apps toute application est composée d’un identifiant applicatif publique et d’un identifiant privé (secret).

Deux types d’authentifications existent l’un pour application serveur (Server Side Authentication Flow) :

  Etapes Requêtes
1 Demande d’authentification depuis une application server (client id, url de l’app) https://www.yammer.com/dialog/oauth?client_id=[:client_id]&redirect_uri=[:redirect_uri]
2 Une redirection vers une autorisation de l’application est demandée http://[:redirect_uri]?code=[:code]
3 Demande d’authentification depuis une application server (client id, code secret de l’app et code de l’app) https://www.yammer.com/oauth2/access_token.json?client_id=[:client_id]&client_secret=[:client_secret]&code=[:code]
3 Un token (Bearer) est fourni afin d’accéder à une requête émise GET /api/v1/messages/following.json HTTP/1.1Host: www.yammer.comAuthorization: Bearer abcDefGhi
4 Résultat de la requête en JSON {« type »: »user », »id »:1534234, »network_id »:464564, »state »: »active » …….

 

L’autre authentification cliente (Client-Side Flow) :

 

  Etapes Requêtes
1 Demande d’authentification depuis une application cliente (un ID Client est fourni et l’url de l’app) https://www.yammer.com/dialog/oauth?client_id=[:client_id]&redirect_uri=[:redirect_uri]&response_type=token
2 Redirection automatique vers l’application par le navigateur, avec le token fourni. http://[:redirect_uri]#access_token=[:access_token]
3 Résultat de la requête en JSON {« type »: »user », »id »:1534234, »network_id »:464564, »state »: »active » …….

 

Quels outils dois-je utiliser pour gagner du temps ?

Il est vrai que compte tenu de la multiplicité des « endpoints », le résultat des objets envoyés par les requêtes sont assez complexes et les « parser » toutes un à un prendrait du temps. Si vous faites du C# des outils comme JSON C# Class generator sur CodePlex (https://jsonclassgenerator.codeplex.com ) ou encore un outil online tel http://json2csharp.com peuvent vous faire gagner un temps précieux. Des outils comme RestSharp (http://restsharp.org ) peuvent vous aider dans le fait d’avoir une API purement cliente. Et sans oublier Fiddler (http://www.telerik.com/fiddler) pour débugger vos applications le plus finement possible.

 

Où puis-je trouver des exemples ?

Sans conteste la première source d’exemple est la plateforme GITHUB. Elle offre pléthore  d’implémentations des API Yammer et ce dans plusieurs langages ainsi vous pouvez trouver des « Wrapper » pour Ruby, JS, ou C#… (https://github.com/search?q=yammer )

Plus simplement un projet sur CodePlex, s’intitulant Yammer.SimpleAPI, est un simple « wrapper » pour C# et son utilisation est assez simple (http://yammersimpleapi.codeplex.com ).

 

Un petit exemple pour la route

Ici nous utilisons une bibliothèque graphique JavaScript du nom de Infovis Toolkit (http://philogb.github.io/jit ) permettant d’avoir une vue « Graphe » de nos objets. La librairie utilisée est la suivante (http://philogb.github.io/jit/static/v20/Jit/Examples/ForceDirected/example1.html ) cela vous donnera une bonne base de départ. Dans notre exemple il me suffit d’implémenter simplement comme dans les exemples fournis dans la documentation Yammer et après avoir créé et déclaré une application, les fichiers JavaScript Yammer, implémenter les méthodes «  yam.config » avec les identifiants applicatifs, appeler la méthode « yam.getLoginStatus » comme par exemple :

 

yam.config({
    appId: "APP ID"
});

yam.getLoginStatus(
function(response) {

    if (response.authResponse) {

        var finalObject;

        yam.request({

            url: "https://www.yammer.com/api/v1/users/current.json",

            method: "GET",

            dataType: "json",

            success: function(data) {

                init(data);
                //Appel de notre fonction Graph
                },

            error: function(xhr2, status2) {

                alert(xhr2.status);

            }

        });

    }
 else {

        alert("not logged in")

        }

}
);

 

Une fois que l’on a choisi quel « endpoint » nous voulons requêter, ici les données relatives à l’utilisateur courant, nous pouvons travailler avec les données JSON et les transmettre assez simplement dans notre librairie. Téléchargez l’exemple 1 et rendez-vous directement dans la fonction « init » du fichier « example1.js ».

Voici ce que nous faisons, nous récupérons les données courantes de l’utilisateur ainsi que des préférences et nous les mettons sous formes d’adjacences  dont le point de départ est l’utilisateur courant, ce qui nous donne :

 

function init(paramdata) {

    // init data

    var adj = [];

    for (var i = 0; i < paramdata.web_preferences.home_tabs.length; i++)

    {

        adj.push(paramdata.web_preferences.home_tabs[i].name);

    }

    var json = [

        {

            //root

            id: paramdata["id"],

            name: paramdata["first_name"],

            data: {

                "$color": "#557EAA",

                "$type": "image",

                "$url": paramdata["mugshot_url"]

            },

            //dépendences

            "adjacencies": adj

        }
    ];

    // suite du code

}

Par défaut le code fourni par cette librairie de prend pas en charge les images ! Si vous observez bien nous avons défini un nouveau type «  Image ». Voici l’extension de paramètre pour cette librairie, celui-ci est à mettre en dehors de la fonction « init »

$jit.ForceDirected.Plot.NodeTypes.implement({

    'image': {

        'render': function (node, canvas) {

            var ctx = canvas.getCtx();

            var pos = node.pos.getc(true);

            if (node.getData('image') != 0) {

                var img = node.getData('image');

                ctx.drawImage(img, pos.x - 15, pos.y - 15);

            }

        },

        'contains': function (node, pos) {

            var npos = node.pos.getc(true);

            dim = node.getData('dim');

            return this.nodeHelper.circle.contains(npos, pos, dim);

        }

    }

});

Tout cela nous donne le résultat suivant :

Graph

Conclusion

Nous pouvons faire pléthore de chose avec l’API Yammer, cet article n’est que purement introductif sur les possiblités offertes. Ajoutons que l’exploitation de cette donnée est très rapide ce qui permet d’avoir des résultats assez prometteurs et dans un laps de temps très courts. Avis au amateurs de développement mobiles qui souhaitent se lancer dans des applications révolutionnaires !