Skip to main content

Windows Live - Basic operations

Windows LIVE series:
Astazi o sa incepem sa vorbim despre serviciile de tip CORE care exista pe Windows Live Connect. Nu imi este foarte clar daca sa ofer exemplele in C# sau in JavaScript. Cred ca ar fi mai interesant sa prezint exemplele in JavaScript si din cand in cand o sa prezint si exemple in C#. In .NET avem o librărie, este destul de simplu, iar modul în care totul funcționează este destul de ascuns.
Înainte sa începem trebuie știut ceva foarte importat. Cand un utilizator nou accesează aplicația noastră pentru prima data, iar noi dorim sa accesam anumite servicii ca și cum am fi utilizatorul respectiv, acesta o sa trebuiască sa ne de-a dreptul ca putem sa accesam aceasta informație. In general apare un pop-up, asemănător cu cel de logare, unde userul își da acordul ca aplicația noastră sa acceseze o colecție de servicii în numele sau. In funcție de modul în care facem request-ul acest drept poate sa aibe o durata limitata sau sa fie pe veci. By default dreptul de acces la resursele unui utilizator sunt temporare.
In funcție de platforma, avem la dispoziție diferite librari prin care putem sa accesam mai ușor resursele. Pentru JavaScript avem la dispozitive o librărie cu numele WL.js, iar pentru .NET avem la dispoziție librăria Microsoft.Live. Toate apelurile se pot face și manual prin intermediul apelurilor de tip REST, dar acest lucru consuma timp și este generator de bug-uri.
Oriunde dorim sa folosim librăria WL, este nevoie ca aceasta sa fie inițializata cu id de client pe care l-am primit și url de redirect, care o sa fie apelat de către Live Connect in momentul în care un utilizator se autentifica.
In primul exemplu o sa presupunem ca dorim sa accesam datele de baza a utilizatorului împreuna cu datele de profil. Primul pas este ca utilizatorul sa se logheze:
WL.init({ client_id: {idClient}, redirect_uri: {ourRedirectUrl} });
WL.login(
{ "scope": "wl.basic" },
function (response) {
if (response.status == "connected") {
alert("Utilizator conectat");
}
else {
alert("Autentificare esuata");
}
});
Acuma ca utilizatorul este autentificat, putem sa accesam datele de baza a acestuia. Pentru acest lucru trebuie sa apelam path-ul "me" prin GET. Un obiect în format JSON o sa ne fie returnat si o sa contina toate de profil a acestuia.
WL.api(
"/me", "GET",
function (response) {
if (response.error) {
alert("A aparut o eroare.");
return;
}
// response - o sa conțină toate datele de profil
}
);

In cazul in care sunteti curiosi, iata mai jos un exemplu de răspuns:
{"id":"XXXd9f52e4XXX02X"
"name":"Vunvulea Radu"
"first_name":"Vunvulea"
"last_name":"Radu"
"link":"http://profile.live.com/cid-bb7d9f52e4fdb024/"
"birth_day":null
"birth_month":null
"birth_year":null
"gender":null
"emails":
{
"preferred":"XXX@hotmail.com"
"account":"XXX@hotmail.com"
"personal":null
"business":null
}
"addresses":
{
"personal":
{
"street":null
"street_2":null
"city":null
"state":null
"postal_code":null
"region":null
}
"business":
{
"street":null
"street_2":null
"city":null
"state":null
"postal_code":null
"region":null
}
}
"phones":
{
"personal":null
"business":null
"mobile":null
}
"locale":"ro_RO"
"updated_time":"2012-02-02T06:21:16+0000"
}
Din cate putem sa observam răspunsul este in format JSON, care se poate procesa foarte usor. Odata ce un user este logat cu SCOPE-ul "wl.basic", putem sa accesam orice informatii de baza, precum date de profil, lista de contacte. Ce imi placela acest API este faptul ca, chiar daca ai acces la contacte sau la evenimente din calendar, dreptul de adaugare pe fiecare din ele se obtine printr-un SCOPE separat, a.i. utilizatorul este protejat si stie exact ce poate sa faca o aplicatie cu contul sau.
Sa presupunem ca vrem sa facem retrive la toate evenimentele utilizatorului. In acest caz o sa avem nevoie sa ne logam folosind SCOP-ul "wl.calendars" si sa apelam path-ul "/me/events".
De menționat doua lucruri:
  • cand ne definim scope-ul putem sa avem o lista de genul "scope: "wl.basic wl.calendars"
  • resursele pe care le accesam trebuie sa fie văzute ca È™i o structura de foldere, organizate ierarhic
In exemplul de mai jos încărcam toate evenimentele utilizatorului:
 WL.api({
path: "/me/events",
method: "GET"
}, onResponseReceive);
function onResponseReceive(response)
{
// response contine lista de evenimente
}
In cazul in care dorim sa adaugam un eveniment este nevoie sa facem request la un nou scope "wl.events_create".
 WL.api({
path: "/me/events",
method: "POST",
body: {
name: "Iesire la bere",
description: "Iesire la bere cu Ghita",
start_time: "1/1/2012 20:00",
end_time: "1/1/2012 22:00",
location: "Cluj-Napoca",
is_all_day_event: false,
availability: "busy",
visibility: "public"
}
}, onResponseReceive);
Cand ne vine raspunsul, trebuie sa verificam doar ca proprietatea error nu conține nici o eroare.
Data următoare o sa povestim despre SkyDrive si Messenger.

Comments

Popular posts from this blog

Why Database Modernization Matters for AI

  When companies transition to the cloud, they typically begin with applications and virtual machines, which is often the easier part of the process. The actual complexity arises later when databases are moved. To save time and effort, cloud adoption is more of a cloud migration in an IaaS manner, fulfilling current, but not future needs. Even organisations that are already in the cloud find that their databases, although “migrated,” are not genuinely modernised. This disparity becomes particularly evident when they begin to explore AI technologies. Understanding Modernisation Beyond Migration Database modernisation is distinct from merely relocating an outdated database to Azure. It's about making your data layer ready for future needs, like automation, real-time analytics, and AI capabilities. AI needs high throughput, which can be achieved using native DB cloud capabilities. When your database runs in a traditional setup (even hosted in the cloud), in that case, you will enc...

How to audit an Azure Cosmos DB

In this post, we will talk about how we can audit an Azure Cosmos DB database. Before jumping into the problem let us define the business requirement: As an Administrator I want to be able to audit all changes that were done to specific collection inside my Azure Cosmos DB. The requirement is simple, but can be a little tricky to implement fully. First of all when you are using Azure Cosmos DB or any other storage solution there are 99% odds that you’ll have more than one system that writes data to it. This means that you have or not have control on the systems that are doing any create/update/delete operations. Solution 1: Diagnostic Logs Cosmos DB allows us activate diagnostics logs and stream the output a storage account for achieving to other systems like Event Hub or Log Analytics. This would allow us to have information related to who, when, what, response code and how the access operation to our Cosmos DB was done. Beside this there is a field that specifies what was th...

[Post Event] Azure AI Connect, March 2025

On March 13th, I had the opportunity to speak at Azure AI Connect about modern AI architectures.  My session focused on the importance of modernizing cloud systems to efficiently handle the increasing payload generated by AI.