diff options
| author | Samantaz Fox <coding@samantaz.fr> | 2022-01-25 19:34:43 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-01-25 19:34:43 +0100 |
| commit | 2ae074a9a45c26533a35640b1b7c3f0e4e1d3ca3 (patch) | |
| tree | 6777667663907f6baba1705e1f1be7f41dafa5b4 /src | |
| parent | 5ece07a8077ab1d4369afc029f7e78bde2a0a4d5 (diff) | |
| parent | c5967ad572191ad7b99dec08111974b04dffc6d0 (diff) | |
| download | invidious-2ae074a9a45c26533a35640b1b7c3f0e4e1d3ca3.tar.gz invidious-2ae074a9a45c26533a35640b1b7c3f0e4e1d3ca3.tar.bz2 invidious-2ae074a9a45c26533a35640b1b7c3f0e4e1d3ca3.zip | |
Merge pull request #2821 from matthewmcgarvey/channel-search
Handle invalid channel id in channel: search
Diffstat (limited to 'src')
| -rw-r--r-- | src/invidious/routes/search.cr | 2 | ||||
| -rw-r--r-- | src/invidious/search.cr | 11 |
2 files changed, 11 insertions, 2 deletions
diff --git a/src/invidious/routes/search.cr b/src/invidious/routes/search.cr index c256d156..5e606adf 100644 --- a/src/invidious/routes/search.cr +++ b/src/invidious/routes/search.cr @@ -55,6 +55,8 @@ module Invidious::Routes::Search begin search_query, count, videos, operators = process_search_query(query, page, user, region: region) + rescue ex : ChannelSearchException + return error_template(404, "Unable to find channel with id of '#{HTML.escape(ex.channel)}'. Are you sure that's an actual channel id? It should look like 'UC4QobU6STFB0P71PMvOGN5A'.") rescue ex return error_template(500, ex) end diff --git a/src/invidious/search.cr b/src/invidious/search.cr index 2095721c..0f6dc6eb 100644 --- a/src/invidious/search.cr +++ b/src/invidious/search.cr @@ -1,3 +1,10 @@ +class ChannelSearchException < InfoException + getter channel : String + + def initialize(@channel) + end +end + def channel_search(query, page, channel) response = YT_POOL.client &.get("/channel/#{channel}") @@ -5,8 +12,8 @@ def channel_search(query, page, channel) response = YT_POOL.client &.get("/user/#{channel}") response = YT_POOL.client &.get("/c/#{channel}") if response.status_code == 404 initial_data = extract_initial_data(response.body) - ucid = initial_data["header"]["c4TabbedHeaderRenderer"]?.try &.["channelId"].as_s? - raise InfoException.new("Impossible to extract channel ID from page") if !ucid + ucid = initial_data.dig?("header", "c4TabbedHeaderRenderer", "channelId").try(&.as_s?) + raise ChannelSearchException.new(channel) if !ucid else ucid = channel end |
