$ 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 少女終末旅行
Created
December 27, 2017 12:19
-
-
Save itkq/659c645e03f7673edce86c7956c639ea to your computer and use it in GitHub Desktop.
1年で見たアニメを表示するやつ
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 '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" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment