[nFinder] getflvのエラー対応


最終更新:2021-08-04 01:32:00

getflvのエラー対応#

2021/08/04 別のcomment threadの情報を参照しちゃうケースがあるようなので修正(手順16のみ)。
getflvの内容をruby上で一から作成する方向で。
陰陽師に呪われないようにするためログイン確認ではsm9の代わりにマイページを使ってみる。

1. nFinder2 → nFinder2.exe → TrinityCS → NetUtil を開く
2. 「/getflv/」を検索
3. Edit IL Instructions...
4. 選択範囲の「"getflv/sm9"」と「""」を「"hagehage"」に変更
5. OKを押す。
「if (text2 != "hagehage" && url.IndexOf("http://flapi.nicovideo.jp/api/getflv/") != -1 && url.IndexOf("hagehage") == -1)」となっていればOK。
6. nFinder2 → nFinder2.exe → nFinder → dLogin を開く
7. 「is_premium=0」を検索
8. Edit Method (C#)...
9. 「is_premium=0」のある行の直前に下記を追加
text = nFinder.My.MyProject.Forms.mEntryPointClass.LoginCheck("", this.obj_TextBoxId.Text, this.obj_TextBoxPwd.Text, true);
10. 10行くらい上に「IEnumerator enumerator;」とあるので、それを「IEnumerator enumerator = null;」に変更
11. Compileを押す
12. Save AllでnFinder.exeを保存
13. nico.rbを開く
14. 「exit(1) if video_id == "sm9"」の行を「nico_url = "https://www.nicovideo.jp/my" if target.end_with?("getflv/sm9")」に変更
15. 「document = Nokogiri::HTML.parse(html.read)」のすぐ下に下記を追加
if target.end_with?("getflv/sm9")
api_data = (document/"#CommonHeader")[0].attribute("data-common-header").value
json = JSON.parse(api_data)
flv_form = {
"user_id" => json["initConfig"].to_h["user"].to_h["id"],
"is_premium" => json["initConfig"].to_h["user"].to_h["isPremium"] ? 1 : 0,
"nickname" => json["initConfig"].to_h["user"].to_h["nickname"],
"time" => Time.now.strftime("%s%L"),
"done" => true,
}.delete_if {|k,v| v == "" || v.nil?}
puts URI.encode_www_form(flv_form)
puts video_id
puts ""
puts ""
exit(0)
end
16. 「puts flv_param」の行を削除、代わりに下記をその場所に追加
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)
17. nico.rbを保存
18. session.rbを開く
19. 「begin」の行のすぐ下に「exit(0) if ARGV.length < 3」を追加
20. session.rbを保存
お知らせ
実務でも趣味でも役に立つ多機能Webツールサイト【無限ツールズ】で、日常をちょっと便利にしちゃいましょう!
無限ツールズ

 
writening