]>
git.gir.st - subscriptionfeed.git/log
girst [Mon, 17 Aug 2020 15:22:20 +0000 (17:22 +0200)]
handle absent streamingData.formats/adaptiveFormats
e.g. on (announced) livestreams/premiere videos
girst [Mon, 17 Aug 2020 14:52:40 +0000 (16:52 +0200)]
paper over exception on dangerous.search
wasn't able to reproduce this.
[2020-08-17 16:47:53,157] ERROR in app: Exception on /search [GET]
Traceback (most recent call last):
File "/opt/yt/venv/lib64/python3.6/site-packages/flask/app.py", line 2447, in wsgi_app
response = self.full_dispatch_request()
File "/opt/yt/venv/lib64/python3.6/site-packages/flask/app.py", line 1952, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/opt/yt/venv/lib64/python3.6/site-packages/flask/app.py", line 1821, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/opt/yt/venv/lib64/python3.6/site-packages/flask/_compat.py", line 39, in reraise
raise value
File "/opt/yt/venv/lib64/python3.6/site-packages/flask/app.py", line 1950, in full_dispatch_request
rv = self.dispatch_request()
File "/opt/yt/venv/lib64/python3.6/site-packages/flask/app.py", line 1936, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/opt/yt/app/dangerous/__init__.py", line 31, in search
results, extras = prepare_searchresults(yt_results)
File "/opt/yt/app/common/innertube.py", line 26, in prepare_searchresults
return parse_result_items(contents)
File "/opt/yt/app/common/innertube.py", line 169, in parse_result_items
r, e = parse_result_items(content['content']['verticalListRenderer']['items'])
File "/opt/yt/app/common/innertube.py", line 136, in parse_result_items
listget(content.get('viewCountText',{}).get('runs'),0,{}).get('text')), # "1,234 watching"
File "/opt/yt/app/common/innertube.py", line 12, in listget
return next(iter(obj[index:]), fallback)
TypeError: 'NoneType' object is not subscriptable
girst [Sun, 16 Aug 2020 15:17:42 +0000 (17:17 +0200)]
ignore more advertisements
girst [Sun, 16 Aug 2020 12:45:14 +0000 (14:45 +0200)]
hacky way to get v1 and v2 channel responses (needs cleanup!)
girst [Sat, 15 Aug 2020 21:27:39 +0000 (23:27 +0200)]
don't crash cipher util when youtubedown can't decode cipher
girst [Sat, 15 Aug 2020 20:38:19 +0000 (22:38 +0200)]
fix dummy-card 1px offset
old style removed the border, shifting the last row 1px to the right.
girst [Sat, 15 Aug 2020 20:14:20 +0000 (22:14 +0200)]
README: add note regarding new channel protobuf
girst [Sat, 15 Aug 2020 19:57:00 +0000 (21:57 +0200)]
fallback from dangerous/channel (must fix browse_ajax)
girst [Sat, 15 Aug 2020 19:54:35 +0000 (21:54 +0200)]
make xmlfeed catch all channel subpages
needed for proper invidious/invidition redirect and fallback_route.
girst [Sat, 15 Aug 2020 19:18:13 +0000 (21:18 +0200)]
make csrf verification use http.parser instead of regexp
finally removes the unecessary csrf field from GET forms
girst [Sat, 15 Aug 2020 12:25:43 +0000 (14:25 +0200)]
document why we aren't deleting videos, clean up logging
girst [Fri, 14 Aug 2020 16:20:55 +0000 (18:20 +0200)]
sometimes videoDetails.lengthSeconds=="0"
microformat.playerMicroformatRenderer.lengthSeconds might still be good
then. seen on 'premiere' videos.
girst [Sun, 9 Aug 2020 10:21:40 +0000 (12:21 +0200)]
make view count thousand seperator a bit larger
girst [Sun, 9 Aug 2020 10:21:01 +0000 (12:21 +0200)]
found new innertube edge case
girst [Sun, 9 Aug 2020 10:19:15 +0000 (12:19 +0200)]
Revert "secondary channel format"
useless if it doesn't work all the time
This reverts commit
4e3b56b967570b9498651cf758a5ca3c56640689 .
girst [Sun, 9 Aug 2020 10:17:38 +0000 (12:17 +0200)]
secondary channel format
reversed by omarroth on #invidious. his message:
The channel you sent me uses a different format. YouTube uses:
```json
{
"
80226972 :0:embedded": {
"2:0:string": "UC6Om9kAkl32dWlDSNlDS9Iw",
"3:1:base64": {
"2:0:string": "videos",
"3:1:varint": 3,
"4:2:varint": 0,
"6:3:varint": 1,
"7:4:varint": 1,
"61:5:base64": {
"1:0:embedded": {
"2:1:embedded": {
"1:0:base64": {
"1:0:varint": 120
}
}
}
}
}
}
}
```
where `"1:0:varint": 120` is the offset into the channel.
girst [Sat, 8 Aug 2020 21:37:18 +0000 (23:37 +0200)]
show LIVE badge on subscription feed
girst [Sat, 8 Aug 2020 21:13:35 +0000 (23:13 +0200)]
add livestream detection for subscriptions
note that we usually fetch get_video_info so fast that even for
unannounced live streams, isLive will be false (with isUpcoming true).
girst [Sat, 8 Aug 2020 18:54:00 +0000 (20:54 +0200)]
make version closer to youtube
don't think it makes a difference compat-wise (invidious only has
"2.<hardcoded-date>")
girst [Sat, 8 Aug 2020 16:45:21 +0000 (18:45 +0200)]
remove stray end tag
girst [Sat, 8 Aug 2020 16:40:02 +0000 (18:40 +0200)]
move search css into a stylesheet
girst [Sat, 8 Aug 2020 16:17:39 +0000 (18:17 +0200)]
fix card macro behavriour w.r.t empty channel_id
girst [Fri, 7 Aug 2020 19:40:25 +0000 (21:40 +0200)]
fix writing youtubedown (unicode chars)
the cron job runs in LANG=C, so python defaults to ASCII encoding. also
redownload youtubedown if the on-disk size if 0 (e.g. due to this bug)
girst [Fri, 7 Aug 2020 19:22:20 +0000 (21:22 +0200)]
correct statement about idempotency of cronjobs
girst [Fri, 7 Aug 2020 19:21:28 +0000 (21:21 +0200)]
display length on /feed/subscriptions and use new infocard renderer
girst [Fri, 7 Aug 2020 19:20:44 +0000 (21:20 +0200)]
remove broken logging statement
girst [Fri, 7 Aug 2020 19:19:19 +0000 (21:19 +0200)]
fetch length for new subscription videos
in the future, we'll also detect whether it's a livestream
girst [Fri, 7 Aug 2020 16:23:53 +0000 (18:23 +0200)]
implement video badge (for length)
girst [Fri, 7 Aug 2020 15:59:57 +0000 (17:59 +0200)]
more innertube variants
girst [Fri, 7 Aug 2020 15:27:25 +0000 (17:27 +0200)]
support playlist end-of-list
girst [Fri, 7 Aug 2020 15:11:38 +0000 (17:11 +0200)]
add playlist metadata
girst [Fri, 7 Aug 2020 14:54:51 +0000 (16:54 +0200)]
Revert "useless youtube.com cargoculting"
This reverts commit
d3b80d96aec748b19f08e8757ae847ce66b4df68 .
girst [Fri, 7 Aug 2020 14:54:23 +0000 (16:54 +0200)]
useless youtube.com cargoculting
tried to reduce error ajax responses, but has no effect.
girst [Fri, 7 Aug 2020 14:53:32 +0000 (16:53 +0200)]
tone down channel search
girst [Fri, 7 Aug 2020 14:52:48 +0000 (16:52 +0200)]
add /user and /c redirects for dangerous blueprint
girst [Fri, 7 Aug 2020 11:19:35 +0000 (13:19 +0200)]
add /c/<username> route (alias for /user/)
girst [Fri, 7 Aug 2020 11:15:38 +0000 (13:15 +0200)]
implement channel search
girst [Fri, 7 Aug 2020 10:57:04 +0000 (12:57 +0200)]
retry browse_ajax twice on error
girst [Fri, 7 Aug 2020 10:49:29 +0000 (12:49 +0200)]
add has_more, cleanup, test for error-alerts
girst [Thu, 6 Aug 2020 21:02:12 +0000 (23:02 +0200)]
dangerous.channel/playlist: parse extra messages
girst [Thu, 6 Aug 2020 20:59:14 +0000 (22:59 +0200)]
move innertube stuff out of dangerous
girst [Thu, 6 Aug 2020 20:38:33 +0000 (22:38 +0200)]
search results: fix channel without subscriber count, add spelling info
girst [Thu, 6 Aug 2020 20:01:36 +0000 (22:01 +0200)]
implement channel and playlist endpoints using innertube
ZERO testing regarding whether this can get us banned!
girst [Tue, 4 Aug 2020 22:58:59 +0000 (00:58 +0200)]
implement search params
sadly, pure-protobuf is a small 3rd-party dependency :(
girst [Tue, 4 Aug 2020 19:34:34 +0000 (21:34 +0200)]
update welcome message
girst [Tue, 4 Aug 2020 18:01:40 +0000 (20:01 +0200)]
log info/endcard/searchitems errors to file
girst [Tue, 4 Aug 2020 17:40:17 +0000 (19:40 +0200)]
better what-to-bold strategy in base.j2
girst [Tue, 4 Aug 2020 17:16:45 +0000 (19:16 +0200)]
move parse_metadata to youtube blueprint
girst [Tue, 4 Aug 2020 17:07:40 +0000 (19:07 +0200)]
don't show 'None' if not video age
girst [Tue, 4 Aug 2020 17:02:16 +0000 (19:02 +0200)]
reformat innertube, wrapper for parse_*() -> prepare_*()
girst [Tue, 4 Aug 2020 16:06:27 +0000 (18:06 +0200)]
split metadata in essential and extended
extended is only used by /watch, but essential also for
store_video_metadata(). this allows is to move parse_metadata() to
the youtube blueprint.
girst [Tue, 4 Aug 2020 11:20:01 +0000 (13:20 +0200)]
/watch: use largest thumnail for channel cards
girst [Tue, 4 Aug 2020 11:19:41 +0000 (13:19 +0200)]
first draft of non-invidious search (needs cleanup!)
girst [Tue, 4 Aug 2020 11:12:02 +0000 (13:12 +0200)]
move innertube parsing into its own package, add searchresult parser
girst [Tue, 4 Aug 2020 10:45:46 +0000 (12:45 +0200)]
use all muxed formats for reliability
sometimes, a muxed stream is broken (yet still returns 200OK, so can't
easily detect server side). when the browser tries to load the broken
stream and can't play it, it moves on to the next available one.
was able to reproduce with ytid Xs9rnAH3VAQ
girst [Mon, 3 Aug 2020 08:50:46 +0000 (10:50 +0200)]
display name for playlist subscriptions in the manager
girst [Sun, 2 Aug 2020 21:56:19 +0000 (23:56 +0200)]
WIP: subscribing to playlist
this adds the possibility to subscribe to playlists. playlists don't
support websub, so they'll be updated via pull-sub only.
Note that pubsubhubbub.appspot.com pretends you can subscribe to the
'full' feeds, but then never send POSTs on update.
girst [Sun, 2 Aug 2020 21:27:35 +0000 (23:27 +0200)]
return channel and playlist ids from parse_xml
needed for /user/<> endpoint's card infobar; later useful when
subscribing to playlists
girst [Sun, 2 Aug 2020 21:17:22 +0000 (23:17 +0200)]
implement /user/<nice_username> endpoint in youtube
turns out there's an undocumented xmlfeed endpoint we can use
girst [Thu, 30 Jul 2020 18:23:32 +0000 (20:23 +0200)]
fix subscribe button on Subscription Manager
girst [Thu, 30 Jul 2020 18:13:15 +0000 (20:13 +0200)]
prevent linebreaks in cards
playlist endcards break between number and "videos" due to very
agressive flex sizing.
girst [Thu, 30 Jul 2020 17:41:19 +0000 (19:41 +0200)]
remove stray html comment
girst [Thu, 30 Jul 2020 17:28:27 +0000 (19:28 +0200)]
better pagination
girst [Thu, 30 Jul 2020 15:32:42 +0000 (17:32 +0200)]
example blueprint: show how to add a header item
girst [Thu, 30 Jul 2020 15:16:14 +0000 (17:16 +0200)]
move search bar out of header, implement way to include links in headerbar
girst [Thu, 30 Jul 2020 15:13:04 +0000 (17:13 +0200)]
move audio-only next to raw-video button
girst [Thu, 30 Jul 2020 11:36:58 +0000 (13:36 +0200)]
systemd units: put gunicorn config in /etc/yt
girst [Thu, 30 Jul 2020 11:31:03 +0000 (13:31 +0200)]
switch frontend to eventlet
girst [Thu, 30 Jul 2020 09:01:14 +0000 (11:01 +0200)]
less verbose welcome message
girst [Thu, 30 Jul 2020 08:59:42 +0000 (10:59 +0200)]
tone down welcome message css
girst [Thu, 30 Jul 2020 08:46:25 +0000 (10:46 +0200)]
clean up README, add license notice
girst [Thu, 30 Jul 2020 07:54:32 +0000 (09:54 +0200)]
make site R E S P O N S I V E (mobile friendly)
girst [Thu, 30 Jul 2020 07:38:19 +0000 (09:38 +0200)]
add a way to print all routes in their order of precedence
girst [Thu, 30 Jul 2020 07:37:49 +0000 (09:37 +0200)]
fix running __main__
girst [Thu, 30 Jul 2020 07:22:18 +0000 (09:22 +0200)]
apply proxy to whole stream map (not just best-muxed)
girst [Thu, 30 Jul 2020 06:58:38 +0000 (08:58 +0200)]
implement audio-only-mode, return all streams from g_v_i
girst [Mon, 27 Jul 2020 10:08:16 +0000 (12:08 +0200)]
make flash messages nicer
girst [Sat, 25 Jul 2020 18:12:18 +0000 (20:12 +0200)]
UGLY-HACKY: fallback image for card thumbnail
girst [Sat, 25 Jul 2020 18:11:59 +0000 (20:11 +0200)]
remove unused file
girst [Sat, 25 Jul 2020 16:35:15 +0000 (18:35 +0200)]
switch to systemd units, redo INSTALL as markdown file
girst [Sat, 25 Jul 2020 15:22:35 +0000 (17:22 +0200)]
better document standalone modules
girst [Sat, 25 Jul 2020 15:12:50 +0000 (17:12 +0200)]
re-format config.ini
girst [Sat, 25 Jul 2020 14:47:27 +0000 (16:47 +0200)]
add /websub route
useful for testing if the websub is running.
girst [Sat, 25 Jul 2020 14:39:02 +0000 (16:39 +0200)]
fix loading webhooks as frontend module, simplify startup.sh
girst [Sat, 25 Jul 2020 14:28:36 +0000 (16:28 +0200)]
port refresh-cipher to python (mostly, still calling youtubedown)
girst [Sat, 25 Jul 2020 12:03:02 +0000 (14:03 +0200)]
decouple reddit from common
girst [Fri, 24 Jul 2020 23:25:50 +0000 (01:25 +0200)]
fix premiere video handling
isLiveContent==False, isLive==True
girst [Fri, 24 Jul 2020 20:07:34 +0000 (22:07 +0200)]
don't use proxy for videos that don't need it
girst [Fri, 24 Jul 2020 13:10:06 +0000 (15:10 +0200)]
document proxy endpoint
girst [Fri, 24 Jul 2020 13:02:23 +0000 (15:02 +0200)]
make invidious_url point to HTML version (except show=raw)
girst [Fri, 24 Jul 2020 13:02:02 +0000 (15:02 +0200)]
use proxy for geolocked videos (iff enabled)
girst [Fri, 24 Jul 2020 12:38:34 +0000 (14:38 +0200)]
remove superfluous headers
girst [Fri, 24 Jul 2020 12:37:47 +0000 (14:37 +0200)]
use whitelist for forwarded response headers
girst [Fri, 24 Jul 2020 12:28:45 +0000 (14:28 +0200)]
requests_cache breaks videoproxy
streaming responses are fetched in full (and would fill up the cache)
see https://requests-cache.readthedocs.io/en/latest/user_guide.html
girst [Thu, 23 Jul 2020 12:33:57 +0000 (14:33 +0200)]
let all templates inherit from a base template
also some minor html changes (emojibuttons, navigation, css, ...)
girst [Thu, 23 Jul 2020 12:23:33 +0000 (14:23 +0200)]
use requests for proxy endpoint
girst [Thu, 23 Jul 2020 12:18:26 +0000 (14:18 +0200)]
create video proxy endpoint
girst [Tue, 21 Jul 2020 12:55:24 +0000 (14:55 +0200)]
log POST request data on internal errors
girst [Tue, 21 Jul 2020 12:48:55 +0000 (14:48 +0200)]
improve default subtitle handling
was broken when autogenerated was available, due to sorted()
girst [Tue, 21 Jul 2020 10:53:27 +0000 (12:53 +0200)]
make webhook a blueprint/standalone-hybrid