Comments: Move ctoken functions to youtube.cr
This commit is contained in:
parent
df85265453
commit
4379a3d873
|
@ -23,18 +23,6 @@ Spectator.describe "Helper" do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "#produce_comment_continuation" do
|
|
||||||
it "correctly produces a continuation token for comments" do
|
|
||||||
expect(produce_comment_continuation("_cE8xSu6swE", "ADSJ_i2qvJeFtL0htmS5_K5Ctj3eGFVBMWL9Wd42o3kmUL6_mAzdLp85-liQZL0mYr_16BhaggUqX652Sv9JqV6VXinShSP-ZT6rL4NolPBaPXVtJsO5_rA_qE3GubAuLFw9uzIIXU2-HnpXbdgPLWTFavfX206hqWmmpHwUOrmxQV_OX6tYkM3ux3rPAKCDrT8eWL7MU3bLiNcnbgkW8o0h8KYLL_8BPa8LcHbTv8pAoNkjerlX1x7K4pqxaXPoyz89qNlnh6rRx6AXgAzzoHH1dmcyQ8CIBeOHg-m4i8ZxdX4dP88XWrIFg-jJGhpGP8JUMDgZgavxVx225hUEYZMyrLGler5em4FgbG62YWC51moLDLeYEA")).to eq("EkMSC19jRTh4U3U2c3dFyAEA4AEBogINKP___________wFAAMICHQgEGhdodHRwczovL3d3dy55b3V0dWJlLmNvbSIAGAYyjAMK9gJBRFNKX2kycXZKZUZ0TDBodG1TNV9LNUN0ajNlR0ZWQk1XTDlXZDQybzNrbVVMNl9tQXpkTHA4NS1saVFaTDBtWXJfMTZCaGFnZ1VxWDY1MlN2OUpxVjZWWGluU2hTUC1aVDZyTDROb2xQQmFQWFZ0SnNPNV9yQV9xRTNHdWJBdUxGdzl1eklJWFUyLUhucFhiZGdQTFdURmF2ZlgyMDZocVdtbXBId1VPcm14UVZfT1g2dFlrTTN1eDNyUEFLQ0RyVDhlV0w3TVUzYkxpTmNuYmdrVzhvMGg4S1lMTF84QlBhOExjSGJUdjhwQW9Oa2plcmxYMXg3SzRwcXhhWFBveXo4OXFObG5oNnJSeDZBWGdBenpvSEgxZG1jeVE4Q0lCZU9IZy1tNGk4WnhkWDRkUDg4WFdySUZnLWpKR2hwR1A4SlVNRGdaZ2F2eFZ4MjI1aFVFWVpNeXJMR2xlcjVlbTRGZ2JHNjJZV0M1MW1vTERMZVlFQSIPIgtfY0U4eFN1NnN3RTAAKBQ%3D")
|
|
||||||
|
|
||||||
expect(produce_comment_continuation("_cE8xSu6swE", "ADSJ_i1yz21HI4xrtsYXVC-2_kfZ6kx1yjYQumXAAxqH3CAd7ZxKxfLdZS1__fqhCtOASRbbpSBGH_tH1J96Dxux-Qfjk-lUbupMqv08Q3aHzGu7p70VoUMHhI2-GoJpnbpmcOxkGzeIuenRS_ym2Y8fkDowhqLPFgsS0n4djnZ2UmC17F3Ch3N1S1UYf1ZVOc991qOC1iW9kJDzyvRQTWCPsJUPneSaAKW-Rr97pdesOkR4i8cNvHZRnQKe2HEfsvlJOb2C3lF1dJBfJeNfnQYeh5hv6_fZN7bt3-JL1Xk3Qc9NXNxmmbDpwAC_yFR8dthFfUJdyIO9Nu1D79MLYeR-H5HxqUJokkJiGIz4lTE_CXXbhAI")).to eq("EkMSC19jRTh4U3U2c3dFyAEA4AEBogINKP___________wFAAMICHQgEGhdodHRwczovL3d3dy55b3V0dWJlLmNvbSIAGAYyiQMK8wJBRFNKX2kxeXoyMUhJNHhydHNZWFZDLTJfa2ZaNmt4MXlqWVF1bVhBQXhxSDNDQWQ3WnhLeGZMZFpTMV9fZnFoQ3RPQVNSYmJwU0JHSF90SDFKOTZEeHV4LVFmamstbFVidXBNcXYwOFEzYUh6R3U3cDcwVm9VTUhoSTItR29KcG5icG1jT3hrR3plSXVlblJTX3ltMlk4ZmtEb3docUxQRmdzUzBuNGRqbloyVW1DMTdGM0NoM04xUzFVWWYxWlZPYzk5MXFPQzFpVzlrSkR6eXZSUVRXQ1BzSlVQbmVTYUFLVy1Scjk3cGRlc09rUjRpOGNOdkhaUm5RS2UySEVmc3ZsSk9iMkMzbEYxZEpCZkplTmZuUVllaDVodjZfZlpON2J0My1KTDFYazNRYzlOWE54bW1iRHB3QUNfeUZSOGR0aEZmVUpkeUlPOU51MUQ3OU1MWWVSLUg1SHhxVUpva2tKaUdJejRsVEVfQ1hYYmhBSSIPIgtfY0U4eFN1NnN3RTAAKBQ%3D")
|
|
||||||
|
|
||||||
expect(produce_comment_continuation("29-q7YnyUmY", "")).to eq("EkMSCzI5LXE3WW55VW1ZyAEA4AEBogINKP___________wFAAMICHQgEGhdodHRwczovL3d3dy55b3V0dWJlLmNvbSIAGAYyFQoAIg8iCzI5LXE3WW55VW1ZMAAoFA%3D%3D")
|
|
||||||
|
|
||||||
expect(produce_comment_continuation("CvFH_6DNRCY", "")).to eq("EkMSC0N2RkhfNkROUkNZyAEA4AEBogINKP___________wFAAMICHQgEGhdodHRwczovL3d3dy55b3V0dWJlLmNvbSIAGAYyFQoAIg8iC0N2RkhfNkROUkNZMAAoFA%3D%3D")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "#produce_channel_community_continuation" do
|
describe "#produce_channel_community_continuation" do
|
||||||
it "correctly produces a continuation token for a channel community" do
|
it "correctly produces a continuation token for a channel community" do
|
||||||
expect(produce_channel_community_continuation("UCCj956IF62FbT7Gouszaj9w", "Egljb21tdW5pdHm4")).to eq("4qmFsgIsEhhVQ0NqOTU2SUY2MkZiVDdHb3VzemFqOXcaEEVnbGpiMjF0ZFc1cGRIbTQ%3D")
|
expect(produce_channel_community_continuation("UCCj956IF62FbT7Gouszaj9w", "Egljb21tdW5pdHm4")).to eq("4qmFsgIsEhhVQ0NqOTU2SUY2MkZiVDdHb3VzemFqOXcaEEVnbGpiMjF0ZFc1cGRIbTQ%3D")
|
||||||
|
|
|
@ -87,47 +87,3 @@ def content_to_comment_html(content, video_id : String? = "")
|
||||||
|
|
||||||
return html_array.join("").delete('\ufeff')
|
return html_array.join("").delete('\ufeff')
|
||||||
end
|
end
|
||||||
|
|
||||||
def produce_comment_continuation(video_id, cursor = "", sort_by = "top")
|
|
||||||
object = {
|
|
||||||
"2:embedded" => {
|
|
||||||
"2:string" => video_id,
|
|
||||||
"25:varint" => 0_i64,
|
|
||||||
"28:varint" => 1_i64,
|
|
||||||
"36:embedded" => {
|
|
||||||
"5:varint" => -1_i64,
|
|
||||||
"8:varint" => 0_i64,
|
|
||||||
},
|
|
||||||
"40:embedded" => {
|
|
||||||
"1:varint" => 4_i64,
|
|
||||||
"3:string" => "https://www.youtube.com",
|
|
||||||
"4:string" => "",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"3:varint" => 6_i64,
|
|
||||||
"6:embedded" => {
|
|
||||||
"1:string" => cursor,
|
|
||||||
"4:embedded" => {
|
|
||||||
"4:string" => video_id,
|
|
||||||
"6:varint" => 0_i64,
|
|
||||||
},
|
|
||||||
"5:varint" => 20_i64,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
case sort_by
|
|
||||||
when "top"
|
|
||||||
object["6:embedded"].as(Hash)["4:embedded"].as(Hash)["6:varint"] = 0_i64
|
|
||||||
when "new", "newest"
|
|
||||||
object["6:embedded"].as(Hash)["4:embedded"].as(Hash)["6:varint"] = 1_i64
|
|
||||||
else # top
|
|
||||||
object["6:embedded"].as(Hash)["4:embedded"].as(Hash)["6:varint"] = 0_i64
|
|
||||||
end
|
|
||||||
|
|
||||||
continuation = object.try { |i| Protodec::Any.cast_json(i) }
|
|
||||||
.try { |i| Protodec::Any.from_json(i) }
|
|
||||||
.try { |i| Base64.urlsafe_encode(i) }
|
|
||||||
.try { |i| URI.encode_www_form(i) }
|
|
||||||
|
|
||||||
return continuation
|
|
||||||
end
|
|
||||||
|
|
|
@ -4,9 +4,9 @@ module Invidious::Comments
|
||||||
def fetch_youtube(id, cursor, format, locale, thin_mode, region, sort_by = "top")
|
def fetch_youtube(id, cursor, format, locale, thin_mode, region, sort_by = "top")
|
||||||
case cursor
|
case cursor
|
||||||
when nil, ""
|
when nil, ""
|
||||||
ctoken = produce_comment_continuation(id, cursor: "", sort_by: sort_by)
|
ctoken = Comments.produce_continuation(id, cursor: "", sort_by: sort_by)
|
||||||
when .starts_with? "ADSJ"
|
when .starts_with? "ADSJ"
|
||||||
ctoken = produce_comment_continuation(id, cursor: cursor, sort_by: sort_by)
|
ctoken = Comments.produce_continuation(id, cursor: cursor, sort_by: sort_by)
|
||||||
else
|
else
|
||||||
ctoken = cursor
|
ctoken = cursor
|
||||||
end
|
end
|
||||||
|
@ -203,4 +203,48 @@ module Invidious::Comments
|
||||||
|
|
||||||
return response
|
return response
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def produce_continuation(video_id, cursor = "", sort_by = "top")
|
||||||
|
object = {
|
||||||
|
"2:embedded" => {
|
||||||
|
"2:string" => video_id,
|
||||||
|
"25:varint" => 0_i64,
|
||||||
|
"28:varint" => 1_i64,
|
||||||
|
"36:embedded" => {
|
||||||
|
"5:varint" => -1_i64,
|
||||||
|
"8:varint" => 0_i64,
|
||||||
|
},
|
||||||
|
"40:embedded" => {
|
||||||
|
"1:varint" => 4_i64,
|
||||||
|
"3:string" => "https://www.youtube.com",
|
||||||
|
"4:string" => "",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"3:varint" => 6_i64,
|
||||||
|
"6:embedded" => {
|
||||||
|
"1:string" => cursor,
|
||||||
|
"4:embedded" => {
|
||||||
|
"4:string" => video_id,
|
||||||
|
"6:varint" => 0_i64,
|
||||||
|
},
|
||||||
|
"5:varint" => 20_i64,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
case sort_by
|
||||||
|
when "top"
|
||||||
|
object["6:embedded"].as(Hash)["4:embedded"].as(Hash)["6:varint"] = 0_i64
|
||||||
|
when "new", "newest"
|
||||||
|
object["6:embedded"].as(Hash)["4:embedded"].as(Hash)["6:varint"] = 1_i64
|
||||||
|
else # top
|
||||||
|
object["6:embedded"].as(Hash)["4:embedded"].as(Hash)["6:varint"] = 0_i64
|
||||||
|
end
|
||||||
|
|
||||||
|
continuation = object.try { |i| Protodec::Any.cast_json(i) }
|
||||||
|
.try { |i| Protodec::Any.from_json(i) }
|
||||||
|
.try { |i| Base64.urlsafe_encode(i) }
|
||||||
|
.try { |i| URI.encode_www_form(i) }
|
||||||
|
|
||||||
|
return continuation
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue