NK API - Przykłady

  • Published on
    09-Jun-2015

  • View
    3.655

  • Download
    1

Embed Size (px)

DESCRIPTION

Przykady integracji z NK API. (c) Jarosaw Gomuka

Transcript

<ul><li> 1. NK APIPrzykadyAplikacjei StronyGry (c) Jarosaw Gomuka 2012</li></ul> <p> 2. Rodzaje API REST JS 3. REST APIDokumentacjaStworzone na potrzeby aplikacji mobilnych oraz stron. 4. REST APIAutentykacja bazuje na standardzie OAuth. Istnieje bardzo wiele bibliotekwspierajcych ten standard, patrz: http://oauth.net/code/W pierwszej kolejnoci naley dosta nk_token poprzez request /token/getPOST https://opensocial.nk-net.pl/v09/token/getPOST data:login=loginUseraNaNk&amp;password=hasoUseraNaNk[no cookies]Request Headers: 5. REST API - /token/get - headersRequest Headers:Content-Type: application/x-www-form-urlencodedContent-Length: 28Authorization: OAuth oauth_signature_method="HMAC-SHA1", oauth_consumer_key="customerKeyZPanelu",oauth_timestamp="1352376881", oauth_nonce="272317321310634", oauth_version="1.0", oauth_signature="jVaVvVZcLZ1mMHzU3dzAmw3vxPE%3D"oauth_version="1.0",oauth_timestamp="1352376881"oauth_nonce="272317321310634" - musi by unikalna, przynajmniej 15 znakwoauth_signature_method="HMAC-SHA1" - musi by ta wartooauth_signature="jVaVvVZcLZ1mMHzU3dzAmw3vxPE%3D" - to trzeba obliczy:)oauth_signature obliczamy poprzez base64_encode(HMAC-SHA1(oauth_base_string, &amp;));Jeli wszystko pjdzie dobrze - dostaniemy odpowiednk_token=jakiDziwnyNapisWBase64 6. REST API - base stringPrzykadowa warto POST&amp;http%3A%2F%2Fjava1.omega.nknet%3A2080%2Fv09%2Ftoken%2Fget&amp;login%3Dabcef%26oauth_consumer_key%3DjakisCustomerKey%26oauth_nonce%3D273217097465315%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1352377781%26oauth_version%3D1.0%26password%3DjakiPasswordPierwsza cz POST - bo wysyalimy request POSTCz druga to url bez query parameters, zakodowany przez funkcje urldecodeCz trzecia to posortowane i skonkatenowane wszystkie parametryWarto pamita, e trzeba podpisa te tre requestu (gdy ma to sens - patrz pytanie na supporcie).Wszystkie requesty musz by podpisane przez ten mechanizm!! 7. REST API - @me, @self, @allW specyfikacjach wielu endpointw moemy znale wynalazki typu @me, @self, @all.@me - aktualnie zalogowany user@self, @friends, @all - kto moe zobaczy obiekt wzgldem ktrego wykonywana jest akcjaPrzykady: 8. Pobranie danych uytkownikaGET http://opensocial.nk-net.pl/v09/social/rest/people/person.602916f34c2ee73d/@self?nk_token=pynHhd5gLOetEOL3HtkFLwAUZ-4jHwMb6yda8Dkk-ratXkexcYcJhjWliEusR_QGTpBLvl1Rto51k8-s24l9O9wFKaqQ9mvNDMKSU90Gp2f[no cookies]Request Headers:Authorization: OAuth oauth_signature_method="HMAC-SHA1", oauth_consumer_key="psiloctest1",oauth_timestamp="1352379660", oauth_nonce="275096425520387", oauth_version="1.0", oauth_signature="GeGBNljcPKIQPeLXgCtYX8zgVCY%3D"Connection: keep-aliveOdpowied:{"entry":{"isOwner":true,"isViewer":true,"id":"person.602916f34c2ee73d","thumbnailUrl":"http://s.m.nk.pl/img/avatar/avatar_default_female","name":{"formatted":"du1 mnk (u003cscriptu003ealert(1);u003c/scriptu003e)","additionalName":"mnk (u003cscriptu003ealert(1);u003c/scriptu003e)","familyName":"mnk","givenName":"du1"},"photos":[{"value":"http://s.m.nk.pl/img/avatar/avatar_default_female","type":"thumbnail"}],"displayName":"du1 mnk(u003cscriptu003ealert(1);u003c/scriptu003e)"}} 9. Dodawanie wpisu ledzikowegoPOST https://opensocial.nk-net.pl/v09/social/rest/activities/@me/@self/app.sledzik?nk_token=pynHhd5gLOetEOL3HtkFLwAUZ-4jHwMb6yda8Dkk-ratXkexcYcJhjWliEusR_QGTpBLvl1Rto51k8-s24l9O9wFKaqQ9mvNDMKSU90Gp2fPOST data:{"title":"Some short text 123"}[no cookies]Request Headers:Content-Type: application/jsonContent-Length: 31Authorization: OAuth oauth_body_hash="%2FIyGusEZ4w8%2BuI9gOr5emjQha9E%3D", oauth_signature_method="HMAC-SHA1", oauth_consumer_key="psiloctest1", oauth_timestamp="1352379705", oauth_nonce="275140932345687", oauth_version="1.0", oauth_signature="Rhv3r9eVAx66MDlcTepvQ7bPkuw%3D"Connection: closeResponse 200:{"entry":{}} 10. Co gdy co nie dziaa?Proponujemy nastpujc kolejno dziaa: Naley zwrci uwag na kod bdu. Z tej informacji naprawd duowynika! Zobaczy do logw - http://developers.nk.pl/pl/logi_aplikacji/ Zapa request tcpdumpem lub wypisa go netcatem i zobaczy czywysyane dane s zgodne ze specyfikacj. Zada szczegowo opisane pytanie na naszym serwisie wsparcia 11. API JSW tej czci bdziemy tworzy aplikacje opensocialowe.Jako kontenera aplikacji uywamy Shindiga ktry implementuje standard OpenSocial.To Shindig odpowiada za renderowanie waszych aplikacji tworzenie proxy requestw cacheowanie wszystkiego co trzeba RPC/REST requests i wiele innychCelujemy we wspieranie OpenSociala wwersji 0.9. Nie wspieramy caegoOpenSociala.Lista dostpnych funkcjonalnociznajduje si w naszej dokumentacji. 12. API JSAplikacje definiujemy przez pojedynczy plik gadget.xmlAdres do tego pliku podajemy w panelu zarzdzania aplikacjami i stronami. 13. Przygotowanie rodowiskadeweloperskiego1. Tworzymy aplikacj na https://developers.nk.pl/developers2. Ustawiamy j na tryb debug (wycza cacheowanie)3. Dodajemy swj NK ID do testerw aplikacji4. Wchodzimy na aplikacj http://nk.pl/#applications_test/cotam (dokadny link znajduje si w panelu deweloperskim)Jako gadget.xml na pocztek moemy wklei klasyczny Hello World;) Hello World 14. PrzykadyPonisze przykady dostpne na https://github.com/jaaro/various/tree/master/nk1. ROT132. Informacje o uytkowniku3. Informacje o znajomych4. Embedding flash5. Swfobject6. Pogoda na nk (ale czemu nie dziaa!?)7. Hamster fall8. Dodawanie ledzia na nkDalsze funkcjonalnoci JS API proponuj testowa w aplikacji nkda. 15. Patnoci - Kod JSfunction handlePaymentResponse(dataItem) {if (dataItem.hadError()) {alert(got an error);} else {var orderId = dataItem.getData().getField(opensocial.Payment.Field.ORDER_ID);alert(payment request accepted, orderId:+ orderId);}}function makePayment() {var params = {};params[opensocial.Payment.Field.AMOUNT] = 5;params[opensocial.Payment.Field.MESSAGE] = "large sword";params[opensocial.Payment.Field.PARAMETERS] = "some_app_specific_params";var payment = opensocial.newPayment(params);opensocial.requestPayment(payment, handlePaymentResponse);} 16. PatnociW panelu deweloperskim naley poda "Adres do obsugi transakcji"W przypadku gdy transakcja zakoczy si sukcesem, nk wysya pod ten adres requestPOST /some/url HTTP/1.1Host: gamehost.comContent-Type: application/x-www-form-urlencodedamount=5&amp;appId=app.1&amp;containerDomain=nk.pl&amp;message=large%20sword&amp;oauth_consumer_key=key&amp;oauth_nonce=252b9d59381dd803dcf156663d1375d9&amp;oauth_signature=%2F7%2BGAbB0DDYNZwC%2BsSACe1O5Kpw%3D&amp;oauth_signature_method=HMAC-SHA1&amp;oauth_timestamp=1273755263&amp;oauth_version=1.0&amp;orderId=32787067d4de27d7fb97d816723d5c75bb9fd337&amp;parameters=some_app_specific_params&amp;paymentType=payment&amp;viewerId=person.abc 17. PatnociAplikacja musi potwierdzi otrzymanie patnoci poprzez wygenerowanienastpujcej odpowiedzi na request:HTTP/1.1 200 OKContent-Type: application/json{"orderId":"32787067d4de27d7fb97d816723d5c75bb9fd337","responseCode":"ok","responseMessage":"all ok","signature":"7e7455aac4a1be3186185e5bd056791adf01818c"}W przypadku gdy z potwierdzeniem jest co nie tak, nasz server bdzie wysya requestpotwierdzajcy patno co minute przez nastpne 24 godziny (lub do momentu otrzymania poprawnejodpowiedzi).Jak testowa patnoci: Wylij maila na adres egbtest@nasza-klasa.pl z prob o przyznanie egb napotrzeby testw patnoci. 18. Zapraszanie znajomych do aplikacjifunction handleInviteFriendResponse(responseItem) {if (responseItem.hadError()) {// handle error} else {alert(responseItem.getData() +invited friend(s));}}function invite() {var msg = Join me !;var paramsObject = new Object();nk.requestInviteFriends(msg, paramsObject, handleInviteFriendResponse);}invite(); 19. Sprawdzanie czy uytkownik jestzapisany do grupy aplikacjifunction response(data) {if (data.hadError()) { // handle error} else { var result = data.get("isInGroup").getData(); if (result) { output("User is in applications group"); } else { output("User is NOT in applications group"); }}};function request() {var req = opensocial.newDataRequest();req.add(nk.groups.newIsUserInAppGroupRequest(), "isInGroup");req.send(response);};request(); 20. Dodawanie uytkownika do grupyaplikacjifunction callback(responseItem) {if (responseItem.hadError()) {// handle error} else {console.log(responseItem);}}function invite() {nk.groups.requestAddUserToAppGroup(callback);}invite(); 21. Dodawanie fotkifunction uploadPhotoHandler(resp) {if (resp.hadError()) {// handle error}}function uploadPhoto() {nk.photos.requestUploadAppPhoto("Photo added from Dev App", null, uploadPhotoHandler);}uploadPhoto(); 22. Ile osb zainstalowao aplikacjfunction response(data) {if (data.get("amount").hadError()) { // handle error} else { alert(data.get("amount").getData());}};function request() {var req = opensocial.newDataRequest();req.add(nk.newGetAmountOfUsersRequest(), "amount");req.send(response);};request(); 23. Dodawanie wpisu (ledzika)function onActivityPosted(data) { if (data.hadError()) { alert("There was a problem: " + data.getErrorMessage()); } else { output("The activity was posted successfully."); }};function postActivity(title) { var data = {}; data[opensocial.Activity.Field.TITLE] = title; var activity = opensocial.newActivity(data); opensocial.requestCreateActivity(activity,opensocial.CreateActivityPriority.HIGH,onActivityPosted );};postActivity("This is a sample activity"); 24. Wiadomo midzy uytkownikamifunction response(data) { if (data.hadError()) { alert("There was a problem: " + data.getErrorMessage()); } else { output("The message was sent."); }};function request() { var iconUrl = new opensocial.Url({"type" : "icon", "address" : "http://www.example.org/icons/notifyIcon.jpg"}); var msgParams = { "title" : "Title of notification", "urls" : new Array(iconUrl), // image used in notification "type" : "notification",// only notification is currently supported }; var msg = opensocial.newMessage("Body of notification", msgParams); opensocial.requestSendMessage(["person.XXX"], msg, response);};request(); 25. JS APIDuo wicej przykadw znajdziecie w naszej dokumentacji(wraz z dokadn specyfikacj funkcji! )http://developers.nk.pl/documentation/nk-api/opensocial-js-api/ 26. Kilka ciekawych funkcjiNaley pamita, e nawet w funkcjach ktre wspieramy, niektre parametry mog by obsugiwaneinaczej ni w oryginalnej specyfikacji OpenSocial - np. Activity.Lista wspieranych parametrw znajduje si na http://developers.nk.pl/documentation/nk-api/opensocial-js-api/Ciekawsze funkcjegadgets.log / gadgets.warn / gadgets.errorgadgets.json.parse / gadgets.json.stringifygadgets.window.adjustHeightgadgets.io.makeRequest / osapi.http.get</p>