たまには軽い記事を。
表題のごとく、Riot公式のAPIが非常に良く出来ています。
http://developer.riotgames.com
普段のサモナーネームとパスワードでサインアップしてログインするとFull API Referenceが読めるのですが
https://developer.riotgames.com/api/methods
基本httpsで特定URLをGetすればJSONで固められた一式の情報がポンと帰ってくるという分かりやすい仕様。Ruby、Pythonを始めとしてだいたいの言語に簡単にJSONを処理する手段があるのでここからバラすのは非常に容易。
Team Wired-LynxのLingrルームにはLoLの情報を喋ってくれるお手製RubyBotを作って常駐させています。こいつが今週の無料チャンピオンを画像で提示してくれる機能があるのですが、今までWikiaの情報をNokogiriでごりごりスクレイピングしてきていたので、Wikia側で表記が変わったりすると取得に失敗していました。そのたびに取得ロジックを追従したりしていてたいへん。Wikia自体も基本有志が更新していたので更新が遅れたりも頻繁。
そこでオフィシャルAPIですよ。画像取得部分がこれだけで実現。(もう少しゴルフできると思いますがそこはご愛嬌)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'rubygems' | |
require 'json' | |
require 'open-uri' | |
require 'RMagick' | |
def getimg | |
api = "" | |
http = open("https://na.api.pvp.net/api/lol/na/v1.2/champion?api_key=#{api}&freeToPlay=true").read | |
json = JSON.parser.new(http) | |
hash = json.parse() | |
parsed = hash['champions'] | |
rgblist = Magick::ImageList.new | |
parsed.each do |champ| | |
c = champ['id'] | |
name = open("https://na.api.pvp.net/api/lol/static-data/na/v1.2/champion/#{c}?champData=info&api_key=#{api}").read | |
j = JSON.parser.new(name).parse() | |
p = j['name'] | |
cpath = "/<image file path>/#{p}.jpg" | |
rgb = Magick::ImageList.new(cpath) | |
rgb = rgb.thumbnail(60,60) | |
rgblist << rgb | |
end | |
rgblist.append(false).write("/<image file path>/list.jpg") | |
end | |
getimg |
オフィシャルAPI素晴らしい。相当複雑な情報も含まれているのでWebアプリから叩くともっとしっかりしたサービスがシンプルに作れそうです。
あとLingrでBotを公開しているので id「lolbot」で検索してInviteしてみてください。
@チャンプ名
でチャンプ画像
@チャンプ名> (or <)
でChampion Selectから取得した苦手、得意チャンプ情報が得られますので良ければぜひ。