Skip to content

Instantly share code, notes, and snippets.

@yuroyoro
Created June 30, 2011 05:22
Show Gist options
  • Save yuroyoro/1055682 to your computer and use it in GitHub Desktop.
Save yuroyoro/1055682 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
require 'rubygems'
require 'uri'
require 'net/http'
require 'json'
class Kawaii
KAWAII_HOSTNAME = "kawaii-search.jp"
KAWAII_URI = "/search/kwData.php?q=%s&category=%s&num=%d&offset=%d"
attr_accessor :category
def initialize(category)
@category = category
end
def search(query, num = 0, offset = 0)
Net::HTTP.version_1_2
req = Net::HTTP::Get.new(search_url(query, num, offset))
Net::HTTP.start(KAWAII_HOSTNAME){|http|
response = http.request( req )
json = response.body
JSON.parse( json )
}
end
private
def search_url(query, num = 0, offset = 0)
KAWAII_URI % [URI.encode(query), @category, num, offset]
end
end
categories = %w[yurukawa cute kirei omoshiro majime].map{|c| Kawaii.new(c)}
languages = %w[Java C言語 C++ C# PHP VB Objective-C Python Perl Lua JavaScript Ruby Delphi Lisp Pascal アセンブラ Transact-SQL RPG Ada Scheme F# D言語 Go Fortran ActionScript COBOL PL/I Clean Haskell OCaml Smalltalk Scala Groovy Clojure Erlang]
result = languages.inject({}){|hash, lang|
nums = categories.inject({}){|h, c|
json = c.search(lang)
h[c.category] = json['articles_num'].to_i
h
}
nums['total'] = nums.values.inject(0){|r,n| r + n}
hash[lang] = nums
hash
}
fmt = "|%-#{languages.map{|l| l.length}.max}s |%10s |%10s |%10s |%10s |%10s |%10s |"
header = fmt % %w[*言語 *合計 *ゆるかわ *キュート *きれい *おもしろ *まじめ]
puts header
result.sort_by{|lang, nums| nums['total']}.map{|lang, nums|
fmt % [lang, nums['total'].to_s, *categories.map{|c| nums[c.category]}]
}.reverse.each{|s| puts s }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment