C# ile Foursquare API Kullanarak Uygulama Geliştirme

foursquare logo

Merhabalar. Uzunca bir aradan sonra blog yazmaya yeni fırsat buldum ve öğrendiğim bir şeyi sizlerle paylaşıyorum. Umarım yararlı olur.

Bugünkü konumuz C# .Net ile Foursquare API.  Windows Phone 8 geliştirdiğim Sade Kahve uygulamama ne zamandır eklemek isteyip eklemeye vakit bulamadığım en yakın kahve dükkanını bulma özelliğini sonunda ekledim. Sizin konumunuzu alıp, Bing Maps ile sizi, listelediği kahve dükkanları arasından seçtiğiniz kahve dükkanına yönlendiriyor. Uygulamanın linkine buraya tıklayarak ulaşabilirsiniz.

Öncelikle neden NuGet paketlerden SharpSquare kullanmadığımı söyleyerek başlayayım. Kütüphaneyi kullanırken “TargetInvocationException”  hatası aldım ve ne yaptıysam bu hatayı çözemedim. Bu benim hatam da olabilir, kütüphanenin Windows Phone 8.1 ile ufak tefek uyumsuzukları varsa ondan da kaynaklanıyor olabilir. Sade Kahve uygulamamın güncellemesini geciktirmemek ve kullanıcı yorumlarındaki istekleri bir an önce gerçekleştirmek adına bu hatayla oyalanmadım ve WebAPI kullanmaya başladım. Bundan dolayı bende sorgularımı kendimin atabildiği küçük bir fonksiyon yazdım. Yazının ilerleyen kısımlarında örnek kodu sizlerle paylaşıyor olacağım. Foursquare API kullanımını baştan itibaren anlatmaya başlıyorum.

 1. Foursquare API’ya Kayıt Olma ve ClientID ile ClientSecretID’nin alınması.

1-) Öncelikle Foursquare üzerinden uygulamanızı kayıt ettirmeniz ve uygulamanıza ait ClientID ve ClientSecretID‘nizi almanız gerekmektedir. Bunun için de şu linke tıklayarak aşağıdaki işlemleri yapmanız gerekmektedir.

Screen1


2-) Hesabınıza giriş yapmanızı isteyebilir. Giriş yaptıktan sonra Sağ Tarafta bulunan “Yeni Bir Uygulama Oluştur“a Tıklayın.

Screen2JPG

3-) Uygulamanıza ait bilgileri doldurduktan sonra en aşağıda bulunan “Değişikleri Kaydet“e tıklayın.

Screen3

4-) Gerekli bilgileri kaydettikten sonra açılan sayfa aşağıdaki gibi olacaktır ve size uygulamanızla ilgili bilgiler verecektir. ClientID ve ClientSecret, uygulamanıza ve size ait gizli bir bilgidir ve bu bilgiyi saklı tutmalısınız.

Screen4

Foursquare’da kayıt olmayı tamamladık. Şimdi istediğimiz verileri WebAPI ile alma zamanı.

2. C# ile Foursquare API’dan Veri Çekmek.

Başlamadan önce: 

Öncelikle bilmeni gereken bazı limitler mevcut. Bu limitlerden biraz bahsetmenin gerekli olduğunu düşünüyorum.

Şu linkte anlatıldığı gibi, Foursquare API’ın belirli bir sorgu limiti mevcut. Fakat bu limit çok düşük değil.

Uygulamanızın;

Kullanıcı girişi yapılmadan sadece mekan sorgusunun saatlik 5000 sorgu limiti mevcut.

Kullanıcı girişi yapılacak ise giriş yapılan her hesap için saatte 500 sorgu limitiniz var. Şöyle de söylenebilir. OAuthtoken kullanarak, yani kullanıcı girişi yapılmış bir şekilde her kullanıcı için 500 sorgu limitiniz var. Yani kendi hesabıyla uygulamanızda oturum açan kullanıcınız, saatte maksimum 500 check-in yapabilir veya 100 check-in + 400 mekan sorgusu yapabilir. Eğer 4 kullanıcınız var ise her kullanıcı için 500 olmak üzere 2000 sorgu hakkınız olur. Fakat bir kullanıcının sorgu hakkı başka bir kullanıcıya aktarılamaz. Her kullanıcı maksimum 500 sorgu yapabilir.

Kullanıcı girişi olmadan ise 5000 sorgu atabilirsiniz. Örneğin saatte 2500 mekan araması yapıp artı 2500 mekan önerisi alabilirsiniz. Burada küçük bir ipucu verecek olursam, kullanıcısız yapabileceğiniz herşeyi kullanıcının OAuthtoken’ini kullanmadan yapın. Bunun için iyi analiz yapmalısınız. Örneğin mekan sorgusu kullanıcı OAuthToken’i olmadan yapılıyor fakat eğer hem OAuthtoken ile hem de kullanıcı olmadan yapılıyorsa, uygulamanızın sürekliliği için kesinlikle kullanıcısız sorguyu tercih etmeniz gerekir. Yoksa kullanıcılarınız kendilerini Foursquare API limitine takılmış olarak bulabilirler.

API Kullanımı ve Veri Tipleri:

Bu uzunca dipnottan sonra kodlamaya geçiyorum. Herhangi bir sıkıntı oluşması durumunda yorum veya eposta ile soru sorabilirsiniz ve dediğim gibi yazının sonunda Windows Phone 8.1 için hazırlanmış örnek projeyi bulabilirsiniz.

Örnek senaryo olarak, telefonun konum bilgisini kullanarak etrafımızda 1 kilometre etrafımızda yer alan bütün restoranların listesini çekip, bunu DataTempletini tanımladığımız ListView üzerinde göstereceğiz.

Öncelikle Foursquare API, “GET” methodu ile çalışıyor ve “Json”  tipinde veri döndürüyor. Json tipi ile ilgili detaylı bilgiyi bu linke tıklayarak öğrenebilirsiniz.

Bizim API’dan veri çekebilmemiz için gereken ClientID ve ClienSecretID‘yi yazının üst tarafnda almıştık. Aynı zamanda örnek kodda kullancağımız yemek kategorisinin kodunu, arama yapacağımız çemberin büyüklüğünü ve API’in adresini , program sırasında gerekli yerlerde kullanmak ve kodun okunabilirliğini arıtmak üzere  “const string” olarak tanımlıyoruz.

public const string clientID = “Client ID’nizi buraya yazın.”;

public const string clientSecret = “Client Secret kodunuzu buraya yazın.”;

public const string foodCode = “4d4b7105d754a06374d81259”;

public const string apiUrl =https://api.foursquare.com/v2/venues/search?”;

public const int radius = 1000;

Bütün kategorilerin kodlarının bulunduğu listeye şu linkten ulaşabilirsiniz: Foursquare API Category Hierarchy.

API’a sorguyu HttpClient aracılığı ile, istediğimiz değerleri apiUrl değişkeninin sonuna ekleyerek atacağız. Yani API’dan geri dönen cevabı biz istediğimiz gibi özelleştirebiliyoruz. Mesela etrafta sadece belirli kategoriden veya belirli bir alan içindeki veya isminde istediğimiz kelimelerin geçeceği mekanları listeletebiliriz. Bütün sorgulama kriterleri için şu linke tıklayabilirsiniz: Foursquare API Venues Search Parameters

Örnek projemizde dediğimiz gibi biz “Yemek” kategorisinden, cihazın konumunun 1 kilometre “Yakınında“ki bütün mekanları çekmek istiyoruz. Bu durumda yapacaklarımız şunlarır:

Windows Phone 8.1 cihazımının konum bilgisine ihtiyacımız var. Bunun için package.appxmanifest dosyasını açıp, cihazın Konum (Location) bilgisine ve internete erişimi için izinlerini alıyoruz.

Screen5

İzinler aldıktan sonra, konum bilgisini alacağımız objemizi tanımlayıp hemen konum bilgisini alıyoruz.

Geoposition position = await new Geolocator().GetGeopositionAsync();

Konum bilgisini aldıktan sonra kodun okunabilirliğini artırmak için, cihazın konumunun enlem derecesinin latitude , boylam derecesinin longitude değişkeninde saklayacağız. Bunlar position objesinin içinde double tipinde saklanmaktadır. Fakat bizim “string“e ihtiyacımız olduğu için ToString() methodu ile string’e çeviriyoruz.

string latitude = position.Coordinate.Latitude.ToString();
string longitude = position.Coordinate.Longitude.ToString();

Artık her şey hazır olduğuna göre sorguda kullanacağımız URL‘i oluşturmaya başlayabiliriz. Kullanıcı girişi olmadan atacağımız her sorguda olması gerekenler clientId, clientSecret ve tarihtir. İlk olarak her sorguda olması gereken değerleri queryUrl değişkenimize ekleyelim. Her eklediğimiz iki paremetre arasında and anlamında olan & işaretini koyuyoruz.

string queryUrl = url;

queryUrl += “client_id=”+ clientID;

queryUrl += “&client_secret=” + clientSecret;

queryUrl += “&v=” + String.Format(“{0:yyyyMMdd}”, DateTime.Now);

Şimdi istediğimiz kriterleri ekliyoruz. Bunlar, cihazın konumu ve bu konumun 1 kilometre etrafındaki restoranlardı. Bunun için Foursquare API’ın parametre tablosundan yararlanarak queryUrl stringine ekliyoruz.

queryUrl += “&ll=”+latitude + “,” + longitude;

queryUrl += “&radius=” + radius.ToString();

queryUrl += “&categoryId=” + foodCode ;

Adresimiz artık bize istediğimiz değeri döndürmeye hazır ve queryUrl, string değişkeni içinde saklanıyor. Artık API’dan JSON tipindeki sorgu sonucunu çekme zamanı.

HttpClient client = new HttpClient();

string jsonStringawait client.GetStringAsync(queryUrl );

Artık elimizde JSON formatında istediğimiz ver mevcut, fakat bizim bunu kullanabileceğimiz bir formata döndürmemiz gerekmektedir. JSON’u string olarak ele alıp tek tek parse edebilirsiniz fakat bu gereksiz uğraş olacaktır.  Bunun için JSON verilerini belirli bir obje tipine döndüren Newtonsof.Json.JsonCovert methodunu kullanacağız. Fakat öncelikle bu JSON verisine karşılık gelen class yapısına ihtiyacımız var. Bunun için  dönen JSON verisini http://json2csharp.com/ adresine yapıştırıp “Generate” butonuna basmamız yeterli  veya uzun uzun kendi elinizle de yazabilirsiniz class’ınızı. Seçim sizin.

Bu siteden dönen class yapısını tek bir class altında tanımladım. Yani önce “Foursquare” adında bir class tanımlayıp, siteden aldığım class yapısını “Foursquare” class’ımın içine yapıştırdım. Böylelikle okunabilirlik açısından avantajlı olarak bütün elementlere “Foursquare.bla” şeklinde ulaşacağım. Siteden elde edilmiş class yapısını ekteki projeden bulabilirsiniz.

Bundan sonrası çok basit. Öncelikle Newtonsoft.Json sınıfını projemize ekleyelim. Bunun için;

1.) Solution Explorer‘da bulunan References’a sağ tık yaparak Manage NuGet Packs’ i seçelim.

Screen6

2.) Arama yerine “Newtonsoft” yazarak çıkan “Json.Net” frameworkünü projemize ekleyelim.

Screen7

3.) Yükleme tamamlandıktan sonra, ekranınızda “Json.Net” yanında aşağıdaki gibi bir onay işareti göreceksiniz.

Screen8

Projemize Json.Net frameworkünü ve dolayısıyla ihtiyacımız olan Newtonsoft.Json sınıfını eklemiş olduk.

Elimizde “Foursquare” adıyla, API’dan aldığımız JSON’a özel sınıfımız da var. Artık parse zamanı. İşi “Newtonsoft.Json” sınıfınının “JsonConvert.DeserializeObject” methoduna bırakma zamanı.

Foursquare returnValueJsonConvert.DeserializeObject<Foursquare>(jsonString);

Bundan sonrası artık sizin marifetiniz. ” returnValue.location.distance ” kullanarak kullanıcıya mesafe mi söylersiniz, kullanıcıyı BingMap kullanarak yönlendir misiniz orası sizin.

Dediğim gibi herhangi bir sorunuz olursa bana e-posta veya buraya yorum yazarak ulaşabilirsiniz. Elimden geldiğince yardımcı olmaya çalışırım.

Dip Not: Derleme sırasında “Cannot find type System.ComponentModel.PropertyDescriptor in module System.dll” hatası alanlar, Json.Net’i “Manage NuGet Packagets” ile kurmamış ve internetten bulduğu “Newtonsoft.Json.dll”  dosyasını ekleyerek yaptıysa, Manage NuGets Packages ile kurunca hata düzeliyor.

Yazı boyunca anlatılan kod’un source dosyası : Dropbox – Metehan Toksoy

Reklamlar

C# ile Foursquare API Kullanarak Uygulama Geliştirme” üzerine 5 yorum

    • Foursquare’in bu yazıda anlattığım public API’dan mekanda kaç kişi olduğunu çekebilirsin ancak. Bunun dışında mekandaki kişilerin listeni çekmek istiyorsan Foursquare’in Api’nin auth olanını kullanman lazım. Yani kullanıcı girişi ile alınınan auth token kullanarak sorgu atarsan kişi listesini yükleyebilirsin. Bir kaçış yolu olarak, uygulaman için bir foursquare hesabı alıp onunla auth token üretip o token’ı kullanabilirsin.

  1. Üstad Merhaba, Öncelikle sana bir kaç sorum olacak. 1. Yapılan bir checkini swarmda ekranda hoşgeldin Furkan gibi nasıl gösterebilirim. 2. İse Foursquare hesabımda ne kadar checkin varsa nasıl listelebilirim. Yardımcı olursan sevinirim

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

w

Connecting to %s