mirror of
				https://github.com/iv-org/invidious.git
				synced 2025-10-30 20:22:00 +00:00 
			
		
		
		
	Add ability to set po_token and visitordata ID
This commit is contained in:
		| @@ -173,6 +173,18 @@ https_only: false | ||||
| ## | ||||
| # use_innertube_for_captions: false | ||||
|  | ||||
| ## | ||||
| ## Send Google session informations. This is useful when Invidious is blocked | ||||
| ## by the message "This helps protect our community." | ||||
| ## See https://github.com/iv-org/invidious/issues/4734. | ||||
| ## | ||||
| ## Warning: These strings gives much more identifiable information to Google! | ||||
| ## | ||||
| ## Accepted values: String | ||||
| ## Default: <none> | ||||
| ## | ||||
| # po_token: "" | ||||
| # visitor_data: "" | ||||
|  | ||||
| # ----------------------------- | ||||
| #  Logging | ||||
|   | ||||
| @@ -130,6 +130,11 @@ class Config | ||||
|   # Use Innertube's transcripts API instead of timedtext for closed captions | ||||
|   property use_innertube_for_captions : Bool = false | ||||
|  | ||||
|   # visitor data ID for Google session | ||||
|   property visitor_data : String? = nil | ||||
|   # poToken for passing bot attestation | ||||
|   property po_token : String? = nil | ||||
|  | ||||
|   # Saved cookies in "name1=value1; name2=value2..." format | ||||
|   @[YAML::Field(converter: Preferences::StringToCookies)] | ||||
|   property cookies : HTTP::Cookies = HTTP::Cookies.new | ||||
|   | ||||
| @@ -55,7 +55,7 @@ def extract_video_info(video_id : String) | ||||
|   client_config = YoutubeAPI::ClientConfig.new | ||||
|  | ||||
|   # Fetch data from the player endpoint | ||||
|   player_response = YoutubeAPI.player(video_id: video_id, params: "", client_config: client_config) | ||||
|   player_response = YoutubeAPI.player(video_id: video_id, params: "2AMB", client_config: client_config) | ||||
|  | ||||
|   playability_status = player_response.dig?("playabilityStatus", "status").try &.as_s | ||||
|  | ||||
| @@ -102,7 +102,9 @@ def extract_video_info(video_id : String) | ||||
|  | ||||
|   new_player_response = nil | ||||
|  | ||||
|   if reason.nil? | ||||
|   # Don't use Android client if po_token is passed because po_token doesn't | ||||
|   # work for Android client. | ||||
|   if reason.nil? && CONFIG.po_token.nil? | ||||
|     # Fetch the video streams using an Android client in order to get the | ||||
|     # decrypted URLs and maybe fix throttling issues (#2194). See the | ||||
|     # following issue for an explanation about decrypted URLs: | ||||
| @@ -112,7 +114,10 @@ def extract_video_info(video_id : String) | ||||
|   end | ||||
|  | ||||
|   # Last hope | ||||
|   if new_player_response.nil? | ||||
|   # Only trigger if reason found and po_token or didn't work wth Android client. | ||||
|   # TvHtml5ScreenEmbed now requires sig helper for it to work but po_token is not required | ||||
|   # if the IP address is not blocked. | ||||
|   if CONFIG.po_token && reason || CONFIG.po_token.nil? && new_player_response.nil? | ||||
|     client_config.client_type = YoutubeAPI::ClientType::TvHtml5ScreenEmbed | ||||
|     new_player_response = try_fetch_streaming_data(video_id, client_config) | ||||
|   end | ||||
|   | ||||
| @@ -320,6 +320,10 @@ module YoutubeAPI | ||||
|       client_context["client"]["platform"] = platform | ||||
|     end | ||||
|  | ||||
|     if CONFIG.visitor_data.is_a?(String) | ||||
|       client_context["client"]["visitorData"] = CONFIG.visitor_data.as(String) | ||||
|     end | ||||
|  | ||||
|     return client_context | ||||
|   end | ||||
|  | ||||
| @@ -467,6 +471,9 @@ module YoutubeAPI | ||||
|           "html5Preference": "HTML5_PREF_WANTS", | ||||
|         }, | ||||
|       }, | ||||
|       "serviceIntegrityDimensions" => { | ||||
|         "poToken" => CONFIG.po_token, | ||||
|       }, | ||||
|     } | ||||
|  | ||||
|     # Append the additional parameters if those were provided | ||||
| @@ -599,6 +606,10 @@ module YoutubeAPI | ||||
|       headers["User-Agent"] = user_agent | ||||
|     end | ||||
|  | ||||
|     if CONFIG.visitor_data.is_a?(String) | ||||
|       headers["X-Goog-Visitor-Id"] = CONFIG.visitor_data.as(String) | ||||
|     end | ||||
|  | ||||
|     # Logging | ||||
|     LOGGER.debug("YoutubeAPI: Using endpoint: \"#{endpoint}\"") | ||||
|     LOGGER.trace("YoutubeAPI: ClientConfig: #{client_config}") | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Emilien Devos
					Emilien Devos