Bir Bölgedeki Popüler Mekanlar
Üniversite yıllarımda Mekansal adında bir projede yer almıştım, projenin amacı kabaca popüler mekanları göstermekti. Ben burada gerekli olan veriyi sağlama görevini üstlenmiştim. Bunun için o zamanlar popüler foursquare kullanmak iyi bir veri kaynağı demekti. Foursquare resmi API hizmeti ihtiyacım olan temel bilgileri sunuyordu fakat fazlasını değil. Büyük verileri gözden geçirmek istiyorsanız direkt iletişime geçerek konuyu onlarla konuşmanız yani ikna etmeniz gerekliydi. Buna enerji harcamak ve kesin olmayan bir cevap beklemekten ise standart API kullanarak istediğim şeyi elde etmeye karar verdim. İstediğim şey basitti: bir ildeki anlık en popüler mekanlar. Anlık olması demek o saatler içerisinde mekanda bulunan foursquare kullanıcı sayısını değerlendirmek anlamına geliyor.
Foursquare API
API bize sunduğu özelliklerden biri belli bir daire içerisindeki en popüler yaklaşık 50 (tam sayıyı hatırlamıyorum) mekanı özellikleri ile birlikte vermesiydi. Mekanların özellikleri adı, türü gibi bilgiler içermekte olup ayrıca o anda orada bulunan kullanıcı sayısını içermekteydi (bugüne kadar kaç kişinin orada olduğu bilgisi dahi bulunmakta). Aşağıda Bing MAPS üzerinde gerçek API verileri ile bir örneğini gösterebilirim: Yeşil çizgi: daire sınırları, M: merkez, Sayılar: o anda orada bulunan kişi
Bu daireleri yan yana aralarında boşluk kalmayacak şekilde birden fazla kullanarak belli bir bölgenin tamamını arayabilirim:
Burada tekrar bir sorun karşıma çıkıyor. Bu noktaları sadece bir bölge sınırı içerisine koymak. Bunu resmi API sağlamadığından kendim yapmalıyım. Her bölge için bir kere noktaların konumlarını bulmak yeterli olacaktır.
Başlangıç olarak bir dikdörtgen içerisini dolduralım:
Daha sonra bölge sınırları dışarısındaki noktaları atabiliriz (point in polygon):
Konsol Uygulaması
Noktaları belli kurallara göre belirlediğime göre geriye API sorgularını yapmak kalıyor. Sorgular topluca ve periyodik şekilde tekrarlı gerçekleşmesi gerekiyor. Bunun için makinenin anlaması kolay olan konsol uygulamasını uygun gördüm. Böylece program bulutta bir sanal sunucuda parametreler vererek periyodik olarak otomatik çalıştırılabilir. Programlama dili olarakta C# kullandım. Kısaca yaptığı şey sorgu yapacağı noktaları .json dosyasından parametre olarak almak sorguları yapmak bunları bir dosyaya kaydetmek. Bütün sorgular bitince verileri temizleyip (birbirinin aynı verileri silmek) düzenleyerek bir SQL veri tabanına kayıt etmek.
Visual Studio üzeride çalışan hali (konsol çıktısında mekan isimleri var):
C# api restfulapi consoleapp geolocation