シリーズ対応修正版


シリーズ対応 修正版
2月2日に修正が入って見れなくなった為、APIから読み込むように修正
地味に再生数やコメント数などが万を超えても正常に取れるようになったが、ソートは相変わらず非対応っぽい
個人設定と非ログイン状態ではセンシティブな動画を表示しなくなった
あとシリーズのURLも変わってたりした
旧 http://www.nicovideo.jp/series/シリーズID
新 http://www.nicovideo.jp/user/ユーザーID/series/シリーズID


既にシリーズ仮対応 https://writening.net/page?4pm7h5を行っている人向け#

nico.rb
23行目辺りの
if target.include?("??")#シリーズ用の記号があれば
もしくは
html = URI.open(nico_url, {
から
84行目辺りの
if nico_url.include?("/video?")#投稿動画
の 上の行まで を削除して修正内容と置き替える
(投稿動画をすべて取得する https://writening.net/page?ahTbLZ を行っていない場合代わりに
if nico_url.end_with?("numbers=1") #検索
が存在するのでその上まで。)

新規に対応させる人向け#

シリーズ仮対応 https://writening.net/page?4pm7h5
のdnSpyを利用して修正する部分を先に行ってから
nico.rb
9行目辺りにある
require 'kconv'
の下に
require 'rss/maker'
を挿入

22行目
html = URI.open(nico_url, {
から
document = Nokogiri::HTML.parse(html.read)
の 上の行まで を削除し、修正内容と置き換える

修正内容#

if target.include?("??")#シリーズ用の記号があれば
seriesid = target.sub("http://www.nicovideo.jp/mylist/", "").sub(/\?.+/, "")
nico_url = "https://www.nicovideo.jp/series/" + seriesid
end

if nico_url.include?("/series") #シリーズ読込
nico_url = "https://nvapi.nicovideo.jp/v2/series/" + nico_url.sub(/.*series\/(.\d+).*/, "\\1")

html = URI.open(nico_url, {
"Pragma" => "no-cache",
"DNT" => "1",
"Accept-Encoding" => "deflate",
"Accept-Language" => "ja,en-US;q=0.8,en;q=0.6",
"Upgrade-Insecure-Requests" => "1",
"User-Agent" => "Mozilla/5.0 (Windows NT 10; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36",
"Accept" => "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Cache-Control" => "no-cache",
"Connection" => "keep-alive",
"Cookie" => cookie,
"X-Frontend-Id" => "6",
"X-Request-With" => "https://www.nicovideo.jp",
"X-Frontend-Version" => "0"
})
json = JSON.parse(html.read)

seriesid = json["data"]["detail"]["id"]
userid = json["data"]["detail"]["owner"]["user"]["id"]
seriesurl = "https://www.nicovideo.jp/user/#{userid}/series/#{seriesid}"

rss = RSS::Maker.make("2.0") do |maker|
maker.channel.title = CGI.escapeHTML(json["data"]["detail"]["title"])#シリーズ名
maker.channel.description = CGI.escapeHTML(json["data"]["detail"]["description"]) #シリーズ説明
maker.channel.link = seriesurl #シリーズURL
maker.channel.dc_creator = CGI.escapeHTML(json["data"]["detail"]["owner"]["user"]["nickname"]) #投稿者名
i=0
while i < json["data"]["totalCount"]#動画の数だけ繰り返す
title = CGI.escapeHTML(json["data"]["items"][i]["video"]["title"])#タイトル
link = "http://www.nicovideo.jp/watch/" << json["data"]["items"][i]["video"]["id"]#リンク
length = json["data"]["items"][i]["video"]["duration"] #動画時間
length = Time.at(length).strftime('%M:%S').to_s
time = json["data"]["items"][i]["video"]["registeredAt"] #投稿日時
time = Time.parse(time).strftime("%Y年%m月%d日 %H:%M:%S").to_s.encode("UTF-8")#年月日に変換しておかないと読めない
view = json["data"]["items"][i]["video"]["count"]["view"].to_s#再生回数
comment = json["data"]["items"][i]["video"]["count"]["comment"].to_s#コメント数
mylist = json["data"]["items"][i]["video"]["count"]["mylist"].to_s#マイリスト数

description = '<![CDATA[<p class="nico-thumbnail"><img alt="" src="" width="94" height="70" border="0"/></p><p class="nico-description"></p><p class="nico-info"><small><strong class="nico-info-length">'<< length <<'</strong><strong class="nico-info-date">'<< time <<'</strong></small></p><p class="nico-numbers"><small><strong class="nico-numbers-view">'<< view <<'</strong><strong class="nico-numbers-res">'<< comment <<'</strong><strong class="nico-numbers-mylist">'<< mylist <<'</strong></small></p>]]>'
i+=1
#nFinderは正規表現置換で読み込んでいるのでほぼ弄れない
item = maker.items.new_item #rss作成部分
item.title = title
item.link = link
item.description = description
end
end

result = CGI.unescapeHTML(rss.to_s.tr("\n^", ''))
result = Regexp.escape(result)
result = NKF.nkf("--ic=UTF-8 --oc=SJIS --fb-java", result)
puts result
puts ""
puts ""
puts ""
exit(0)

else
html = URI.open(nico_url, {
"Pragma" => "no-cache",
"DNT" => "1",
"Accept-Encoding" => "deflate",
"Accept-Language" => "ja,en-US;q=0.8,en;q=0.6",
"Upgrade-Insecure-Requests" => "1",
"User-Agent" => "Mozilla/5.0 (Windows NT 10; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36",
"Accept" => "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Cache-Control" => "no-cache",
"Connection" => "keep-alive",
"Cookie" => cookie
})
end

シリーズURLが変更になった事への対策#

主にお気に入り登録に支障が出るため
先におハゲ様がしてくれた修正を行っていることが前提
https://writening.net/page?eBbcAy#i5
dnSpyで
nFinder>mFinder_main>TabIF_Mylist
this.obj_LVMenu_MylistTextBox1.Text = Regex.Replace(this.obj_LVMenu_MylistTextBox1.Text, "(http)s(://[^/\"><]*nicovideo.jp)", "$1$2");
の行でEditIL、Ctrl+C、Ctrl+Vを順番に行い、OK
同じ行が増えているはずなので、下にある方をもう一度EditILで
"(http)s(://[^/\"><]*nicovideo.jp)"

"(http://[^/\"><]*nicovideo.jp/).*(series/.*)"
に変更。
下にある方が
this.obj_LVMenu_MylistTextBox1.Text = Regex.Replace(this.obj_LVMenu_MylistTextBox1.Text, "(http://[^/\"><]*nicovideo.jp/).*(series/.*)", "$1$2");
となっていればOK

また、特に必須ではないがついでに同じ手順で
"(http://[^/\"><]*nicovideo.jp/).*(series/.*)"ではなく
"(http://[^/\"><]*nicovideo.jp/).*(mylist/.*)"
にした物(↓)を作っておくとマイリス履歴やお気に入り登録の重複が多少防げる
this.obj_LVMenu_MylistTextBox1.Text = Regex.Replace(this.obj_LVMenu_MylistTextBox1.Text, "(http://[^/\"><]*nicovideo.jp/).*(mylist/.*)", "$1$2");

お知らせ
実務でも趣味でも役に立つ多機能Webツールサイト【無限ツールズ】で、日常をちょっと便利にしちゃいましょう!
無限ツールズ

 
writening