Jawbone UP İnceleme ve API Kullanımı

0 dakikada yazıldı

28382 defa okundu

Düzenle

Pedormetrelerle hiç uğraştınız mı bilmiyorum fakat son zamanlarda çok farklı pedometreler farklı özelliklerle ortaya çıkıyorlar veya belki de ben spora olan ilgimin hayatıma geri gelmesi ile bu durumun daha bir farkına varmaya başladım. Her neyse, konumuz tabi ki bu değil. Pedometre nedir? Kabaca attığınız adım sayısını sayan cihazlardır ve genelde Accelerometer kullanırlar. Bu cihazlardan birine denk gelmediyseniz bile kesinlikle aynı işi yapan iPhone, Android veya Windows Phone uygulamalarına denk gelmişsinizdir. Telefonun accelerometresini kullanarak attığınız adımları sayan bu uygulamalar pil ömrünüzden yemekle de bilinirler :)

Tamam, geyiği bir kenara bırakıyorum. Karşınızda Jawbone Up!

Jawbone bileklik olarak kullanabildiğiniz bir pedometre ve beraberinde birkaç güzel özellikle daha geliyor. Yukarıdaki videoda da anlatmaya çalıştığım üzere :) adımlara sayıyor, titreşim ile sizi uyandırabiliyor, uyku sürenizi ölçüyor ve gün içerisinde aktivitenizi olabildiğince arttırmak için de arada sırada sizi dürtükleyebiliyor. 10 gün pil ömrü ile rakipleri arasında ciddi şekilde dikkati çekiyor. Tabi bunu dijital bir ekran ve bluetooth bağlantı özelliklerine sahip olmadığı için yapabiliyor. Yine de 10 gün pil ömrü candır. Her gün şarj etmek zorunda olduğunuz 80 milyon cihaza bir tane daha eklensin istemeyeceğinizden eminim.

Cihazla ilgili kısa bir inceleme videosu (yukarılarda) yayınlamanın yanı sıra ben biraz da araştırma yaparak bu cihazın ürettiği veriyi kendi web sitesinden nasıl çekeriz kısmı üzerine çalıştım. Maalesef açık bir şekilde developerlarla paylaştıkları API'leri yok. Rezaletin dik alası. Neyse, bildiğim kadarı ile uygulama entegrasyonu düşünürseniz Jawbone ile iletişime geçip API'lerine full erişim sağlayabiliyorsunuz ama benim istediğimiz sadece salt "Read-Only" erişimdi. Yani doğrudan bir entegrasyon senaryom yoktu. O nedenle biraz araştırdım ve internette Jawbone API'lerini reverse engineering yöntemleri ile bulan arkadaşlarla karşılaştım. Üzerine birazcık daha uğraşıp mini mini bir wrapper yazdım :) Kaynak kodlarını da Github'a attım ki ilgilenenleriniz katkıda bulunabilsin :)

[Github]

Jawbone API Erişimi Testleri Kaynak Kodu

Bu işler nasıl oluyor derseniz, gelin hızlıca bir göz atalım.

[C#]

        private HttpClient aClient = new HttpClient();\         public HttpClient Client\         {\             get\             {\                 aClient.DefaultRequestHeaders.Add("user-agent"user_Agent);\                 //aClient.DefaultRequestHeaders.Add("x-nudge-token", nudge_token);\                 aClient.DefaultRequestHeaders.Add("x-nudge-platform"nudge_platform);\                 aClient.DefaultRequestHeaders.Add("x-nudge-request-id"nudge_request_id);\                 aClient.DefaultRequestHeaders.Add("x-nudge-device-id"nudge_device_id);\                 if (!string.IsNullOrEmpty(token))\                 {\                     aClient.DefaultRequestHeaders.Add("x-nudge-token"token);\                 }\                 return aClient;\             }\         }

Jawbone API'ları ile konuşmak için header'a koymamız gereken bazı bilgiler var. Bunlar arasında önemli olanlardan biri Nudge-Token. Token adından da belli olduğu üzere ilk Authentication sonrası alacağımız ve her API call'da kullanacağımız erişim anahtarımız. O nedenle Authentication API hariç her yere giderken bu Token'ın header'da bulunması şart. Geri kalan header değerlerini hardcoded tutabilirsiniz. Default değerler Github projesinde var.

[C#]

        public async Task\<string> GetToken()\         {\             HttpClient aClient = new APIClient().Client;\ \             var content = new FormUrlEncodedContent(new[] \             {\                 new KeyValuePair\<stringstring>("email"EMail),\                 new KeyValuePair\<stringstring>("pwd"Password),\                 new KeyValuePair\<stringstring>("service""nudge")\             });\ \             var result = await aClient.PostAsync(APIUris.LoginUricontent);\             var rootResult = await result.Content.ReadAsAsync\<APIEntities.RootObject>();\             if (rootResult.error != null)\             {\                 throw new Exception(rootResult.error.msg);\             }\             else\             {\                 return rootResult.token;\             }            \         }

Yukarıdaki kod ilk authentication kodumuz. Jawbone hesabınızın e-mail ve password'ünü göndererek geriye bir token istiyoruz. Bu token biraz önce bahsettiğimiz ve header'da tutacağımız token'ın ta kendisi. RootObject nesnesinin ne olduğunu merak edebilirsiniz. Jawbone API'lerinin döndüğü JSON'lara denk gelen C# nesnelerini ben Github'daki projeye ekledim. İşte RootObject de bu API call'un geriye döndürdüğü response'a denk geliyor. Nesneyi full buraya kopyala-yapıştır koymuyorum. Zaten Github'taki kaynak kodunda görebilirsiniz.

Jawbone UPJawbone UP

Token'ı aldıktan sonra benim son olarak yapmak istediğimiz aktivitelerimi çekmekti. Bu noktada kullanacağımız API adresi aşağıdaki şekilde;

https://jawbone.com/nudge/api/v.1.33/users/@me/social

Buradan epey detaylı bilgi dönüyor. Tüm aktivitilerle beraber attığınız adım sayısı, süresi, eğer varsa logladığınız yiyecekler ve onların kalori miktarlarının yanı sıra carb-protein-fat oranları gibi birçok detaylı bilgiyi API'lardan alabiliyorsunuz. Eğer API'larla ilgili daha fazla bilgi isterseniz aşağıdaki iki adresi incelemenizi tavsiye edebilirim. Benim işime yukarıdaki iki API yettiği için ben sadece onları Wrapper'a ekledim. Eğer siz de başka API'lar kullanacak olursanız Github'da beklerim ;)

https://niklaslindblad.se/2013/07/jawbone-up-api-updates/ http://eric-blue.com/projects/up-api/#JawboneUPAPI-NotableHTTPHeaders

Görüşmek üzere!