Algolia nedir? Nasıl kullanılır?

Arama konusu yazılımda herkesin zorlandığı konulardan bir tanesi. Önemli olan veritabanındaki veriyi alıp göstermek değil, büyük ölçekli filtreleme işlemleri ve işlem sürelerini minimuma indirerek kullanıcıya iyi bir arama deneyimi yaşatmak. Buda büyük ölçekli projelerde çokta kolay olmayan bir durum. Bu gibi durumlarda Algolia diyor ki, gönder bana verini ben sana en hızlı şekilde bu hizmeti vereyim.

Ek olarak autocomplete, instantsearch gibi konularda da hizmet veren Algolia’nın ücretli olduğunu söylememe gerek yok sanırım? Hesap açıp 14 gün boyunca ücretsiz deneyebiliyorsunuz. Eğer hoşunuzda giderse (ki adamlar şu sıralar ciddi yatırımlar alıyorlar, belli ki herkesin hoşuna gidiyor) aylık minimum 29$ ödeyerek bu servisi kullanmaya devam edebilirsiniz.

Baktığınızda bu kadar büyük ölçekli işlerde çokta önemsenmeyecek bir rakam diyebiliriz. Elbette bu 29$’lık paketin bir limiti var ancak dediğim gibi, performans istiyorsanız o zaman biraz paraya kıymanız gerek 🙂

Okumaya devam et “Algolia nedir? Nasıl kullanılır?”

League of Legends Api Kullanımı

Geceleri kafa dağıtmak için oynadığım moba türü bir oyundur League of Legends.
Elbette biz meraklı geliştiricileri de unutmamışlar ve bir api servisi hazırlamışlar.

Oynayanlar bilirler lolnexus.com diye bir site var.
Oyuna girdiğimizde rakibi tanımak için buradan yardım alıyoruz.

Peki biz kendimiz için bir lolnexus yazabilir miyiz?
Cevap: Evet.
Lol Apisi ile bu mümkün.
Çünkü bize istediğimiz her şeyi veriyor ????

Gelelim nasıl kullanacağımıza?

İlk olarak aşağıdaki adresten kayıt olun. Ya da oyuna kayıtlıysanız bilgileriniz ile giriş yapın.
https://developer.riotgames.com/

Daha sonra yine üstteki adrese girip bir api key oluşturun.
Benim ki: 100e40c0-9c5a-4464-81ea-bb23e7ba93fe

Ve orada yazıyı göreceksiniz 10 saniyede 10 istek gönderebilirsiniz. 10 dakikada 500 istek. Buna uymazsanız apiden bilgi alamazsınız ????

Api metodları

Lol’ün bize verdiği tüm metodlara aşağıdaki bağlantıdan ulaşabilirsiniz.
https://developer.riotgames.com/api/methods

Örnek: Lol Karakter Bilgisini Çekmek

Örneğin lol’deki üyeliğinizin bilgilerini çekelim. Karakter adınız, leveliniz ve simgenizi bir sayfada gösterelim.
Bunun için bağlanmam gereken link şu;
https://tr.api.pvp.net/api/lol/BOLGE_BURAYA/v1.4/summoner/by-name/KULLANICI_ADI_BURAYA?api_key=API_KEY_BURAYA

Şimdi sırayla koyu alanları açıklayalım;
BOLGE_BURAYA => Hangi serverda oynuyorsanız o gelmeli. Örneğin türkiye server’ı için TR gibi.
KULLANICI_ADI_BURAYA => Lol’e giriş yaparken ki kullanıcı adınız değil! Lol’deki karakter adınız olmalı.
API_KEY_BURAYA => Yukarıda aldığımız api keyimiz

Sonuç olarak bilgiyi döndürecek linkimiz şöyle oluyor;
https://tr.api.pvp.net/api/lol/TR/v1.4/summoner/by-name/erbilen?api_key=100e40c0-9c5a-4464-81ea-bb23e7ba93fe

Gördüğünüz gibi JSON formatında benim karakter bilgilerimi döndürdü.
En basit örneğimiz buydu. Bunu isterseniz jquery ile isterseniz php ile alıp kullanabilirsiniz. Örnek php kullanımı;

<?php

$server = 'tr';
$username = strtolower('erbilen');
$api_key = '100e40c0-9c5a-4464-81ea-bb23e7ba93fe';

$url = 'https://tr.api.pvp.net/api/lol/' . $server . '/v1.4/summoner/by-name/' . rawurlencode($username) . '?api_key=' . $api_key;

$open = file_get_contents($url);
$data = json_decode($open, true);
$user_data = $data[str_replace(' ', '', $username)];

// karakter simgesi
$karakter_simge = 'http://ddragon.leagueoflegends.com/cdn/5.2.1/img/profileicon/' . $user_data['profileIconId'] . '.png';

// karakter adı
$karakter_adi = $user_data['name'];

// karakter seviyesi
$karakter_level = $user_data['summonerLevel'];

echo '<h3>'.$karakter_adi.' - '.$karakter_level.' Level</h3>
<img src="'.$karakter_simge.'">';

Başka neler yapılabilir?

https://developer.riotgames.com/api/methods adresinde de göreceğiniz üzere bir çok bilgi alınabilir.
O an oynanan canlı maçın bilgileri şu linkten alınabilir;
https://tr.api.pvp.net/observer-mode/rest/consumer/getSpectatorGameInfo/TR1/5663211?api_key=100e40c0-9c5a-4464-81ea-bb23e7ba93fe

Burada eğer ben oyundaysam bilgi döndürecektir. Onun dışında 404 ile karşılaşırsınız.
Bu linkte gördüğünüz gibi karakter adım değilde karakter id ile verileri çekiyorum. Karakter id’sine de yukarıdaki örnekte zaten ulaşmıştık.

Örnek: Karaktere ait oyun istatistikleri

Başka bir örnek daha yapalım. Örneğin karakterinize ait oyun istatistiklerine ulaşalım.
Unranked kaç maç kazanmış, dereceli kaç maç kazanmış. Kaç kişi öldürmüş, kaç minyon öldürmüş vs. gibi bilgiler.

Bunun için link yapımız aşağıda;
https://tr.api.pvp.net/api/lol/tr/v1.3/stats/by-summoner/5663211/summary?season=SEASON2015&api_key=100e40c0-9c5a-4464-81ea-bb23e7ba93fe

Bu link 2015 için geçerli. SEASON2015 yerine SEASON2014 yaparsak 2014 bilgilerim gelecek.

PHP ile yazdıralım bunları.

<?php

header('Content-type: text/html; charset=utf8');

$api_key = '100e40c0-9c5a-4464-81ea-bb23e7ba93fe';
$sezon = 'SEASON2015';
$karakter_id = 5663211; // erbilen karakterinin idsi (benim karakter)
$server = 'tr';

$url = 'https://tr.api.pvp.net/api/lol/' . $server . '/v1.3/stats/by-summoner/' . $karakter_id . '/summary?season=' . $sezon . '&api_key=' . $api_key;

$open = file_get_contents($url);
$data = json_decode($open, true);

$istatistikler = $data['playerStatSummaries'];

foreach ( $istatistikler as $istatistik ){
	echo 'Oyun modu: ' . $istatistik['playerStatSummaryType'] . '<br />' .
	'Kazanma: ' . $istatistik['wins'] . '<br />' . 
	'Şampiyon Öldürme: ' . $istatistik['aggregatedStats']['totalChampionKills'] . '<br />' .
	'Minyon Katletme: ' . (isset($istatistik['aggregatedStats']['totalMinionKills']) ? $istatistik['aggregatedStats']['totalMinionKills'] : '-yok-') . '<br />' . 
	'<hr/>';
}

?>

İpuçları

Şampiyon resimleri, karakter simgeleri, item resimler gibi görseller içinde api mevcut. Karakter simgesi için yukarıda bir örnek yapmıştık.
Tüm listeyi aşağıda vermeyeyim ancak tümüne şuradan ulaşabilirsiniz;
https://developer.riotgames.com/docs/static-data

İtem resimleri;
http://ddragon.leagueoflegends.com/cdn/5.2.1/img/item/1001.png
1001 – item numarası oluyor. Peki bu item numaralarını nereden öğreneceğiz?
Tabi ki şuradan: http://ddragon.leagueoflegends.com/cdn/5.2.1/data/en_US/item.json
Eğer çok karmaşık gözüküyorsa tarayıcınıza bir json view eklentisi kurmayı unutmayın!

Geri kalan her şey için geliştirici sayfasına bakmanız yeterli.
Hadi kolay gelsin.

jQuery ile Son Tweetleri Çekmek (REST API uyumlu)

Bildiğiniz gibi twitter api 1.1’e geçti ve artık izin almadan twitter’da işlem yapamıyoruz.. Dolayısı ile çalışan tüm twitter eklentileri patladı. Bu konuyla ilgili http://www.erbilen.net/513-twitter-rest-ap-11-ile-son-tweetleri-cekmek.html şu konuda zaten son tweet’leri çekmeyi anlattım. Şimdide bunu bir php dosyası haline getirip jquery ile bu php dosyasından çekmeyi göstereceğim. Böyle yapıyoruz çünkü php’yi dahil edip çalıştırdığımızda sitenin hızını etkiliyor, ancak böyle olduğunda yüklendiği zaman istek cevaplanıyor ve verileri yazdırılıyor, açılış hızına bir etkisi olmuyor.

Adım Adım İlerleylelim

Öncelikle twitter.php dosyası oluşturalım bir tane. Ve içerisine buradan indireceğiniz sınıf dosyalarını include delim.

require 'twitteroauth/twitteroauth.php';

Ancak bunun hemen öncesinde çıktıyı json olarak ayarlayalım;

header('Content-type: application/json; charset=utf8');

Şimdi consumer ve access keylerimizi elde ettikten sonra sınıfımızı başlatalım.

// consumer ve access
$consumer_key = 'BpyIHhw6GdvUnEu9ARwrHA';
$consumer_secret = 'OwKDNx4qtUqVbOtNuMJXusMldfXrlNqwG1GqSRZpSw';
$access_token = '24186944-9lI0G4BKEySlN4tMbcz5oTxrfmNam24J6VffbhzOs';
$access_token_secret = 'aLevlosLliXvSDYQVbKKJ7Wrmh2rGbqFSLsCU9BaY';

// sıfını başlatalım
$twitter = new TwitterOAuth($consumer_key, $consumer_secret, $access_token, $access_token_secret);

Bunları elde edebilmek için uygulama oluşturmanız gerekiyor. Nasıl uygulama oluşturacağınızı bilmiyorsanız aşağıdaki konuya göz atın;
http://www.erbilen.net/twitterda-uygulama-olusturmak

Sırada twitter kullanıcı adını almak var. Bunu get parametresi ile alalım. username olsun parametre adımız.

$username = isset($_GET['username']) ? htmlspecialchars($_GET['username']) : NULL;

Kaç tweet çekeceğimizi belirleyelim. Bunuda get ile yapalım. Eğer get yok ise default bir değer verelim. Örn: 5 gibi..

$count = isset($_GET['count']) ? (int) $_GET['count'] : 5;

Şimdi kullandığımız sınıfta bulunan get() metodu ile tweetleri çekelim.

$tweets = $twitter->get('https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name='.$username.'&count='.$count);

Sıra geldi bu tweetleri json olarak çıktı verdirmeye.

Yapmamız gereken şey php’de bulunan json_encode() fonksiyonunu kullanmak ????

print json_encode($tweets);

Unutmadan, jquery ile çekmek için en üstte şu header tanımlamasını yapmamız gerekiyor;

header('access-control-allow-origin: *');

Evvet.. tamamdır ????

Kodlarımızın Son Hali

Eğer her şey yolunda ise yazdığınız kodlar son haliyle şöyle olmalı;

get('https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name='.$username.'&count='.$count);

	print json_encode($tweets);
	
?>

Bunu sunucunuza twitter sınıf dosyaları ile birlikte bir klasöre ya da ana dizine atın.. Şimdi gelelim jquery ile nasıl kullanacağımıza..

jQuery ile Kullanımı

jQuery’de json değerlerini işlemek için $.getJSON() metodu bulunuyor. Yapmamız gereken önce sunucudaki twitter.php’ye bağlanmak ve dataları almak olacak.

$(function(){

	$.getJSON('http://www.erbilen.net/twitter.php?username=tayfunerbilen&count=10', function(data){
		// tweetler burada işlenecek..
	});

});

Artık data değerinde çektiğim son 10 tweet bulunuyor. Bu objeleri for ile işleyip herhangi bir div içerisine yazdırabiliriz.
Bu arada twitter tarih formatı biraz ilginç geliyor ???? Bu yüzden onu “x zaman önce” haline çevirmek için şuradaki cevaptan yararlanıyoruz;
http://stackoverflow.com/a/6549563

Ve devam edip, verileri bir nesne içerisine yazdırıyoruz..

$(function(){
	
	// twitter tarih formatını parse eden fonksiyon
	function parseTwitterDate(tdate) {
		var system_date = new Date(Date.parse(tdate));
		var user_date = new Date();
		var diff = Math.floor((user_date - system_date) / 1000);
		if (diff <= 1) {return "şuan";}
		if (diff < 20) {return diff + " saniye önce";}
		if (diff <= 3540) {return Math.round(diff / 60) + " dakika önce";}
		if (diff <= 5400) {return "1 saat önce";}
		if (diff <= 86400) {return Math.round(diff / 3600) + " saat önce";}
		if (diff <= 129600) {return "1 gün önce";}
		if (diff < 604800) {return Math.round(diff / 86400) + " gün önce";}
		if (diff <= 777600) {return "1 hafta önce";}
		return "on " + system_date;
	}
	
	// tweetlerin yer alacağı nesne
	var $twitter = $('#twitter');
	
	$.getJSON('http://www.erbilen.net/twitter.php?username=tayfunerbilen&count=10', function(data){
		var total = data.length,
			i = 0;
		$twitter.html(''); // önce içindekini temizle sonra tweetleri yazdır.
		for ( i; i < total; i++ ){
			var tweet = data[i].text; // tweet
			var date = parseTwitterDate(data[i].created_at); // tarih
			var url = 'https://twitter.com/' + data[i].user.screen_name +'/status/' + data[i].id_str;
			$twitter.append('<div class="tweet"><a href="' + url + '">' + tweet + '</a> (' + date + ')</div>');
		}
	});

});

Birazcıkta css kastınız mı bu iş tamamdır ???? Sonuç olarak benim demoya aşağıdaki linkten göz atabilirsiniz;

İndir

http://yadi.sk/d/-z84lvgj9GxfB

Twitter’da Uygulama Oluşturmak

Merhaba arkadaşlar, twitter’ın yeni api servisini (rest api 1.1) yayına almasıyla birlikte, çalışan bir çok örnek çalışmaz hale geldi.. Bunun sebebi, twitter’ın kullanıcılardan oturum bilgisi istemesidir.. Bunun içinde öncelikle twitter’da bir uygulamanızın olması gerekir.. Bu makale’de sizlere twitter’da nasıl uygulama oluşturabileceğinizi anlatacağım..

Öncelikle uygulama oluşturmak için developer sayfasında twitter hesabınız ile giriş yapın.. Daha sonra aşağıdaki bağlantıyı kullanarak uygulama oluşturma sayfasına gidin.
https://dev.twitter.com/apps/new

Twitter'da Uygulama Oluşturmak

Yukarıda gerekli yerleri kendinize göre doldurduktan sonra uygulamanız oluşmuş ve aşağıdaki gibi bir sayfaya yönlendirilmiş olmanız gerekir..

Twitter'da Uygulama Oluşturmak

Evet buraya kadar bir sorun yok ise şimdi bize lazım olan 4 bilgi var.. Bunlar;
– consumer_key
– consumer_secret
– access_token
– access_token_secret

İlk ikisi yönlendiğiniz sayfada mevcut.. Ancak diğer 2’si ni aynı sayfada en altta bulunan create my access token butonuna basarak oluşturuyorsunuz..

Twitter'da Uygulama Oluşturmak

Bastığınızda aşağıdaki gibi token’lerin oluşması gerekir;

Twitter'da Uygulama Oluşturmak

Buraya kadarda sorun yoksa tebrikler, twitter uygulamanızı başarıyla oluşturdunuz..

Şimdi Ne Yapacağım?

Bu makale’de sadece uygulama oluşturmayı öğrendik.. Bu uygulama işlem yapmak için diğer makale/videolara göz atabilirsiniz.
Örn: http://www.erbilen.net/twitter-rest-ap-11-ile-son-tweetleri-cekmek

Twitter Rest API 1.1 ile Son Tweetleri Çekmek

Twitter’da nasıl uygulama oluşturacağınızı bilmiyorsanız aşağıdaki makaleye göz atabilirsiniz;
http://www.prototurk.com/article/twitter-039-da-uygulama-olusturmak/176

twitteroauth sınıfını indirebileceğiniz github adresi;
https://github.com/abraham/twitteroauth

Twitter API döküman sayfası için bağlantı;
https://dev.twitter.com/docs/api/1.1

Facebook Video Bilgilerini Çekmek (FQL)

Facebook Sorgu Dili (FQL) ile facebook’da herkese açık videoların tüm bilgilerini kolay bir şekilde çekebilirsiniz.. Ben bu dersimde sizlere videoya ait orjinal kaynak linkini, hq kaynak linkini, video resmini ve video başlığını çekerek küçük bir örnek hazırladım.. Yararlı olması dileğiyle..

Facebook Php SDK Kütüphanesi

FQL’de sorgu yapmak için öncelikle facebook’un php sdk kütüphanesini indirip sayfamıza dahil etmemiz gerekir.. İndirmek için aşağıdaki bağlantıyı kullanabilirsiniz;
https://github.com/facebook/facebook-php-sdk/archive/master.zip

Facebook Uygulama Oluşturmak

FQL’de sorgu yapmak için birde facebook uygulaması oluşturmanız gerekiyor.. Uygulama oluşturmak için aşağıdaki bağlantıyı kullanabilirsiniz;
https://developers.facebook.com/apps

FQL Hakkında

FQL yani uzun adıyla Facebook Query Language (Facebook Sorgu Dili), facebook veritabanlarında sorgu yapmamızı sağlayan bir sorgu dilidir. SQL’e çok benzer, sadece facebook üzerinde sorgu yapmak için kullanılır. Facebook’da hangi tablolarda sorgu yapabileceğiniz görmek için aşağıdaki bağlantıyı kullanabilirsiniz;
https://developers.facebook.com/docs/reference/fql/

İNDİR

Derste hazırladığımız örneğin kaynak dosyalarına aşağıdaki bağlantıdan ulaşabilirsiniz;
http://yadi.sk/d/5Zo9ab6C4LbSc