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.

MySQL 30 Günden Eski İçerikleri Silmek

30 günden eski içerikleri silmek büyük projelerde işimize yarayacaktır. Ben genelde öyle yapıyorum, çok önemli içerik depolanmıyorsa anlık olarak kullanıcıyı ilgilendiren içerikler ise belli aralıklarla bu sorguyu çalıştırıp 30 günden eski içerikleri veritabanınızda boşu boşuna yer kaplamaması için silebilirsiniz.

DELETE FROM tablo_adiniz
WHERE tarih_alani_adiniz < DATE_SUB(NOW(), INTERVAL 1 MONTH);

Kırmızı yere tablo adınızı, yeşil yere de tabloda tarihi tuttuğunuz alanın adını yazıp çalıştırmanız yeterli sorguyu.

İsterseniz 10 günlük, 15 günlük.. x günlük şeklinde de içerik silebilirsiniz.
O zamanda INTERVAL 1 MONTH yerine INTERVAL x DAY olacak.

Mesela 15 günlük içeriği silelim;

DELETE FROM tablo_adiniz
WHERE tarih_alani_adiniz < DATE_SUB(NOW(), INTERVAL 15 DAY);

Güncelleme: MySQL Event Scheduler (olay zamanlayıcısı) ile bu işlemi otomatikte yaptırabiliriz. Şu sorguyu çalıştırmamız yeterli;

SET GLOBAL event_scheduler = ON;

DELIMITER $$

CREATE EVENT clearLog
ON SCHEDULE EVERY ‘1’ MONTH
STARTS ‘2011-05-01 00:00:00′
DO
BEGIN
DELETE FROM tablo_adiniz WHERE tarih_alani_adiniz < DATE_SUB(NOW(), INTERVAL 1 MONTH);
END$$

DELIMITER ;

Photoshop Font Boyut Sorunu ve Çözümü

Photoshop ile çizilmiş tasarımlarda Resolution’ı yüksek çizildiğinde orjinal font boyutlarını göremiyoruz.
Bu sorunu yaşayana arkadaşlar layerlarını bir group içerisine alsınlar. Mevcut sayfa boyutlarında resolution’ı 72 olan yeni bir sayfa oluşturup bu grubu boş sayfaya atsınlar.
Yapamayanlar için birde video hazırladım, inceleyebilirsiniz.


BasicDB ile Kolay Veritabanı İşlemleri

1 yıl kadar önce size şu dersimde pdo kullanımını anlatmıştım.
Ancak gerek uzman cevap’ta gerekse gelen maillerde pdo kullanımında sıkıntı yaşıyan arkadaşlar olmuş.
Uzun bir süre önce bende kendi işlerimde kullanmak için pdo’ya ait BasicDB adında bir alt sınıf hazırladım.
Bu sayede veritabanı işlemlerimi daha kolay ve anlaşılır yapabiliyorum.
Sizlere de bu videomda bu sınıfın kullanımını örneklerle anlatacağım.

BasicDB Github Sayfası;
https://github.com/tayfunerbilen/BasicDB

Veritabanı Bağlantısı

$db = new BasicDB('host', 'vtadı', 'kadı', 'şifre');

Veri Ekleme Örneği

$query = $db->insert('uyeler')
            ->set(array(
                 'uye_adi' => 'test',
                 'uye_sifre' => 123456,
                 'uye_eposta' => '[email protected]'
            ));
   
if ( $query ){
  echo 'Last Insert Id: '.$db->lastId();
}

Veri Güncelleme Örneği

$query = $db->update('uyeler')
            ->where('uye_id', 2)
            ->set(array(
                 'uye_adi' => 'başka ad'
            ));
   
if ( $query ){
  echo 'uye guncellendi.';
}

Veri Silme Örneği

$query = $db->delete('uyeler')
            ->where('uye_id', 2)
            ->done();
   
if ( $query ){
  echo 'veri silindi.';
}

Veri Listeleme Örneği

// select
$query = $db->from('icerikler')
            ->join('uyeler', '%s.uye_id = %s.icerik_uye_id', 'left')
            ->where('icerik_onay', 1)
            ->or_where('icerik_onay', 2)
            ->orderby('icerik_id', 'desc')
            ->groupby('icerik_uye_id')
            ->limit(0, 10)
            ->all();
   
if ( $query ){
  foreach ( $query as $row ){
    print_r($row);
  }
}

Tekli Veri Listeleme Örneği

$row = $db->from(‘icerikler’) ->where(‘icerik_id’, 5) ->first(); print_r($row);

Sayfalama Örneği

// toplam veri
$totalRecord = $db->from('users')
                  ->select('count(user_id) as total')
                  ->total();

// sayfa başına kaç veri gözükecek?
$pageLimit = 4;

// sayfa parametresi? Örn: index.php?page=2 [page = $pageParam]
$pageParam = 'page';

// limit için start ve limit değerleri hesaplanıyor
$pagination = $db->pagination($totalRecord, $pageLimit, $pageParam);

// normal sorgumuz
$query = $db->from('uyeler')
            ->orderby('uye_id', 'DESC')
            ->limit($pagination['start'], $pagination['limit'])
            ->all();
            
print_r($query);

// sayfalamayı yazdır
echo $db->showPagination('http://localhost/test/?'.$pageParam.'=[page]');

jQuery Touchswipe Eklentisi ile Parmak Hareketlerini Yakalamak

Telefon ve Tabletlerde ekrana parmak ile dokunduğumuzda bunu yakalayıp işlem yapmamızı sağlayacak güzel bir eklenti tanıtacağım size.
Ben bu eklentiyi kullanarak parmak ile kaydırarak açılıp kapanan bir yan menü örneği hazırladım videoda.
Umarım işinize yarar, zira ben responsive dökümlerde bu eklentisi sıkça kullanıyorum.

Eklenti Adresi;
https://github.com/mattbryson/TouchSwipe-Jquery-Plugin

Benim için 2014 nasıl geçti?

Herkese mutlu yıllar, bir yılı daha geride bırakmanın hüznünü ve yeni bir yıla girmenin mutluluğunu yaşıyoruz.
Geçen 2 senede olduğu gibi bu senede benim için nasıl geçtiğinin değerlendirmesini yapacağım bu konuda.

– Öncelikle bu seneki yeni yaşıma istanbul’da kendi evimde girdim.
– Yani evet, 6 ay kadar istanbul’da arkadaşım ile birlikte yaşadım ve orada çalıştım. (tekrar eskişehir’deyim :))
– 1,5 aylığına ise Antalya’da çalıştım.
– 1,5 aylığına Azerbaycan – Bakü’de çalıştım.
– Geçen yılların aksine bu yıl hiç beste yapmadım.
– Geçen yıllarda olduğu gibi bu yılda bir çok projeye imzamı attım.

Bu yıl benim için çok bereketliydi, çok şükür yılda 60bin+ üzeri kazandım. Buda aylık en az 5bin tl’ye denk geliyor ve freelance çalışan birine göre iyi bir rakam ????

Ayrıca bu yıl hayatımda 3 güzel olay yaşandı.
Bunlardan ilki Mert ile birlikte spor’a yazılmamız oldu. Bu sayede eski formuma tekrar kavuştum ve içine girdiğim depresif moddan çıkabildim.

Bir diğeri sonunda Eskişehir’in merkezine tekrar taşınmamız. Üstelik uzun zamandır hayal ettiğim gibi 2 katlı bir ev ve üst katını sağolsun babam bana verdi ???? Bende bir odasını çalışma odam, bir odasını yatak odam, bir odasını da vakit geçirdiğim hobi odam olarak düzenledim (hobi odası üzerinde hala çalışıyorum, epey almam gereken eşya var).

Ve tabi ki en önemlisi de gerçekten beni seven bir kadını bulmuş olmam.. Harika bir hayatımız var, umarım uzun yıllar böyle devam eder ve sonumuz evlilik ile başlar ????

Onun dışında aldığım ufak tefek eşyalar oldu.

Uzun zamandır düşündüğüm büyük ekran bir monitörü sonunda alabildim ????

Samsung telefonumdan kurtulup yerine iPhone 6 Plus aldım.

İstanbul’da kendime bir Akustik Gitar aldım. Eskişehir’e döndüğümde beni takip eden müzik ile içli dışlı bir büyüğüm sağolsun bana gitar tutacaklarını hediye olarak gönderdi. Sonunda öksüz kalmayacak gitarlarım ????

Biraz dağınık dursa da kitaplığımı seviyorum, adore sağolsun ????

Cennet Papağanlarımı engelli bir kardeşimize verdim. Onlarda bana sağolsun balıklarını verdiler, sonra bende bir balık sevdası başladı gitti. İnşallah 2015’de harika bir akvaryum hazırlayacağım. (bu konuda tecrübesi olanlar benimle paylaşabilir mi?)

Yıl spor yılı olunca bu aleti almamak olmazdı tabi ????

Ve son olarak babam aşağı patır kütür indiğim için bana bir mini buzdolabı hediye etti ????

Her şey bir yana, gerçekten güzel bir yıl oldu benim için.
Umarım 2015’de aynı güzellikte geliyordur. Zira bu yıl ya yükseleceğim ya da batacağım, hakkımda ve hakkınızda hayırlısı ????

Hepinize mutlu yıllar derken, tabi ki kendi şarkımla son veriyorum yazıma :p

Ayrıca bkz:
Benim için 2013 nasıl geçti?
Benim için 2012 nasıl geçti?

Php ile Önemli Bilgileri Gizlemek

Başlık biraz saçma olmuş olabilir ancak bazı sitelerde örneğin telefon numaramızı eklediğimizde ilk 2 harf ve son 2 harf gözükür. Geri kalan yerler *** şeklinde filtrelenir.

Bugün uzman cevap’ta böyle bir soru sorulduğu için bir fonksiyon hazırladım, sizlerle de paylaşıyorum. Daha kısa bir yolu var mıdır emin değilim ????

function private_str($str, $start, $end){
   $after = mb_substr($str, 0, $start, 'utf8');
   $repeat = str_repeat('*', $end);
   $before = mb_substr($str, ($start + $end), strlen($str), 'utf8');
   return $after.$repeat.$before;
}

kullanımı ise şöyle;

/* yukarıdaki fonksiyon kodları burada olacak */
$telefon = '05417495744';
echo private_str($telefon, 3, 5); // Çıktı: 054*****744

benzer başka bir örnek ise t.c. kimlik numarasından verelim.

/* yukarıdaki fonksiyon kodları burada olacak */
$tc = '45252204745';
echo private_str($tc, 2, 7); // Çıktı: 45*******45

Böylece betiklerinizde kullanıcıya özel kısımların sadece bir bölümünü göstererek önemli bilgileri başkalarından gizlemiş olursunuz.

Not: Örnekteki T.C. Numarası sallamadır.

Sql Sorgularında Büyük/Küçük Harf Duyarlılığı

Sorgu yaparken koşulun yerine gelip verinin gösterilmesinde büyük-küçük harf duyarlılığı olmasını istiyorsanız BINARY operatörünü kullanmanız gerekiyor.

Örnek bir sorgu;

SELECT * FROM uyeler WHERE uye_ad = 'tayfun erbilen'

Aynı sorgunun büyük-küçük harfe karşı duyarlı olanı;

SELECT * FROM uyeler WHERE BINARY uye_ad = 'tayfun erbilen'

HTML Kodlarını Şifrelemek

Bazen front-end işlerde kullanıcıya demo gösterirken kaynak html’i şifrelemek istiyorum.
Her ne kadar işi bilen birisi yine çalacak olsa çalabilir ancak yine de güzel bir önlem olabilir.
Bunun için javascript ile örneklerini inceledim ve php’de aynı olayı hazırladım.
Sizde bu örneği kullanarak html çıktınızı şifreleyebilirsiniz.

Örnek bir kullanım;

<?php

require 'HTML_Encrypt.php';

$html = '<!doctype html>
<html>
<head>
  <meta charset="utf8">
  <title>Example</title>
</head>
<body>

  <h1>Welcome Test Page</h1>

</body>
</html>';

print HTML_Encrypt::encrypt($html);

/**
  örnek çıktı:
  <script type="text/javascript">document.write(unescape("%3c%21%64%6f%63%74%79%70%65%20%68%74%6d%6c%3e%20%20%3c%68%74%6d%6c%3e%20%20%3c%68%65%61%64%3e%20%20%20%20%3c%6d%65%74%61%20%63%68%61%72%73%65%74%3d%22%75%74%66%38%22%3e%20%20%20%20%3c%74%69%74%6c%65%3e%45%78%61%6d%70%6c%65%3c%2f%74%69%74%6c%65%3e%20%20%3c%2f%68%65%61%64%3e%20%20%3c%62%6f%64%79%3e%20%20%20%20%20%20%3c%68%31%3e%57%65%6c%63%6f%6d%65%20%54%65%73%74%20%50%61%67%65%3c%2f%68%31%3e%20%20%20%20%3c%2f%62%6f%64%79%3e%20%20%3c%2f%68%74%6d%6c%3e"));</script>
**/

?>

Sınıfı indirin;

https://github.com/tayfunerbilen/HTML_Encrypt