読者です 読者をやめる 読者になる 読者になる

まめ畑

ゆるゆると書いていきます

ニコ生アラート(本家)APIを少し使ってみた

Ruby ニコニコ動画

先日、ニコ生アラート(本家)がリリースされました。
これで加入しているコミュニティや運営生放送の開始を逃さずチェック出来るようになりました。
また、アプリの公開とあわせてAPIも公開されたのでツールの作成もしやすいです。
APIの仕様やレスポンス自体は生放送・ニコ動のメッセージサーバからのレスポンスと殆ど同じなので認証API1・2とメッセージサーバへの接続あたりをツールを作る下準備も兼ねてRubyで超簡単に書いてみました。

require "net/https"
require "uri"
require "socket"
require "rubygems"
require "nokogiri"

NICO_ID = "あいでー"
NICO_PASS = "ひみつ"

def access_api(url, post_data = nil)
	uri = URI.parse(url)
	Net::HTTP.version_1_2
	http = Net::HTTP.new(uri.host, uri.port)
	if(uri.port == 443)
		http.use_ssl = true
		http.ca_file = "./nico.cer"
		http.verify_mode = OpenSSL::SSL::VERIFY_PEER
		http.verify_depth = 5
	end

	http.start do |access|
		path = uri.path
		path += "?" + uri.query unless uri.query.nil?
		req = Net::HTTP::Post.new(path)
		req["User-Agent"] = "NicoLiveAlert 1.0.2"
		req.set_form_data(post_data) unless post_data.nil?
		response = access.request(req)

		response_body = response.read_body
	end
end


#認証API1にアクセスしてキー貰う
ticket_api_response = access_api("https://secure.nicovideo.jp/secure/login?site=nicolive_antenna", {:mail=>NICO_ID, :password=>NICO_PASS})
login_ticket = Nokogiri(ticket_api_response)
ticket = (login_ticket/"ticket").inner_text()


#認証API2にアクセスしてメッセージサーバの情報やコミュニティ情報を貰う
alertstatus_api_response = access_api("http://live.nicovideo.jp/api/getalertstatus" ,{:ticket=>ticket})
alert_status = Nokogiri(alertstatus_api_response)

puts "My Channel & Coumunity"
(alert_status/"community_id").each do |com|
	puts com.inner_text()
end

addr = (alert_status/"addr").inner_text()
port = (alert_status/"port").inner_text()
thread = (alert_status/"thread").inner_text()

puts "Server Information"
puts "Add: " + addr
puts "Port: " + port
puts "Thread: " + thread

TCPSocket.open(addr, port) do |sock|
	sock.write("<thread thread=\"#{thread}\" version=\"20061206\" res_from=\"-1\"/>")
	puts sock.gets
end

こんな感じです。
http.ca_fileにニコ動の使用している証明書(ルート証明書の方が使い回しがききます)を指定します。
UAに「NicoLiveAlert 1.0.2」と指定しないとInvalid Clientとエラーが返ってきます。
最後のメッセージサーバへの接続はテストなので、ずっと待ち受けている用に変更する必要があります。


こんな感じで簡単に使えて便利ですね。
その他詳しい事は
ニコ生アラート(本家)の仕様とは (ニコナマアラートホンケノシヨウとは) [単語記事] - ニコニコ大百科