Dans cette première partie, nous présenterons une architecture projet permettant de récupérer les données Yammer suivant une fenêtre temporelle paramétrable, de les insérer dans une base de données, et d’exposer la base de données avec des web services grâce au framework nodeJS.
5. 5
Architecture applicative
4
Yammer
SQL Server
1°)2°)
3°)
4°)
5°)
Proxy nodeJS
1 => connexion à l’application
Sharepoint
2 => Sharepoint renvoie le
contenu Statique au client :
html + CSS + JS
3 => avec l’autorisation de
Sharepoint on redirige le client
vers le serveur Proxy (NodeJS)
4 => Le proxy solicite le
serveur de base de données
5 => réponse de la base
6 => Le proxy retourne les
données vers le client
6. 6
public ZipArchive GetExport(DateTime exportStartDate)
{
try
{
var url =
String.Format("https://www.yammer.com/api/v1/export?model=Message&model=User&model=Group&mo
del=Topic&model=UploadedFileVersion&model=DocumentVersion&access_token={0}&include=csv&incl
ude_ens=false&since=" + exportStartDate.ToString("yyyy-MM-dd") + "T00%3A00%3A00%2B00%3A00",
this.accessToken);
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Headers.Add("Authorization", "Bearer" + " " + this.accessToken);
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
using (var stream = response.GetResponseStream())
{
return new ZipArchive(stream);
}
}
}
catch (Exception ex)
{
throw new Exception("GetExport : " + " " + ex.Message);
}
}
Récupération des données deYammer
Requête GET à l’API Yammer en passant en paramètre le jeton
d’accès (access token)
7. 7
function runSQL(strReq, callback) {
var connection = new sql.Connection(connection_string, function (err) {
if (err)
console.log(err);
var request = new sql.Request(connection); // or: var request = connection.request();
request.query(strReq, function (err, recordset) {
if(err)
console.log(err);
callback(recordset);
});
connection.close();
});
};
app.get('/StatFilebyUser', function (req, res) {
var strReq = 'SELECT y.name, count(*) as number_file'
+ ' FROM [dbo].[file] '
+ ' inner join [dbo].[YammerUser] y on y.[UserID] = [uploader_id]'
+ ' group by [UserID] ,y.name';
runSQL(strReq, function (result) {
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify(result));
res.end();
});
});
app.use(function (req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Content-Type, X-Requested-With");
res.type('application/json');
next();
});
https.createServer(httpsOptions, app).listen("8000", ip.address());
Proxy : Nodejs
runSQL: encapsule la
connexion à la base de
données
app.get: définit un point de
terminaison et le traitement
à effectuer en réponse à la
requête
app.use: fonction exécutée
avant toute requête,
permet de fixer les headers
http.createServer.listen:
ouvre le port pour écoute
1 => connexion à l’application Sharepoint
2 => Sharepoint renvoie le contenu Statique au client : html + CSS + JS
3=> avec l’autorisation de Sharepoint on redirige le client vers le serveur Proxy (NodeJS)
4=> proxy solicite le serveur de base de données
5=> reponse de la base
6=> le proxy retourne les données vers le client