Skip to content

Instantly share code, notes, and snippets.

@itkq
Created December 27, 2017 12:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save itkq/659c645e03f7673edce86c7956c639ea to your computer and use it in GitHub Desktop.
Save itkq/659c645e03f7673edce86c7956c639ea to your computer and use it in GitHub Desktop.
1年で見たアニメを表示するやつ
require 'net/http'
require 'openssl'
require 'json'
require 'optparse'
HEADER = { Authorization: "Bearer #{ENV.fetch('ANNICT_TOKEN')}" }
HOST = 'api.annict.com'
WATCHED_FILTER = -> a { ["watched", "watching"].include?(a["status"]["kind"]) }
SEASON = ["winter", "spring", "summer", "autumn"]
def http
@http ||= begin
h = Net::HTTP.new(HOST, 443)
h.use_ssl = true
h.verify_mode = OpenSSL::SSL::VERIFY_NONE
h
end
end
def get_json(path)
resp = http.get(path, HEADER)
resp.value
JSON.parse(resp.body)
end
def get_animes(year)
path = '/v1/me/works'
query = {
filter_season: "#{year}-all",
sort_season: 'asc',
page: 1,
}
animes = []
loop do
url = path + "?" + query.map{|k,v| "#{k}=#{v}" }.join("&")
$stderr.puts url
resp = get_json(url)
animes += resp["works"]
break unless resp["next_page"]
query[:page] = resp["next_page"].to_i
sleep 0.5
end
animes
end
def get_watched_animes(year, opt_filters=[])
filters = [ WATCHED_FILTER ] + opt_filters
animes = get_animes(year)
filters.each do |f|
animes = animes.select(&f)
end
animes
end
option = {}
OptionParser.new do |opt|
opt.on('-y VALUE', '--year VALUE') { |v| option[:year] = v }
opt.on('--only-tv') { |v| option[:only_tv] = true }
opt.parse!(ARGV)
end
unless option[:year]
$stderr.puts "year value must be specified."
exit 1
end
filter = []
if option[:only_tv]
filter << -> a { a["media"] == "tv" }
end
animes = get_watched_animes(option[:year], filter)
puts animes.map{|a| "#{a['season_name']}\t#{a['title']}" }.join("\n")+"\n"
$ envchain annict ruby annict_list_anime.rb -y 2017 --only-tv 2>/dev/null
2017-winter     クズの本懐
2017-winter     うらら迷路帖
2017-winter     亜人ちゃんは語りたい
2017-winter     アイドル事変
2017-winter     龍の歯医者
2017-winter     政宗くんのリベンジ
2017-winter     リトルウィッチアカデミア
2017-winter     ガヴリールドロップアウト
2017-winter     けものフレンズ
2017-winter     小林さんちのメイドラゴン
2017-winter     風夏
2017-winter     幼女戦記
2017-winter     One Room
2017-spring     エロマンガ先生
2017-spring     冴えない彼女の育てかた♭
2017-spring     ひなこのーと
2017-spring     ゼロから始める魔法の書
2017-spring     サクラクエスト
2017-spring     Re:CREATORS (レクリエイターズ)
2017-spring     終末なにしてますか? 忙しいですか? 救ってもらっていいですか?
2017-spring     武装少女マキャヴェリズム
2017-spring     ロクでなし魔術講師と禁忌教典
2017-spring     正解するカド
2017-spring     月がきれい
2017-spring     フレームアームズ・ガール
2017-summer     メイドインアビス
2017-summer     天使の3P!
2017-summer     恋と嘘
2017-summer     徒然チルドレン
2017-summer     はじめてのギャル
2017-summer     異世界はスマートフォンとともに。
2017-summer     NEW GAME!!
2017-summer     ゲーマーズ!
2017-summer     プリンセス・プリンシパル
2017-summer     捏造トラップ-NTR-
2017-autumn     クジラの子らは砂上に歌う
2017-autumn     干物妹!うまるちゃんR
2017-autumn     アニメガタリズ
2017-autumn     結城友奈は勇者である -鷲尾須美の章-/-勇者の章-
2017-autumn     妹さえいればいい。
2017-summer     ようこそ実力至上主義の教室へ
2017-autumn     ブレンド・S
2017-autumn     Just Because!
2017-autumn     Wake Up, Girls! 新章
2017-autumn     ネト充のススメ
2017-autumn     少女終末旅行
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment