mirror of https://github.com/iv-org/invidious.git
Add '/api/v1/annotations/:id'
This commit is contained in:
parent
a7723e6ded
commit
ab7e1b42bd
|
@ -70,11 +70,13 @@ PG_URL = URI.new(
|
||||||
)
|
)
|
||||||
|
|
||||||
PG_DB = DB.open PG_URL
|
PG_DB = DB.open PG_URL
|
||||||
YT_URL = URI.parse("https://www.youtube.com")
|
ARCHIVE_URL = URI.parse("https://archive.org")
|
||||||
REDDIT_URL = URI.parse("https://www.reddit.com")
|
|
||||||
LOGIN_URL = URI.parse("https://accounts.google.com")
|
LOGIN_URL = URI.parse("https://accounts.google.com")
|
||||||
PUBSUB_URL = URI.parse("https://pubsubhubbub.appspot.com")
|
PUBSUB_URL = URI.parse("https://pubsubhubbub.appspot.com")
|
||||||
|
REDDIT_URL = URI.parse("https://www.reddit.com")
|
||||||
TEXTCAPTCHA_URL = URI.parse("http://textcaptcha.com/omarroth@protonmail.com.json")
|
TEXTCAPTCHA_URL = URI.parse("http://textcaptcha.com/omarroth@protonmail.com.json")
|
||||||
|
YT_URL = URI.parse("https://www.youtube.com")
|
||||||
|
CHARS_SAFE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"
|
||||||
CURRENT_BRANCH = {{ "#{`git branch | sed -n '/\* /s///p'`.strip}" }}
|
CURRENT_BRANCH = {{ "#{`git branch | sed -n '/\* /s///p'`.strip}" }}
|
||||||
CURRENT_COMMIT = {{ "#{`git rev-list HEAD --max-count=1 --abbrev-commit`.strip}" }}
|
CURRENT_COMMIT = {{ "#{`git rev-list HEAD --max-count=1 --abbrev-commit`.strip}" }}
|
||||||
CURRENT_VERSION = {{ "#{`git describe --tags --abbrev=0`.strip}" }}
|
CURRENT_VERSION = {{ "#{`git describe --tags --abbrev=0`.strip}" }}
|
||||||
|
@ -2824,6 +2826,66 @@ get "/api/v1/insights/:id" do |env|
|
||||||
next response.to_json
|
next response.to_json
|
||||||
end
|
end
|
||||||
|
|
||||||
|
get "/api/v1/annotations/:id" do |env|
|
||||||
|
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
||||||
|
|
||||||
|
env.response.content_type = "text/xml"
|
||||||
|
|
||||||
|
id = env.params.url["id"]
|
||||||
|
source = env.params.query["source"]?
|
||||||
|
source ||= "archive"
|
||||||
|
|
||||||
|
if !id.match(/[a-zA-Z0-9_-]{11}/)
|
||||||
|
env.response.status_code = 400
|
||||||
|
next
|
||||||
|
end
|
||||||
|
|
||||||
|
annotations = ""
|
||||||
|
|
||||||
|
case source
|
||||||
|
when "archive"
|
||||||
|
index = CHARS_SAFE.index(id[0]).not_nil!.to_s.rjust(2, '0')
|
||||||
|
|
||||||
|
# IA doesn't handle leading hyphens,
|
||||||
|
# so we use https://archive.org/details/youtubeannotations_64
|
||||||
|
if index == "62"
|
||||||
|
index = "64"
|
||||||
|
id = id.sub(/^-/, 'A')
|
||||||
|
end
|
||||||
|
|
||||||
|
file = URI.escape("#{id[0, 3]}/#{id}.xml")
|
||||||
|
|
||||||
|
client = make_client(ARCHIVE_URL)
|
||||||
|
location = client.get("/download/youtubeannotations_#{index}/#{id[0, 2]}.tar/#{file}")
|
||||||
|
|
||||||
|
if !location.headers["Location"]?
|
||||||
|
env.response.status_code = location.status_code
|
||||||
|
end
|
||||||
|
|
||||||
|
response = HTTP::Client.get(URI.parse(location.headers["Location"]))
|
||||||
|
|
||||||
|
if response.status_code != 200
|
||||||
|
env.response.status_code = response.status_code
|
||||||
|
next
|
||||||
|
end
|
||||||
|
|
||||||
|
annotations = response.body
|
||||||
|
when "youtube"
|
||||||
|
client = make_client(YT_URL)
|
||||||
|
|
||||||
|
response = client.get("/annotations_invideo?video_id=#{id}")
|
||||||
|
|
||||||
|
if response.status_code != 200
|
||||||
|
env.response.status_code = response.status_code
|
||||||
|
next
|
||||||
|
end
|
||||||
|
|
||||||
|
annotations = response.body
|
||||||
|
end
|
||||||
|
|
||||||
|
annotations
|
||||||
|
end
|
||||||
|
|
||||||
get "/api/v1/videos/:id" do |env|
|
get "/api/v1/videos/:id" do |env|
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue