nico.rb


exit(1) if json["media"].nil?
exit(1) if json["media"]["delivery"].nil?
dmc_info = json["media"]["delivery"]

req_body =
{"session":{"recipe_id":dmc_info["recipeId"],
"content_id":dmc_info["movie"]["contentId"],
"content_type":"movie",
"content_src_id_sets":[{"content_src_ids":[{"src_id_to_mux":{
"video_src_ids":dmc_info["movie"]["session"]["videos"],
"audio_src_ids":dmc_info["movie"]["session"]["audios"]}}]}],
"timing_constraint":"unlimited",
"keep_method":{"heartbeat":{"lifetime":dmc_info["movie"]["session"]["heartbeatLifetime"]}},
"protocol":{"name":"http",
"parameters":{"http_parameters":{"parameters":{"http_output_download_parameters":{"use_well_known_port":"no",
"use_ssl":"no"}}}}},
"content_uri":"",
"session_operation_auth":{"session_operation_auth_by_signature":{
"token":dmc_info["movie"]["session"]["token"],
"signature":dmc_info["movie"]["session"]["signature"]}},
"content_auth":{"auth_type":dmc_info["movie"]["session"]["authTypes"]["http"],
"content_key_timeout":dmc_info["movie"]["session"]["contentKeyTimeout"],
"service_id":"nicovideo",
"service_user_id":dmc_info["movie"]["session"]["serviceUserId"]},
"client_info":{"player_id":dmc_info["movie"]["session"]["playerId"]},
"priority":dmc_info["movie"]["session"]["priority"]}}.to_json

uri = URI.parse("http://api.dmc.nico:2805/api/sessions?_format=json")
http = Net::HTTP.new(uri.host, uri.port)
req = Net::HTTP::Post.new(uri.request_uri , {
"Connection" => "keep-alive",
"Pragma" => "no-cache",
"Cache-Control" => "no-cache",
"Accept" => "application/json",
"Origin" => "http://www.nicovideo.jp",
"User-Agent" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36",
"content-type" => "application/json",
"DNT" => "1",
"Referer" => nico_url,
"Accept-Encoding" => "deflate",
"Accept-Language" => "ja,en-US;q=0.8,en;q=0.6",
})
req.body = req_body

res = http.request(req)
res_json = JSON.parse(res.body)
video_url = CGI.escape(res_json["data"]["session"]["content_uri"]+"&starti=0&start=0")
flv_param = flv_param.sub(/url=http.+?&/, "url=" + video_url + "&")

watch_id = json["client"]["watchId"]
thread_id = watch_id =~ /^[0-9]$/ ? watch_id : json["comment"]["threads"].find{|x| x["isDefaultPostTarget"]}.to_h["id"]
needs_key = json["comment"]["threads"].find{|x| x["id"] == thread_id && x["isThreadkeyRequired"]}
ms = json["comment"]["server"]["url"].sub(/^https/,"http")
flv_form = {
"thread_id" => thread_id,
"l" => json["video"]["duration"],
"url" => res_json["data"]["session"]["content_uri"]+"&starti=0&start=0",
"ms" => ms,
"ms_sub" => ms,
"user_id" => json["viewer"].to_h["id"],
"is_premium" => json["viewer"].to_h["isPremium"] ? 1 : 0,
"nickname" => json["viewer"].to_h["nickname"],
"time" => Time.now.strftime("%s%L"),
"done" => true,
"needs_key" => needs_key ? 1 : "",
"optional_thread_id" => needs_key ? json["comment"]["threads"].find{|x| x["id"] != thread_id && x["label"] == "default"}.to_h["id"] : "",
"ng_rv" => json["comment"]["ng"]["viewer"].to_h["revision"],
"ng_ch" => URI.encode_www_form(json["comment"]["ng"]["channel"]&.map {|x| [x["source"], x["description"]]}),
"ng_up" => URI.encode_www_form(json["comment"]["ng"]["owner"]&.map {|x| [x["source"], x["description"]]}),
"userkey" => json["comment"]["keys"]["userKey"]
}.delete_if {|k,v| v == "" || v.nil?}
puts URI.encode_www_form(flv_form)
puts video_id
puts URI.encode_www_form_component((json["video"]["title"] + "(" + json["video"]["id"] + ")"))
p res.body

rescue => e
File.open("./error.txt", "a") do |f|
f.puts(e.message)
f.puts(e.backtrace_locations)
end
end
exit(result)
お知らせ
実務でも趣味でも役に立つ多機能Webツールサイト【無限ツールズ】で、日常をちょっと便利にしちゃいましょう!
無限ツールズ

 
writening