League of Legends Api Kullanımı

signup_logo2

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!

Son olarak..

Kullanıcı bilgilerini çeken ve istatistikleri gösteren küçük bir demo hazırladım 🙂

http://www.erbilen.net/demo/lol-php-api/

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

Yayınlayan

Tayfun Erbilen

2009'dan beri web işleriyle uğraşan, aynı zamanda amatör müziklede ilgilenen sıradan birisi..

“League of Legends Api Kullanımı” üzerine 16 yorum

  1. size birşey diyeyim mi? Allah yolunuzu herdaim açık etsin inşallah…Varlığını dahi bilmiyordum API’nin. lolnexus tarzı sitelerin farklı işlem sırasını izlediğini sanıyordum 🙂

  2. İyi günler.Bende bir League of Legends sitesi üzerinde uğraşıyorum.Ancak sizinde verdiğiniz örnektede bu sorunun olduğunu gördüm.Oyundaki bazı nickler boşluk içeriyor.Boşluk içerek nickleri nasıl olarak sorgulatabiliriz.

  3. Valla ömer faruk arkadaşımıza katılıyorum böyle bir api nin olduğunu bilmiyordum, ilerde kullanabilirim.Teşekkürler reyiz 🙂

  4. Selam Tayfun, eskiden beri takip ediyorum seni. Konuyla alakasız olsa da; senin gibi bi yazılımcıya Dota 2 oynamak yakışır. Lol nedir yahu 🙂

  5. Anlatım harika olmuş Tayfun. Bir ara ben de uğraşmıştım. Aslında kullanımı oldukça basit fakat pekçok kişi bu apilerin varlığından habersiz.

  6. Tayfun abi mesela 10 dakikada 500 istek demişsin ama bu lolnexus gibi siteler 10 dakikada belkide binlerce istek yolluyo onu nasıl yapıyolar?

  7. 10 dakikada 500 sorgu diyoruz da lolnexus gibi sitelerde bu aşılmıyor mu? bu aşılırsa sistem çökecek. böyle bir şey de istemeyiz haliyle. bu durumu aşma şansımız var mı?

  8. Diğer sitelerin nasıl limiti aştıklarını bilemiyorum ama belki bir geliştirici anlaşmaları vardır 🙂 Siteyi detaylıca incelemek gerekir.

  9. Nasil mi asiyoruz?
    eger api kodumuza bagliysa 20 api kodu temin ediyoruz (arkadaslarimiz olsun yan hesaplarimiz olsun)
    bu kodlari rastgele donduruyoruz yada tek tek ifelse ile denettiriyoruz
    eger request referer’a bakiyorsa random referer gondererek
    eger ip baz aliniyorsa farkli sunucular uzerinde api agi olusturarak yada her seferinde fake ip gondererek
    tabi bu yazdiklarim sadece teorilerden ibaret ama illaki iclerinden birisi ise yarayacaktir

    Deep Not: klavyemde latin karakterleri yok imla icin uzgunum

  10. Limit aşımına takılanlar olmuş hızlı düşünüp basit bir çözüm üreteyim dedim ve sonuç;
    10 dakikada 500 istek limitini aşmamak için cron kullanarak düzenli aralıklarla istekleri biz gönderip gelen verileri kendi veritabanı sistemimize kaydedip ziyaretçilerimizin sorgularını buradan alabiliriz.
    Kolay gelsin.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir