]>
git.gir.st - subscriptionfeed.git/blob - app/dangerous/lib.py
2 from datetime
import datetime
, timezone
4 from .. common
. innertube
import parse_result_items
6 def fetch_searchresults ( q
= None , page
= 1 , sp
= None ):
7 today
= datetime
. now ( timezone
. utc
). strftime ( "%Y%m %d " )
8 r
= requests
. get ( f
"https://www.youtube.com/results" , {
9 'q' : q
, # Note: if we use '?search_query=' (as yt.com does), we can't use '&page=', but have to use a continuation url that requires an api key
10 'pbj' : 1 , # makes youtube return a json-response
15 'x-youtube-client-name' : '1' ,
16 'x-youtube-client-version' : f
'2. {today} .0.0' , # the version is parsed as a date, and if it's invalid (e.g. month>12 or even feb>=30), youtube throws an encrypted stacktrace :D (but any random date >= 20160323 as of 20200802 works (even year 3000)
23 def prepare_searchresults ( yt_results
):
24 response
= next ( iter ([ item
[ 'response' ] for item
in yt_results
if 'response' in item
. keys ()]),{})
25 response
= response
. get ( 'contents' ,{}). get ( 'twoColumnSearchResultsRenderer' ,{}). get ( 'primaryContents' ,{}). get ( 'sectionListRenderer' ,{}). get ( 'contents' ,[])
26 contents
= next ( iter ([ item
[ 'itemSectionRenderer' ] for item
in response
if 'itemSectionRenderer' in item
. keys ()]),{}). get ( 'contents' ,[])
28 return parse_result_items ( contents
)