Open Benjamin-Loison opened 2 months ago
curl 'http://localhost/YouTube-operational-API/noKey/search?q=test'
works fine, so the issue is on the official instance side.
tail /var/log/apache2/error.log
...
[Thu Sep 12 11:53:13.377291 2024] [php:error] [pid 348545] [client XXX.XXX.XXX.XXX:XXXXX] PHP Fatal error: Uncaught TypeError: array_key_exists(): Argument #2 ($array) must be of type array, null given in /var/www/html/noKey/index.php:52\nStack trace:\n#0 {main}\n thrown in /var/www/html/noKey/index.php on line 52
wc -l keys.txt
2461 keys.txt
head keys.txt
AIzaSyDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
AIzaSyBXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
AIzaSyDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
AIzaSyDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
AIzaSyCXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
AIzaSyAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
AIzaSyAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
AIzaSyAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
AIzaSyBXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
AIzaSyCXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
seems correct.
First YouTube Data API v3 key:
works fine.
so $json
is null
. Line number shift due to possibly required mutex.
Suffer of #165 even for debugging... Cannot I prioritize my HTTPS requests?
if ($_SERVER['REMOTE_ADDR'] === 'XXX.XXX.XXX.XXX') {
die('Testing debugging');
}
$response
:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Sorry...</title>
<style> body { font-family: verdana, arial, sans-serif; background-color: #fff; color: #000; }</style>
</head>
<body>
<div><table><tr>
<td><b><font face="sans-serif" size="10"><font color="#4285f4">G</font><font color="#ea4335">o</font><font color="#fbbc05">o</font><font color="#4285f4">g</font><font color="#34a853">l</font><font color="#ea4335">e</font></font></b></td>
<td style="text-align: left; vertical-align: bottom; padding-bottom: 15px; width: 50%"><div style="border-bottom: 1px solid #dfdfdf;">Sorry...</div></td>
</tr></table></div>
<div style="margin-left: 4em;">
<h1>We're sorry...</h1>
<p>... but your computer or network may be sending automated queries. To protect our users, we can't process your request right now.</p>
</div>
<div style="margin-left: 4em;">See <a href="https://support.google.com/websearch/answer/86640">Google Help</a> for more information.<br><br>
</div>
<div style="text-align: center; border-top: 1px solid #dfdfdf;"><a href="https://www.google.com">Google Home</a></div>
</body>
</html>
https://support.google.com/websearch/answer/86640 does not help much.
In theory weird to obtain this message for an API usage...
$realUrl
: https://www.googleapis.com/youtube/v3/search?q=test&key=AIzaSyDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
$options
:
{"http":{"ignore_errors":true}}
so as defined.
On the official instance https://www.googleapis.com/youtube/v3/videos?part=snippet&id=_ZPpU7774DQ&key=AIzaSyDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX results in above HTML error, while locally it works fine.
So this looks like a serious issue.
head -n 1230 keys.txt | tail -n 1
AIzaSyCXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
has the same issue, hence it is does not seem to be someone who parametered his YouTube Data API v3 key weirdly and added it to the pool.
As I do not plan to use proxies as it's a free service and Tor does not seem appropriate for such a strong usage all the time, I am going to invsestigate TEEs as mentioned in #165 and otherwise possibly provide the way to generate keys.txt
, possibly providing it itself but maybe not for legal reasons.
TEEs need to be established for each type CPU brand I guess...
It allows manufacturers to grant access to TEEs only to software developers who have a (usually commercial) business agreement with the manufacturer
Wikipedia: Software Guard Extensions
Wikipedia: Trusted execution environment#Hardware support (1237724671)
A pivot by Intel in 2021 resulted in the deprecation of SGX from the 11th and 12th generation Intel Core Processors, but development continues on Intel Xeon for cloud and enterprise use.
On my Linux Mint 22 Cinnamon Framework 13:
grep 'model name' /proc/cpuinfo | head -n 1
model name : 12th Gen Intel(R) Core(TM) i5-1240P
I know someone who worked with TEE it was:
-----BEGIN PGP MESSAGE-----
hF4DTQa9Wom5MBgSAQdAOUs3yR9CyN6/7X/sc3JbKzQHoylbqcoNsxDWf5e33A4w
m7vI7rb6k++Xtgjeo6OtZrijg/W2lncCKRmwLYpPLGH24nsuGMzZ4Mua7JwavrSW
0kcB7SJpvXygQ4uxNdJ4v8emI8+ezM9hRPqlQQqBe56cKV4fuukLHKkAm2/Wslss
aC4f2WISoMunZ1XafLQDSfzH3otZq8X+Bg==
=7a18
-----END PGP MESSAGE-----
It seems clear that outside of the TEE things are analyzable, so the user can deduce the YouTube server being contacted etc, just want the URL parameter being the key
is not accessible, so can this HTTPS encryption happens in the TEE? The question is how can the TEE make sure that the public key is the right one and not one manipulated by the user? Note that I look for an easy and secure way to proceed. TEE may have the HTTPS root of trust encoded, then a program can provide intermediary trust levels to prove the public key.
Support for SGX in the CPU is indicated in CPUID "Structured Extended feature Leaf", EBX bit 02,[8] but its availability to applications requires BIOS/UEFI support and opt-in enabling which is not reflected in CPUID bits. This complicates the feature detection logic for applications.
Both in the 11th and 12th generations of Intel Core processors, SGX is listed as "Deprecated" and thereby not supported on "client platform" processors.[6][14][15] This removed support of playing Ultra HD Blu-ray discs on officially licensed software, such as PowerDVD.
Searching DuckDuckGo and Google SGX HTTPS.
As I like the idea of open stuff, like not constrain people to use a given CPU brand, I may prefer to just share publicly the YouTube Data API v3 keys source.
Google results for SGX HTTPS Python do not seem to make things work out of the box.
In fact maybe the web-scraping is the issue, however it works fine so it does not seem to come from that.
I confirm https://yt.lemnoslife.com/search?part=snippet&q=test to still be working, so it does not seem to be a temporary/an illogical issue.
curl 'https://XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.yt.lemnoslife.com/noKey/search?q=test&instanceKey=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
and
curl 'https:/www.googleapis.com/youtube/v3/videos?part=snippet&id=_ZPpU7774DQ&key=AIzaSyCXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
work fine on the private instance (I proceeded twice):
-----BEGIN PGP MESSAGE-----
hF4DTQa9Wom5MBgSAQdAC/k22T0gn4jwvi6j3rC3Yw6N8SllK2uTur/FcuNjOGkw
UPa2N4Jqkat+1Poy+xyqZqDgHpwddCzxSuxocq+TsKIWR58UWgP2428/sfcOTuXI
0lsBZE35sLYF4u32O6El/VTYq5RcMkLEqypwNLb5K8Dv5I3qPXkj7y+sJmjvMlAl
LIsl0wNdE/kQRUKYJI2leY0gyZEfyxrnZFO5D4eIk4JzVWAX6SjwfpXn00hW
=178T
-----END PGP MESSAGE-----
curl 'https://yt.lemnoslife.com/noKey/search?q=test'
{
"error": {
"code": 403,
"message": "YouTube has detected unusual traffic from this YouTube operational API instance no-key service. This issue is currently being investigated at https:\/\/github.com\/Benjamin-Loison\/YouTube-operational-API\/issues\/301"
}
}
As got on Element:
vps713872
www-data
-c cd ytPrivate/ && ./[checkInstance.py](http://checkinstance.py/)
Traceback (most recent call last):
File "/var/www/ytPrivate/./[checkInstance.py](http://checkinstance.py/)", line 146, in <module>
testInstance(instance['domain'], service, instance.get('key'), notifyOnError)
File "/var/www/ytPrivate/./[checkInstance.py](http://checkinstance.py/)", line 79, in testInstance
keysCount = contentJSON['monitoring'] if hasRetrievedAJson else None
~~~~~~~~~~~^^^^^^^^^^^^^^
KeyError: 'monitoring'
On yt0.lemnoslife.com
:
diff /var/www/ytPrivate/instances.json{.old,}
3,5d2
< "domain": "yt"
< },
< {
https://discord.com/channels/933841502155706418/933841503103627316/1283770821332172860
Could disable ability for anyone to add keys to prevent spam of the YouTube servers but nobody has automatized this behavior as far as I know.
noKey/index.php
:
dieWithJsonMessage('YouTube has detected unusual traffic from this YouTube operational API instance no-key service. This issue is currently being investigated at https://github.com/Benjamin-Loison/YouTube-operational-API/issues/301', 403);
crontab
on the official instance
* * * * * curl -s 'https://www.googleapis.com/youtube/v3/videos?part=snippet&id=_ZPpU7774DQ&key=AIzaSyCXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' | sha512sum | grep -q -w '66516dc04d10e9a445547c2be6624cf1da065f8eb74e9537985f3c58296b3f71deed6d98932801d5da581901525ce53b04b91491233ec6c2ba9128e10be03b1c' || curl -G https://lemnoslife.com/BEN/notify.php --data-urlencode 'message=The official instance no-key service response changed!' -d key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
I verified that I correctly receive an Element notification if I change the hardcoded checksum.
https://discord.com/channels/933841502155706418/933841503103627316/1284553137314725973
The Stack Overflow question 3577641 seems overkill.
if($json === null && str_contains($response, "... but your computer or network may be sending automated queries. To protect our users, we can't process your request right now.")) {
dieWithJsonMessage('YouTube has detected unusual traffic from this YouTube operational API instance no-key service. This issue is currently being investigated at https://github.com/Benjamin-Loison/YouTube-operational-API/issues/301', 403);
}
Hence, the official instance no-key service will behave differently in the future. It will redirect to the YouTube Data API v3 endpoint with a very probably working YouTube Data API v3 key.
So this YouTube Data API v3 key will be known to the user. It's better than providing complete keys.txt
and it does not seem that people can force moving to another key of keys.txt
to exhaustively list it. So contrarily to before, the no-key service would not proceed to the request but make the end-user proceed to it, there is no CORS issue in retrieving YouTube Data API v3 as far as I know so it should be fine. So contrarily to before, it leaks a current working YouTube Data API v3 being the same one for everyone using the no-key service at this time. Is this legally fine enough? Do not change the behavior of private instances, as the redirect may require some end-user change to support it.
Should test if technically such an approach works fine.
Could make a request using the YouTube Data API v3 key that plan to provide to make sure before to provide it that it works and afterwards to check if the end-user request(s) exhausted it. However, the purpose of the former check is to ensure that, so the following check looks useless. The guarantee of the no-key service is that just before providing the YouTube Data API v3 key it used to work before. So we do not guarantee anymore the end-user to receive no more quota error, however it can detects them as the no-key service does and request a new YouTube Data API v3 key.
Note that currently the official instance cannot verify that the provided YouTube Data API v3 key works fine, can temporarily rely on a proxy for this purpose however the proxy may be IP banned as it would make as many requests as YouTube Data API v3. However, if the ban is due to quota consumption, can make the proxy verify the key with a low quota usage endpoint like videos
.
Answering https://discord.com/channels/933841502155706418/933841503103627316/1283802304004227207:
"https://www.googleapis.com/youtube/v3/" "AIzaSy" site:stackoverflow.com
DuckDuckGo and Google do not return results with complete YouTube Data API v3 keys.
Maybe can just make no-key service relies on redirections if it works fine, instead of sharing the way to retrieve all YouTube Data API v3 keys.
This seems less a legal issue, but at some point backing up would make sense anyway. With such an approach except this repository and lemnoslife.com
domain name OVH VPS yt0.lemnoslife.com
and Oracle VPS yt.lemnoslife.com
other stuff should not be hurted but instead of a repository ban it may be an account ban so after proceeding to the change backing up may make sense. Note that on Stack Overflow and Codeberg I may have mentioned the no-key service, should back up these plateforms as well.
curl https://yt.lemnoslife.com/noKey/redirect/index.php
{
"error": {
"code": 403,
"message": "YouTube has detected unusual traffic from this YouTube operational API instance no-key service. This issue is currently being investigated at https:\/\/github.com\/Benjamin-Loison\/YouTube-operational-API\/issues\/301"
}
}
This is due to yt/noKey/.htaccess
:
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^.*$ index.php
curl https://yt.lemnoslife.com/noKeyRedirect/index.php
WIP
We look for temporary and not permanent redirections, users should not use forever the redirected to https://www.googleapis.com/youtube/v3/search?q=test&key=AIzaSyCXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.
In the context of the Stack Overflow answer 768472.
<?php
if($_SERVER['REMOTE_ADDR'] == 'XXX.XXX.XXX.XXX') {
//die('Debugging');
$url = 'https://www.googleapis.com/youtube/v3/' . 'search?q=test' . '&key=AIzaSyCXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
header("Location: $url");
die();
}
die('WIP');
?>
curl https://yt.lemnoslife.com/noKeyRedirect/search?q=test
does not redirect anything.
curl -L https://yt.lemnoslife.com/noKeyRedirect/search?q=test
Should log what YouTube Data API v3 keys have specified to figure out how many of the keys we leak how quickly. In fact we do not run out of quota per day but by looping except if there is a single huge quota provided key, they will all in a few days be leaked in theory so it does not make much sense, hence have to hurry to back up to not have bad surprises.
curl -I https://yt.lemnoslife.com/noKeyRedirect/search?q=test
HTTP/1.1 302 Found
Date: Thu, 12 Sep 2024 15:51:08 GMT
Server: Apache/2.4.58 (Ubuntu)
Location: https://www.googleapis.com/youtube/v3/search?q=test&key=AIzaSyCXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Access-Control-Allow-Origin: *
Content-Type: text/html; charset=UTF-8
So concerning curl
it works as wanted, what about Python requests
for instance?
import requests
import json
URL = 'https://yt.lemnoslife.com/noKeyRedirect/search'
params = {
'q': 'test',
}
data = requests.get(URL, params).json()
print(json.dumps(data, indent = 4))
so no change necessary.
In Firefox opening https://yt.lemnoslife.com/noKeyRedirect/search?q=test gives:
I would have prefered the URL to stay https://yt.lemnoslife.com/noKeyRedirect/search?q=test but if it's the price to make the web-browser performs the request I am fine with that.
In theory depending on provided User-Agent may provide an iframe
that may have this behavior but it is not on the top of the agenda.
Do not forget to enable back monitoring afterwards.
Request people to not share YouTube Data API v3 keys retrieved this way, can censor those doing so.
Can request feedback about publishing to Discord #announcements
:
@everyone
In the context of issues/301, that is YouTube operational API official instance no-key service being IP banned, I modified the official instance no-key service behavior. It now redirects to the YouTube Data API v3 endpoint with a very probably working YouTube Data API v3 key.
For instance https://yt.lemnoslife.com/noKey/search?q=test temporarily redirects to https://www.googleapis.com/youtube/v3/search?q=test&key=AIzaSyCXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, thanks to HTTPS Location response header, see Wikipedia: HTTP 302. Depending on the way you fetch the no-key service, you may have to allow redirections. For instance for
curl
you need to add-L
option, for Pythonrequests
redirections are allowed by default.Please do not store or share YouTube Data API v3 keys involved in the redirections to keep the service working.
While this should not be a legal issue, I recommend you to back up this project on your side.
As done before can mention people involved until now for their feedback.
Replace noKey
with noKeyRedirect
during review process maybe. Well we can directly ship to production and then review with noKey
and then notify everyone.
I plan to publish in #announcements the following messages. If you have useful feedback before I mention
@everyone
, please let me know. @xbob @jochemcoding @wakakuro @liquidzooonlyfins @teodor.atroshenko @bluscream @mitchelldiedrich @inayye @minozar
and escape with backticks @everyone.
So technically the no-key service retrieves a YouTube Data API v3 from a modified no-key service proxy, then redirect the user. Could just otherwise ask the proxy if the YouTube Data API v3 is fine. Could otherwise use another instance as the official one, such that it will work the same way when the official instance is unbanned if it is ever been. However, I do not have similar powerful instances and adding a proxy introduces some delay. Well if the instance just redirects then another one may be strong enough. However, note that the official instance have a few differences to this repository code, as some have not yet been merged. Concerning authentication it should not be necessary yet. There is also no-key service mutex but as less overload, may not be necessary yet.
In fact the instance still have to proceed to the verification request which even for trivial videos?id=XXXXXXXXXXX
case is still a workload that seems to be too much for yt0.lemnoslife.com
. As htop
shows a CPU at 100% and the latency seems about tens of seconds. While now that stop redirect yt.lemnoslife.com
to yt0.lemnoslife.com
it uses 12 % of the CPU and put back an instance key to prevent incorrectly implemented client to still use it.
Letting people ability to request a new key would allow them to exhaustively request them all.
Maybe can leverage OVH free plan that still exists, see Robust_image_source_identification_on_modern_smartphones/issues/53. Have only month right? the voucher [...] is valid for a period of one (1) month source: https://www.ovhcloud.com/en/public-cloud/prices/
C2-15 15 GB RAM 4 vCores (3 GHz) 100 GB SSD 250 Mbit/s From €68.20 ex. VAT/month €0.19 ex. VAT/hour
looks correct for instance in terms of performances and price.
Now the question is how to get an account not having already used this offer. I already had an account and:
-----BEGIN PGP MESSAGE-----
hF4DTQa9Wom5MBgSAQdAH9SZ2kcPOh/Irbq5j2Kb4qb+F31ZG4oJSunjUY2U9xAw
42fTsLOrzMTkXEFSzRzKdDx8qd+Xjv3Hhu1h8prxZbfpiZJHiYUd/ViMP2T9crq/
0kABrdzbmuwNCQspXWpQbOPuSHPtVD//DG3hG2iBil3K+5ZQ3PSPoXM6rImikrwB
PvAPx+mbOuyZurYlWrmThZNr
=acd8
-----END PGP MESSAGE-----
too but not:
-----BEGIN PGP MESSAGE-----
hF4DTQa9Wom5MBgSAQdABl6cxZ4zf6A996HtICZDi6aJ6KPH/st5gzXFCswOSnUw
cR3xwgrCDTOLcUg3Fmm52xs1iSJfAtkXRUsR1CJO4e6VgOhyFY37HnfcO1GzDLkk
0kAB4q11X/LfuTQtOAcRMxpikZsezP54nLjzJ1wFZ20NjkaMTVxFFM9W2hNtgMKN
1c0kaSoI4yE/eJUTBBYMjV/M
=tmyf
-----END PGP MESSAGE-----
Can instead make another Oracle account as the latter person have multiple credit cards. The question is which one has been used until now? Also hope that another account with his identity will not trigger some kind of limitation.
https://cloud.oracle.com/invoices-and-orders/upgrade-and-payment?region=eu-marseille-1 does not mention a credit card while according to Linux Mint 22 Cinnamon Framework 13 /home/benjamin/Desktop/bens_folder/bazaar/memos/computer_science/services/oracle/Screenshot from 2023-10-25 14-51-44.png
it maybe should. I suspect the credit card to be:
-----BEGIN PGP MESSAGE-----
hF4DTQa9Wom5MBgSAQdA6nU1I47swOIRy2UFxjMoxxX2mjBShZeLoiYPU4BwEg4w
xfsAbDi0qaKA0ADyddD09LWGzrAwdVRKBc63IZS4HJwEkcNBp1bYjOCybX1E0MLt
0nAB6EajOrHRQit9GjfDnfG8yUNEQ57zFYuXqoNO9ihngxk+8n8A6wLYHDrcdUiS
MSiRG8IAa/pgMjpaXm9tEF+CHGQQ+H03Ys26BkFlsUOwxHc5zsK6/RKtB8aMzVEN
XqK/YHvQcT4Vrm4mtfavJVV3
=HM8s
-----END PGP MESSAGE-----
Other Billing tabs do not help.
Note that OverClock3000 does not seem appropriate due to OverClock3000/issues/12, running in a virtual machine on my own computer, hence being billed directly in electricity and possibly Internet access degradation.
If would pay for temporary usage, then what is the cheapest OVH offer with an equivalent hardware as the official instance? Being 4 logical cores and 24 GB of memory. The logical cores seems to be the most important. The cheapest bare metal is about 64.98 €/month, source: https://www.ovhcloud.com/fr/bare-metal/prices/.
VLE-4 12 € TTC/mois 4 vCore 4 Go 80 Go SSD NVMe 1 Gbit/s illimité
Source: https://www.ovhcloud.com/fr/vps/
4 GB may be a bit limiting but I doubt so, especially if implement redirections approach. Can otherwise use swap or compress memory as discussed in OverClock3000/issues/12. Currently the official instance, hence providing only error message for no-key service uses 1.86 GB of RAM and it maybe counts some other unrelated stuff.
Comfort 28,20 € TTC/mois 4 vCore 8 Go 160 Go SSD NVMe 1 Gbit/s illimité*
Just for 8 GB the cost does not seem appropriate.
Is not there providers that allow arbitrary VPS scale and billed per hour or even minutes?
Maybe prefer an OVH account compared to an Oracle one, as if do not have IPv6 with OVH, its panel may be clearer that Oracle one.
OVH sure credit card contrarily to Oracle. I finally made another OVH account.
In fact the storage is limiting. So much that it is quite useless, even with 3 servers:
D2-2 2 GB RAM 1 vCores (2 GHz) 25 GB NVMe 100 Mbit/s From €5.49 ex. VAT/month €0.00991 ex. VAT/hour
Does a host provider provides minute billing to quickly iterate to the appropriate shape?
Note that concerning monitoring cannot alter JSON answer as previously to precise the number of keys.
Maybe can leverage one of many free IPv6s. Same for other abuse issues. Maybe they batch ban IPv6s? If I remember correctly I already investigated this approach and it was not satisying, let us verify. Searching ipv6
on GitHub returns only #162 and #11 and in the latter interesting one IPv6 does not show up case-insensitively.
On the official instance:
test_ipv6.php
:
<?php
echo file_get_contents('https://ifconfig.me');
php test_ipv6.php
129.151.245.17
So let us have a standalone PHP showing the issue:
<?php
echo file_get_contents('https://www.googleapis.com/youtube/v3/videos?part=snippet&id=_ZPpU7774DQ&key=AIzaSyCXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
php test_ipv6.php
PHP Warning: file_get_contents(https://www.googleapis.com/youtube/v3/videos?part=snippet&id=_ZPpU7774DQ&key=AIzaSyCXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX): Failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden
in /home/ubuntu/test_ipv6.php on line 3
curl https://ifconfig.me
129.151.245.17
curl -6 https://ifconfig.me
curl: (7) Failed to connect to ifconfig.me port 443 after 0 ms: Couldn't connect to server
Maybe not IPv6 is assigned to the VPS...
ifconfig | grep '129.151.245.17'
does not return anything so I doubt it would show me my IPv6.
https://cloud.oracle.com/compute/instances/ocid1.instance.oc1.eu-marseille-1.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX?region=eu-marseille-1 only mentions IPv4s.
DuckDuckGo and Google searching Oracle VPS assign IPv6 to VPS.
All my free Oracle VPS have the same curl -6 https://ifconfig.me
output:
-----BEGIN PGP MESSAGE-----
hF4DTQa9Wom5MBgSAQdAOnp4tbWbMWVTd44KPohHsaB0/VIp0XJHS7REVKTsMAcw
D/vnIHhlWgoTLoNKQKxQNUNiJTARbIs/s4cVe8hACNIavoXphHLweDKSNlOTrJmP
0rMBUj0eS0AVBGkjoxRmaDW1L2a5ajobQoAQwn02hHRqBoRLT7H2mhL7Rid8Utxg
jeomOyK+KKXV1DpidHScCObbY2eD48bpnhLD2iZDVCt5aiWYVnvqgmp4rnMGrq42
Y5gxx8Nm4rR0/vSmWVWHAUZZx4vMlNjmDFSewMJfNtxjtDEIPiDOKcdonvfKYbgy
6RIDVHCCoS5odpFDYnq9CCEgl4S3DI0NvH0RGT/6bfu8hJJi+Q==
=uoP+
-----END PGP MESSAGE-----
I asked on Discord a friend who also have a fre Oracle VPS:
-----BEGIN PGP MESSAGE-----
hF4DTQa9Wom5MBgSAQdAIBo0NbyEljOO8c6PKZsbbjZBSzllpe7X2FubBKXnXVQw
C0jPEKkncuBrf4ntoSQggDvZ9R0+aUFvZqHj/GFLkD4E6VwMNmAmGges9Wm/EuoS
0oIB6DuGRRKS9cig+g9/j8zZQf8B8S64ku2esrr5Z5FwDlkAmc7tOJkkDnd3b7GF
l/yVL8TPaiaBOBSOvfEaXsRqCHO+rDOGSBS1/FqXtHUpL6qS6G3YcBPjQ0TeYLj/
IDqODMSHNf+yR+COETTWfupc2GBYQVsveh77W3E3MG6+vX4J
=MYEM
-----END PGP MESSAGE-----
He answered me that he will investigate next week.
Maybe with crontab or at the beginning of history
will find out something interesting, I remember doing some operations related to IPv6s like disabling it explicitly. On the official instance ubuntu
and root
crontab
do not mention a similar operation. Beginning of history
of both users do not mention things except the ServerFault answer 200635. If I remember correctly I modified a file.
history | grep -i ipv
does not return interesting as both users.
https://docs.oracle.com/en-us/iaas/Content/Network/Concepts/ipv6.htm#fastconnect__enable
Disabling uBlock does not help.
No DuckDuckGo and Google results for "ipv6CidrBlock must not be null"
.
https://discord.com/channels/933841502155706418/933841503103627316/1283873245145337948 reminds me that people having contributed with keys may not be fine in my redistributing them. Even if in my opinion it does not change much, I could restrain keys to those I found on my own.
How many YouTube Data API v3 keys contains YouTube_Data_API_v3_key_web_scraper?
Related to #18.
My redirection approach is between dividing by 100 and multiplying by 2 the quota usage. Concerning the actual key usage by instance it does not reduce it. Do YouTube servers could be informed by HTTPS headers for instance that end-users come from my official instance? Can however make an endpoint that people can retrieve to force verifying a key validity and switching to another one if necessary. However, it starts being not clean if anyone have to implement such behavior.
I just verified that YouTube_Data_API_v3_key_web_scraper/wiki/Home brings 3,437 YouTube Data API v3 working different keys. I stored a copy of them on my Linux Mint 22 Cinnamon Framework 13 at:
-----BEGIN PGP MESSAGE-----
hF4DTQa9Wom5MBgSAQdAR5D1sy98gVeFqHd7SRasFc2qCia7Lut7Eycun/kYHjYw
cCXTnb1ZgeHvUsNubcRKoNeNMw8ZDpW3KmmyEd06l8EMGJwDF4PcSZn9sxCyOPan
0pMBtHp1uI4rl3OkBd7x7+KpNUPnVU/1Buay21xS4br3vGXP27MM4jqq7mwED4Pf
zw3Gri4nl7ile4Egm13VmOvUhErWky4DO8MCb72akPgDL09bkRsyGv858Jsz3Afs
f44qh2ohqw3+NqCUj5BUfifrJVyXil8PGTEb9mdH8yUPM12Nhu7hJ1a22Jy+sbG1
YgkwI60=
=MqA/
-----END PGP MESSAGE-----
So contributed YouTube Data API v3 keys are clearly not needed.
Currently the YouTube operational API official instance is powered with 2,462 keys.
On yt0.lemnoslife.com
:
curl -6 https://ifconfig.me
2001:41d0:302:2200::54b0
So to summarize:
yt0.lemnoslife.com
only for the no-key service, not web-scraping endpoints, if still not enough can rely on another free of my Oracle VPS)Asking people to create Oracle free VPS does not seem useful as would need to trust them.
I wanted to try the proxy way but I bought by mistake a month of VLE-4.
Cannot verify VPS SSH fingerprint through KVM.
ssh debian@141.95.86.158
sudo apt update && sudo apt upgrade -y && sudo apt dist-upgrade -y && sudo apt autoremove -y
As everyone: blob/11566147f4d54b8d8d8481709fd5bf6b1329f4de/README.md#install-your-own-instance-of-the-api
sudo apt install -y apache2 php
sudo a2enmod rewrite headers
Replace AllowOverride None
with AllowOverride All
in <Directory /var/www/>
in /etc/apache2/apache2.conf
.
sudo service apache2 restart
sudo apt install -y git
sudo chown www-data: /var/www/ -R
sudo su -l www-data -s /bin/bash
cd htm/
rm index.html
git clone https://github.com/Benjamin-Loison/YouTube-operational-API .
sed -i 's/my instance/yt.lemnoslife.com/' configuration.php
I set myself reminders before 13 October 2024 that is the VPS expiration.
sudo apt install -y certbot
sudo apt -y install python3-certbot-apache
sudo apt install -y htop
Subscription
Creation date 13 September 2024
Next payment date 13 October 2024
Commitment None Manual renewal
I Configure renewal to manual.
Cancel subscription:
Cancel my vps-3913cb36.vps.ovh.net service
Once you confirm the cancellation, please note that any data linked to this service and any backups will be permanently deleted. You will need to take the necessary measures to conserve your data before you confirm your cancellation. Once the process has been launched, it cannot be cancelled. OVHcloud does not accept any responsibility for data loss in this scenario.
So it seems that do not want to cancel subscription and won't be renewed in a month automatically.
echo -n 'AIzaSyCXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' > ytPrivate/keys.txt
curl https://yt.lemnoslife.com/ytPrivate/keys.txt
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access this resource.</p>
<hr>
<address>Apache/2.4.62 (Debian) Server at yt.lemnoslife.com Port 443</address>
</body></html>
So now let us proceed to merging previous keys.txt
and new one.
wc -l youtube_data_api_v3_{official_instance_keys,working_keys_based_on_web_archive}.txt
2462 youtube_data_api_v3_official_instance_keys.txt
5484 youtube_data_api_v3_working_keys_based_on_web_archive.txt
7946 total
cat youtube_data_api_v3_{official_instance_keys,working_keys_based_on_web_archive}.txt | sort | uniq | wc -l
7091
OVH public cloud with my main account with higher quota:
b3-16 16 Go 4 100 Go NVMe 1 Gbit/s 4 Gbit/s max. 0,093 €
So 83 € per month it seems so I took the right decision with the VPS.
I restored monitoring to potentially directly be notified if get IP banned again:
mv instances.json{.old,}
I have a VPS SX from https://www.1blu.de/server/vserver/ and a Raspberry Pi 5 8GB locally where i host most of my bots and web services (which has the advantage of getting a new residential ipv4 every 24hrs or when i tell my router to get a new one :)
@Bluscream Thank you for proposing but currently I do not need additional servers.
Following #issuecomment-2347106376, continuing investigating assigning IPv6 to Oracle free VPS:
https://docs.oracle.com/en-us/iaas/Content/Network/Concepts/ipv6.htm
After sudo reboot
, curl -6 https://ifconfig.me
returns after a while curl: (28) Failed to connect to ifconfig.me port 443 after 134663 ms: Couldn't connect to server
while curl https://ifconfig.me
returning IPv4 does not.
Searching DuckDuckGo and Google Oracle Ubuntu VPS enable IPv6.
https://www.aih.app/2023/04/15/setup-ipv6-on-ubuntu-22-04-on-oracle-cloud/ seems to contain images but all of them do not load.
head -n 1 /etc/os-release
PRETTY_NAME="Ubuntu 24.04.1 LTS"
sudo service networking restart
Failed to restart networking.service: Unit networking.service not found.
Alternatively can use:
sudo reboot
Benjamin_Loison/openssh/issues/21 would help.
https://cloudzy.com/blog/configure-ipv6-on-ubuntu/#How_to_Set_Up_IPV6_on_Ubuntu#Step_1_Editing_sysctlconf_file is not enough even after reboot.
ls /etc/network/interfaces
ls: cannot access '/etc/network/interfaces': No such file or directory
https://forums.oracle.com/ords/apexds/post/enable-ipv6-on-arm-instance-with-ubuntu-20-04-9897
/etc/netplan/50-cloud-init.yaml
:
# This file is generated from information provided by the datasource. Changes
# to it will not persist across an instance reboot. To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
version: 2
ethernets:
ens3:
dhcp4: true
match:
macaddress: 02:00:17:00:10:a7
set-name: ens3
dhclient -6 ens3
Command 'dhclient' not found, but can be installed with:
sudo apt install isc-dhcp-client # version 4.4.3-P1-4ubuntu1, or
sudo apt install isc-dhcp-client-ddns # version 4.4.3-P1-4ubuntu1
sudo apt install isc-dhcp-client -y
https://docs.oracle.com/en-us/iaas/Content/Network/Concepts/ipv6.htm#os_config__linux_config also mentions the following command:
dhclient -6 ens3
RTNETLINK answers: Operation not permitted
mkdir: cannot create directory '/run/network': Permission denied
mkdir: cannot create directory '/run/systemd/resolve/netif': Permission denied
chown: cannot access '/run/systemd/resolve/netif': No such file or directory
Note that I am fine being given an arbitrary IPv6 that I have not, even partially, chosen.
time sudo dhclient -6 ens3
^C
real 0m55.286s
user 0m0.001s
sys 0m0.007s
What is the Netplan they mention?
Along dhcp4: true
I added dhcp6: true
.
After sudo reboot
, does not help.
Maybe factory reset the instance or creating a new one would be interesting.
For better testing should delete instance-20230828-0505
and create a new instance.
Terminate instance Do you want to permanently delete instance instance-20230828-0505? Permanently delete the attached boot volume
So just test to make IPv6 work (and IPv4 too) without hosting a YouTube operational API instance first.
-----BEGIN PGP MESSAGE-----
hF4DTQa9Wom5MBgSAQdAtc49d74Krq9SVzHu2lKkwQeT/9JHd1Lfye24lDpUOEIw
8KdcSawItaFYZhNpLRD4lzzFzhAx+I+3RtNRxzkSerXALkxCazzsEAVg8rXQDZzu
0sByAZ/D8v0XJ7wmHvKVZ/L7IBVztSXtp6jKEzk6pfKyqT/gekXnJsSnVddiWH93
+aGQY1CTtxIHWMV0TZeF0v6Z7nmFBNqOflTD849ZG4RITJuPPLjY/RracGZnCX6n
tW4nAjbP7Qi81PCsdq7OdYXxS2MkBI/BNuI5J+ag+ToqveC1VHpDTAbj+l6XhUOi
GN3jaQb/P8Z5O9Z42unYaHsGQBkZvpYOU0Z/EcEwK6hBvNm/d8jL1h+vUD+dJCn/
tubeANVrJ89r8NiHsH2AjTKyLvzVQXI5e9SvOJAg86LjhDYTQCfIeAfLQpaijDAU
3mssxYq71IVskuZbqHumNDEsPAkg55ZV7t+GA4rugJlpjKfpSsig1Y3mgO696FXp
I/8O3eV6o4DfDwTqZAC8iJnVw78l
=RQKI
-----END PGP MESSAGE-----
So if experiment anyway use instance-20230722-1310
(based on my Oracle account benjaminthekoala
).
https://www.aih.app/2023/04/15/setup-ipv6-on-ubuntu-22-04-on-oracle-cloud/ images finally load correctly today on my Linux Mint 22 Cinnamon Framework 13 Firefox, see https://discord.com/channels/933841502155706418/933841503103627316/1284173916545220671.
After Adding Routing Tables and sudo reboot
still have:
curl -6 https://ifconfig.me
curl: (7) Failed to connect to ifconfig.me port 443 after 0 ms: Couldn't connect to server
Should test after Creating IPv6 security lists and sudo reboot
and Adding the Address to the Subnet.
After Adding an IPv6 address to the Instance and sudo reboot
:
curl -6 https://ifconfig.me
2603:c027:c002:b800:dfc1:efbf:49e:f15a
From old official instance:
curl -6 https://ifconfig.me
2603:c026:c103:e000:6220:f0f7:d4ad:8b13
Without furher modification I received on Element:
From LemnosLife VPS
/var/www/html/BEN/notify.php
: The official instance no-key service response changed!
curl -4 -s 'https://www.googleapis.com/youtube/v3/channels?part=id&forHandle=@MrBeast&fields=items/id&key=AIzaSyDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Sorry...</title>
<style> body { font-family: verdana, arial, sans-serif; background-color: #fff; color: #000; }</style>
</head>
<body>
<div><table><tr>
<td><b><font face="sans-serif" size="10"><font color="#4285f4">G</font><font color="#ea4335">o</font><font color="#fbbc05">o</font><font color="#4285f4">g</font><font color="#34a853">l</font><font color="#ea4335">e</font></font></b></td>
<td style="text-align: left; vertical-align: bottom; padding-bottom: 15px; width: 50%"><div style="border-bottom: 1px solid #dfdfdf;">Sorry...</div></td>
</tr></table></div>
<div style="margin-left: 4em;">
<h1>We're sorry...</h1>
<p>... but your computer or network may be sending automated queries. To protect our users, we can't process your request right now.</p>
</div>
<div style="margin-left: 4em;">See <a href="https://support.google.com/websearch/answer/86640">Google Help</a> for more information.<br><br>
</div>
<div style="text-align: center; border-top: 1px solid #dfdfdf;"><a href="https://www.google.com">Google Home</a></div>
</body>
</html>
curl -6 -s 'https://www.googleapis.com/youtube/v3/channels?part=id&forHandle=@MrBeast&fields=items/id&key=AIzaSyDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
{
"items": [
{
"id": "UCX6OQ3DkcsbYNE6H8uQQuVA"
}
]
}
Without precising -4
or -6
it gives the -6
output, so it seems to use by default -6
.
How to force one or the other with PHP?
test_ipv6.php
on my Linux Mint 22 Cinnamon Framework 13 returns an IPv6, so the interesting question is how to force IPv4.
https://x.com/McSodbrenner/status/773540936764821504:
file_get_contents('https://ifconfig.me', false, stream_context_create(['socket' => ['bindto' => '0:0']]))
returns the IPv4 both on my laptop and the old official instance.
If detected as abusing again, then can try automating changing the IPv6, as seems to be able to use 256 different IPv6s as can choose 2 hexadecimal characters.
I have the same error as #issuecomment-2346106204 on OverClock3000 within Virtual Machine Manager, I suspect some people to have abused it through yt4.lemnoslife.com
, hence I added an instance key to it.
Note that in this case the default is IPv6, hence the IPv6 has been banned.
Note that there is no issue with the web-scraping endpoints. Using IPv4 thanks to #issuecomment-2351157249 solves the issue.
In case it is not above, as I remove it from yt0.lemnoslife.com
:
Output:
```json { "kind": "youtube#searchListResponse", "etag": "NotImplemented", "nextPageToken": "Ep8DEgR0ZXN0GpYDRWdJUUFVZ1VnZ0VMWkdKcVVHNVlZV0ZqUVZXQ0FRdENUbWxqYUdaWFdGQnZUWUlCQ3psc2JESmZRa1JhY0VrMGdnRUxkVzlUYUZCcFN6WTROemlDQVF0WlFYaE1kV1ZGUzNGdFZZSUJDMjlOZDFwQlZUUmFTRzF2Z2dFTFMzTkdaRzAwWVZvd2VGR0NBUXQyWlZCak5WWTBhRjlyWjRJQkMybFdZbTl3VjNsQ1VqVlpnZ0VMZDAxNlNVaDFWMmhmU1RDQ0FRdE9VekI0UWtSR2RsVkljNElCQzNWb2FVSkJVVzFyWkdJd2dnRUxNRFExWjBJd2FWbzRSMEdDQVF0R2MzWktlbVpZV2treE9JSUJDelZqZVhOUVVHNWFSV2hOZ2dFTFIzcFRlalZHUWxwUlpUQ0NBUXRRUzE5RlNqTkVlV2xwUVlJQkN6SmhORlY0WkhrNVZGRlpnZ0VMY1ZGR2EzVnlNRVpIVjJlQ0FRdHZMVlY0TUZWemVWbHJZN0lCQmdvRUNCZ1FBdW9CQkFnQ0VEYyUzRBiB4OgYIgtzZWFyY2gtZmVlZA==", "items": [ { "kind": "youtube#searchResult", "etag": "NotImplemented", "id": { "kind": "youtube#video", "videoId": "dbjPnXaacAU" }, "snippet": { "channelId": "UCXp1pqN0VP459pjypvK_Rww", "title": "selective attention test", "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/dbjPnXaacAU\/hqdefault.jpg?sqp=-oaymwE9COADEI4CSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4EgALoAooCDAgAEAEYZSBdKFQwDw==&rs=AOn4CLALu3RyRBYLM7OXvQpZqhIqp4Thkg", "width": 480, "height": 270 } ], "channelTitle": "Garri Frischer", "channelHandle": "@TheGarriFrischer", "timestamp": "12 years ago", "duration": 41, "views": 1061345, "badges": [], "channelApproval": null, "channelThumbnails": [ { "url": "https:\/\/yt3.ggpht.com\/ytc\/AIdro_m2030_0rNNCS27eVabMCsnTrHpnJtjnfjw1hkNl5I=s68-c-k-c0x00ffffff-no-rj", "width": 68, "height": 68 } ], "detailedMetadataSnippet": [ { "text": "By Garri Frischer, Rikard Zeilon, Linn Mattsson, Stefan Parkbring. Lights,camera work - Johan Karlsson." } ], "chapters": [] } }, { "kind": "youtube#searchResult", "etag": "NotImplemented", "id": { "kind": "youtube#video", "videoId": "BNichfWXPoM" }, "snippet": { "channelId": "UCjU6ZwoTQtKWfz1urL7XcbA", "title": "ZhuQue-3 10-kilometre VTVL test", "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/BNichfWXPoM\/hq720.jpg?sqp=-oaymwE9COgCEMoBSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4JgALQBYoCDAgAEAEYYCBgKGAwDw==&rs=AOn4CLA9rSAS-cEIKnv9Pqq7DTkvxZpMEw", "width": 360, "height": 202 }, { "url": "https:\/\/i.ytimg.com\/vi\/BNichfWXPoM\/hq720.jpg?sqp=-oaymwExCNAFEJQDSFryq4qpAyMIARUAAIhCGAHwAQH4Af4JgALQBYoCDAgAEAEYYCBgKGAwDw==&rs=AOn4CLCH2yupxJN8KqOkz7xenczuK0AJhg", "width": 720, "height": 404 } ], "channelTitle": "SciNews", "channelHandle": "@SciNewsRo", "timestamp": "20 hours ago", "duration": 131, "views": 18599, "badges": [], "channelApproval": "Verified", "channelThumbnails": [ { "url": "https:\/\/yt3.ggpht.com\/ytc\/AIdro_llX8NzZxxxeqNikyizk2LrYCJeu2FgVLdsfG0516Wq7rc=s68-c-k-c0x00ffffff-no-rj", "width": 68, "height": 68 } ], "detailedMetadataSnippet": [ { "text": "LandSpace's ZhuQue-3 launch vehicle (\u6731\u96c0\u4e09, ZQ-3) successfully performed a 10-kilometre vertical takeoff, vertical landing\u00a0..." } ], "chapters": [] } }, { "kind": "youtube#searchResult", "etag": "NotImplemented", "id": { "kind": "youtube#video", "videoId": "9ll2_BDZpI4" }, "snippet": { "channelId": "UCMXzc5fADodNEdkSbHXZlpg", "title": "Cybertruck Crash Test is HORRIFYING, Here\u2019s Why", "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/9ll2_BDZpI4\/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCqLyZdjLA19yPv9Q9dVcpNgEZVzw", "width": 360, "height": 202 }, { "url": "https:\/\/i.ytimg.com\/vi\/9ll2_BDZpI4\/hq720.jpg?sqp=-oaymwEXCNAFEJQDSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLApDvdIdp7RimXrU_ofPFgGA7OEAA", "width": 720, "height": 404 } ], "channelTitle": "AI DRIVR", "channelHandle": "@AIDRIVR", "timestamp": "9 months ago", "duration": 490, "views": 5325590, "badges": [], "channelApproval": "Verified", "channelThumbnails": [ { "url": "https:\/\/yt3.ggpht.com\/ytc\/AIdro_mr-Y7BqklAPMJO7-MSgIUo-eiQee61Ze2XwF17l55Gdhc=s68-c-k-c0x00ffffff-no-rj", "width": 68, "height": 68 } ], "detailedMetadataSnippet": [ { "text": "Consider supporting this channel on Patreon: https:\/\/patreon.com\/AIDRIVR." } ], "chapters": [] } }, { "kind": "youtube#searchResult", "etag": "NotImplemented", "id": { "kind": "youtube#video", "videoId": "uoShPiK6878" }, "snippet": { "channelId": "UCrhxnApeiomD9BeXb7Q2CuA", "title": "NEW CAR VS OLD CAR CRASH TEST", "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/uoShPiK6878\/hqdefault.jpg?sqp=-oaymwEjCOADEI4CSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLD1_D3j3RK2rztJDkHB4H6LBBjwSA", "width": 480, "height": 270 } ], "channelTitle": "K1CarTV", "channelHandle": "@K1CarTV", "timestamp": "3 weeks ago", "duration": 679, "views": 421721, "badges": [], "channelApproval": "Verified", "channelThumbnails": [ { "url": "https:\/\/yt3.ggpht.com\/e55awD1ZXbmg6JrcBeopQFivJjs93SHFLLD3Gyzbb-z2-3DSh4Rp4mOji4Lss3UnTDCh7nss=s68-c-k-c0x00ffffff-no-rj", "width": 68, "height": 68 } ], "detailedMetadataSnippet": [ { "text": "newcar #oldcars #carcrashtest #iihs #euroncap What would happen if an old car crashed with a new car? New Car VS Old Car\u00a0..." } ], "chapters": [] } }, { "kind": "youtube#searchResult", "etag": "NotImplemented", "id": { "kind": "youtube#video", "videoId": "YAxLueEKqmU" }, "snippet": { "channelId": "UC4rlAVgAK0SGk-yTfe48Qpw", "title": "How Good Are Your Eyes? Cool and Quick Test", "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/YAxLueEKqmU\/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBGi1fBaYdrzuegkQj1P9BfKCf9Gw", "width": 360, "height": 202 }, { "url": "https:\/\/i.ytimg.com\/vi\/YAxLueEKqmU\/hq720.jpg?sqp=-oaymwEXCNAFEJQDSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLBj6uen-LOSVMXmSoeN9Q4HOP-3AQ", "width": 720, "height": 404 } ], "channelTitle": "BRIGHT SIDE", "channelHandle": "@BRIGHTSIDEOFFICIAL", "timestamp": "6 years ago", "duration": 497, "views": 59625349, "badges": [ "CC" ], "channelApproval": "Verified", "channelThumbnails": [ { "url": "https:\/\/yt3.ggpht.com\/QnTNTL6lvpKA-OWYdSwke3kF9GEBoriwaaHlbOOo4E7hRuXBEiO1mrYsvmk8xQznjg3GKWUT=s68-c-k-c0x00ffffff-no-rj", "width": 68, "height": 68 } ], "detailedMetadataSnippet": [ { "text": "How good is your eyesight? Here's a simple eyesight " }, { "text": "test", "bold": true }, { "text": " that will show how sharp your eyes are. We all know that \u201ceyes are the\u00a0..." } ], "chapters": [ { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/YAxLueEKqmU\/hqdefault_71000.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCwwSE5NJgwSr0Nu5602D_66p8ZqQ", "width": 336, "height": 188 } ] }, { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/YAxLueEKqmU\/hqdefault_143933.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLB6fC-KNbZJCgPLrfc28f2Q9Cfz3w", "width": 336, "height": 188 } ] }, { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/YAxLueEKqmU\/hqdefault_233866.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLB-i8XyL5GPLEqFLN7QkLUSb9bsPQ", "width": 336, "height": 188 } ] }, { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/YAxLueEKqmU\/hqdefault_329866.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCRBIQnt4WkC4CbD-K0_JMc5GKu3w", "width": 336, "height": 188 } ] }, { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/YAxLueEKqmU\/hqdefault_446766.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAOEfkecM77Puva3MSAO3gtZfC0TA", "width": 336, "height": 188 } ] } ] } }, { "kind": "youtube#searchResult", "etag": "NotImplemented", "id": { "kind": "youtube#video", "videoId": "oMwZAU4ZHmo" }, "snippet": { "channelId": "UCfUG3KOVqkL1lY305OQCS1A", "title": "Guess the Hidden Word and Number | ILLUSION TEST", "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/oMwZAU4ZHmo\/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAzPklbHsLpvEVresgtY5OF7w5YcQ", "width": 360, "height": 202 }, { "url": "https:\/\/i.ytimg.com\/vi\/oMwZAU4ZHmo\/hq720.jpg?sqp=-oaymwEXCNAFEJQDSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLC8U556uGDt0IaQlpDACMDFI79oqQ", "width": 720, "height": 404 } ], "channelTitle": "QUIZZER CAT", "channelHandle": "@quizzercat", "timestamp": "1 year ago", "duration": 498, "views": 1019602, "badges": [], "channelApproval": "Verified", "channelThumbnails": [ { "url": "https:\/\/yt3.ggpht.com\/Gm0HDUAV6oHBL76S3Mzhz7exVKfBUnJiQ6YAPWzDTrfmniwMwuW_NTR-cKsC3VHMGDv683rk=s68-c-k-c0x00ffffff-no-rj", "width": 68, "height": 68 } ], "detailedMetadataSnippet": [ { "text": "Welcome to the exciting optical illusion video quiz! You will be " }, { "text": "testing", "bold": true }, { "text": " your visual perception skills by trying to decipher hidden\u00a0..." } ], "chapters": [] } }, { "kind": "youtube#searchResult", "etag": "NotImplemented", "id": { "kind": "youtube#video", "videoId": "KsFdm4aZ0xQ" }, "snippet": { "channelId": "UCNvzD7Z-g64bPXxGzaQaa4g", "title": "Test Drive Unlimited Solar Crown - Before You Buy", "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/KsFdm4aZ0xQ\/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDS2N0B4n4fnt2BZVj0uRFH00sg5w", "width": 360, "height": 202 }, { "url": "https:\/\/i.ytimg.com\/vi\/KsFdm4aZ0xQ\/hq720.jpg?sqp=-oaymwEXCNAFEJQDSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLCHEU2_WJscJSpPB5YlytzayeFnmw", "width": 720, "height": 404 } ], "channelTitle": "gameranx", "channelHandle": "@gameranxTV", "timestamp": "20 hours ago", "duration": 994, "views": 189096, "badges": [], "channelApproval": "Verified", "channelThumbnails": [ { "url": "https:\/\/yt3.ggpht.com\/ytc\/AIdro_mT3hsjvr0yyS6bW4inz3956572zV_j4t7TLsEOkK0G1VM=s68-c-k-c0x00ffffff-no-rj", "width": 68, "height": 68 } ], "detailedMetadataSnippet": [ { "text": "Test", "bold": true }, { "text": " Drive Unlimited Solar Crown marks the return of the classic racing franchise. How is it? Let's talk. Subscribe for more:\u00a0..." } ], "chapters": [] } }, { "kind": "youtube#searchResult", "etag": "NotImplemented", "id": { "kind": "youtube#video", "videoId": "vePc5V4h_kg" }, "snippet": { "channelId": "UCY1kMZp36IQSyNx_9h4mpCg", "title": "Shark Attack Test- Human Blood vs. Fish Blood", "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/vePc5V4h_kg\/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDAzN0HPEiRfceIOAHPr1AvwIiSvw", "width": 360, "height": 202 }, { "url": "https:\/\/i.ytimg.com\/vi\/vePc5V4h_kg\/hq720.jpg?sqp=-oaymwEXCNAFEJQDSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLBYEDbqoR6h3x0X_75ekfThfcq-tQ", "width": 720, "height": 404 } ], "channelTitle": "Mark Rober", "channelHandle": "@MarkRober", "timestamp": "4 years ago", "duration": 997, "views": 109665634, "badges": [ "CC" ], "channelApproval": "Verified", "channelThumbnails": [ { "url": "https:\/\/yt3.ggpht.com\/ytc\/AIdro_kwFxfJF-fQml8fUIvrd36ZstE2RO-C-IwDB-0qxQoc3Q=s68-c-k-c0x00ffffff-no-rj", "width": 68, "height": 68 } ], "detailedMetadataSnippet": [ { "text": "I personally got in the water and tested if Sharks had a preference of human blood vs. fish blood. Point of clarification: A few\u00a0..." } ], "chapters": [] } }, { "kind": "youtube#searchResult", "etag": "NotImplemented", "id": { "kind": "youtube#video", "videoId": "iVbopWyBR5Y" }, "snippet": { "channelId": "UC4rlAVgAK0SGk-yTfe48Qpw", "title": "A Color Test That Can Tell Your Mental Age", "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/iVbopWyBR5Y\/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDU9GqamIW_vLC4FFb7vxGz7_ZUHw", "width": 360, "height": 202 }, { "url": "https:\/\/i.ytimg.com\/vi\/iVbopWyBR5Y\/hq720.jpg?sqp=-oaymwEXCNAFEJQDSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLCQ9GjPbwKdwOpgqu3w88veyr_TQA", "width": 720, "height": 404 } ], "channelTitle": "BRIGHT SIDE", "channelHandle": "@BRIGHTSIDEOFFICIAL", "timestamp": "6 years ago", "duration": 457, "views": 45248237, "badges": [ "CC" ], "channelApproval": "Verified", "channelThumbnails": [ { "url": "https:\/\/yt3.ggpht.com\/QnTNTL6lvpKA-OWYdSwke3kF9GEBoriwaaHlbOOo4E7hRuXBEiO1mrYsvmk8xQznjg3GKWUT=s68-c-k-c0x00ffffff-no-rj", "width": 68, "height": 68 } ], "detailedMetadataSnippet": [ { "text": "A lot of the times your brain \u201cfeels\u201d way younger or older than you are. That's called mental age. Do you wanna know yours?" } ], "chapters": [ { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/iVbopWyBR5Y\/hqdefault.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDIgP783BfP0KUJ3WyhC2fW7UW8Uw", "width": 336, "height": 188 } ] }, { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/iVbopWyBR5Y\/hqdefault_26933.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCS5syuXq8vxIOrjn74m5UU2baEVw", "width": 336, "height": 188 } ] }, { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/iVbopWyBR5Y\/hqdefault_38866.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCDdrkYz_GN5PhbYRNOJB3hyiFqYg", "width": 336, "height": 188 } ] }, { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/iVbopWyBR5Y\/hqdefault_56000.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAnpvLQ_ehJkeUucXZlGwcR8_BRbg", "width": 336, "height": 188 } ] }, { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/iVbopWyBR5Y\/hqdefault_72900.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLC_XJBPRPjiJdVgV9fU_kBUGnZl4A", "width": 336, "height": 188 } ] }, { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/iVbopWyBR5Y\/hqdefault_111800.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLB4Y4UbfDWek4rpuulEY4F-Ud4x4w", "width": 336, "height": 188 } ] }, { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/iVbopWyBR5Y\/hqdefault_165766.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLD05zwPqf-X4i1QndHlIk2JE9jgzg", "width": 336, "height": 188 } ] }, { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/iVbopWyBR5Y\/hqdefault_179866.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBYzrOUGdSTaK789XgdaJ5xGSqLSQ", "width": 336, "height": 188 } ] }, { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/iVbopWyBR5Y\/hqdefault_228800.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLARCPGv6jTAXN3eIa2sPG8ir3di0Q", "width": 336, "height": 188 } ] }, { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/iVbopWyBR5Y\/hqdefault_235833.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBa1P4Je6X4gmTqQ5Up8yfo71Y1tw", "width": 336, "height": 188 } ] }, { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/iVbopWyBR5Y\/hqdefault_283166.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLC1BQhvyI-TAybXAQN4HFVAtaJiDg", "width": 336, "height": 188 } ] }, { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/iVbopWyBR5Y\/hqdefault_295766.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLD1YAPT-A7x2WySH2eifdRA8Is5vQ", "width": 336, "height": 188 } ] }, { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/iVbopWyBR5Y\/hqdefault_305266.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBQYE7JYkeV6Xb-FJpDjy6CDqr4qw", "width": 336, "height": 188 } ] }, { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/iVbopWyBR5Y\/hqdefault_310900.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLB_ZSN-iXHoLUWPHaBBdf45KeYrVA", "width": 336, "height": 188 } ] }, { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/iVbopWyBR5Y\/hqdefault_342733.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDbQwdBvP3AK2bryfsL9ECZNNSkOg", "width": 336, "height": 188 } ] }, { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/iVbopWyBR5Y\/hqdefault_354133.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBlrvmiiM6eeyqdwGz6j9mXGmZeuQ", "width": 336, "height": 188 } ] }, { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/iVbopWyBR5Y\/hqdefault_365333.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAxFGD_uvlHOXKND1qxxeOrUdStIg", "width": 336, "height": 188 } ] }, { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/iVbopWyBR5Y\/hqdefault_396033.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDfSYtW5b3MuTRvunx5VnGBgJIX6Q", "width": 336, "height": 188 } ] }, { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/iVbopWyBR5Y\/hqdefault_413000.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCjRueYkPixvNkg-2SD1Ra3ffp0tg", "width": 336, "height": 188 } ] } ] } }, { "kind": "youtube#searchResult", "etag": "NotImplemented", "id": { "kind": "youtube#video", "videoId": "wMzIHuWh_I0" }, "snippet": { "channelId": "UCXAhoI7XO2kafTMjocm0jCg", "title": "Seekae - Test & Recognise (Flume Re-Work)", "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/wMzIHuWh_I0\/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLD1W3eeUaqM-zkWSm0hhxvnBk0a0g", "width": 360, "height": 202 }, { "url": "https:\/\/i.ytimg.com\/vi\/wMzIHuWh_I0\/hq720.jpg?sqp=-oaymwEXCNAFEJQDSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLAL8LSlYqLAHZfoNEa5Q9Kbz0pP-Q", "width": 720, "height": 404 } ], "channelTitle": "Flume", "channelHandle": null, "timestamp": "10 years ago", "duration": 304, "views": 39320295, "badges": [], "channelApproval": "Official Artist Channel", "channelThumbnails": [ { "url": "https:\/\/yt3.ggpht.com\/l2_vEYN8STsN4tEWUaOmyiyJ8fUZCPj0GYB84hLuiApSTczXCU7kMuCFEeIjMPqcUjzKWLyF=s88-c-k-c0x00ffffff-no-rj", "width": 68, "height": 68 } ], "detailedMetadataSnippet": [ { "text": "Seekae - " }, { "text": "Test", "bold": true }, { "text": " & Recognise - Flume Edit Subscribe to the Flume YouTube channel for more music & videos: http:\/\/flu.me\/YouTube\u00a0..." } ], "chapters": [] } }, { "kind": "youtube#searchResult", "etag": "NotImplemented", "id": { "kind": "youtube#video", "videoId": "NS0xBDFvUHs" }, "snippet": { "channelId": "UCvYhgH0hXziSz9IyPztzUug", "title": "Eva and Friends Exam Test at School", "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/NS0xBDFvUHs\/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBbJxP9D0ssTbbPIFvfPA2r1QAc-A", "width": 360, "height": 202 }, { "url": "https:\/\/i.ytimg.com\/vi\/NS0xBDFvUHs\/hq720.jpg?sqp=-oaymwEXCNAFEJQDSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLAyZb_0rUPDz4oC-WDh1PtM6k3u0w", "width": 720, "height": 404 } ], "channelTitle": "Eva Bravo Play", "channelHandle": "@EvaBravoPlay", "timestamp": "3 months ago", "duration": 2107, "views": 13442020, "badges": [ "4K" ], "channelApproval": "Verified", "channelThumbnails": [ { "url": "https:\/\/yt3.ggpht.com\/ytc\/AIdro_n_x2t1hs44jgaYhSikVwc0_QLRZVRYrXZ6PCwfQeJdKok=s68-c-k-c0x00ffffff-no-rj", "width": 68, "height": 68 } ], "detailedMetadataSnippet": [ { "text": "Eva and Friends try to pass the Exam " }, { "text": "Test", "bold": true }, { "text": " at school and other funny school adventures for kids 00:00 Eva and Friends Exam " }, { "text": "Test", "bold": true }, { "text": "\u00a0..." } ], "chapters": [ { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/NS0xBDFvUHs\/hqdefault_1866.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBWGUb6STyiPhIWRPNweeL0awlYig", "width": 336, "height": 188 } ] }, { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/NS0xBDFvUHs\/hqdefault_529966.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLC_dkVEfY9ttqBa4dko5OfJUdZGcA", "width": 336, "height": 188 } ] }, { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/NS0xBDFvUHs\/hqdefault_1293866.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAerRxuCvfLswSR0gmxPV-TqFlpOA", "width": 336, "height": 188 } ] }, { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/NS0xBDFvUHs\/hqdefault_1804866.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDxb6wvdMcWFebof_frobrwYHo-aw", "width": 336, "height": 188 } ] } ] } }, { "kind": "youtube#searchResult", "etag": "NotImplemented", "id": { "kind": "youtube#video", "videoId": "uhiBAQmkdb0" }, "snippet": { "channelId": "UC0ytBCDB-F7hxfEHmfgSY0A", "title": "IQ Test For Genius Only - How Smart Are You ?", "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/uhiBAQmkdb0\/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDDhUDnmNSxvjeBbwqNBdZ_Z44l5Q", "width": 360, "height": 202 }, { "url": "https:\/\/i.ytimg.com\/vi\/uhiBAQmkdb0\/hq720.jpg?sqp=-oaymwEXCNAFEJQDSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLAJr_mTdypt1JIcz9ZldXlx3IYqXA", "width": 720, "height": 404 } ], "channelTitle": "Genius Test", "channelHandle": "@GeniusTests", "timestamp": "5 years ago", "duration": 388, "views": 10045453, "badges": [], "channelApproval": null, "channelThumbnails": [ { "url": "https:\/\/yt3.ggpht.com\/GG1vWZ2jrcNyHZhGS4LY76L9TQpMLZxSRnIsDX44CRVvm0UarZJZ-e2Mj8C_v8BaFz6r10-bYw=s68-c-k-c0x00ffffff-no-rj", "width": 68, "height": 68 } ], "detailedMetadataSnippet": [ { "text": "Quick IQ " }, { "text": "TEST", "bold": true }, { "text": " - Are you a Genius ? IQ " }, { "text": "Test", "bold": true }, { "text": " For Genius Only - How Smart Are You ? By Genius " }, { "text": "Test", "bold": true }, { "text": "." } ], "chapters": [] } }, { "kind": "youtube#searchResult", "etag": "NotImplemented", "id": { "kind": "youtube#video", "videoId": "045gB0iZ8GA" }, "snippet": { "channelId": "UCs-vWZu3t2ky3oImX83S_2Q", "title": "2024 RAM vs CHEVY vs FORD TORTURE TEST! Heavy towing, dirt roads - SHOCK WINNER & major problems", "thumbnails": [ { "url": "https:\/\/i9.ytimg.com\/vi\/045gB0iZ8GA\/hq720_custom_1.jpg?sqp=COCci7cG-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDUsQPLfmuR5LuoCU2eKp4FodSSZA", "width": 360, "height": 202 }, { "url": "https:\/\/i9.ytimg.com\/vi\/045gB0iZ8GA\/hq720_custom_1.jpg?sqp=COCci7cG-oaymwEXCNAFEJQDSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLAkq2G6atS5hjWAnPINTRgy8CeBBw", "width": 720, "height": 404 } ], "channelTitle": "4WD 24-7", "channelHandle": "@4WD247", "timestamp": "4 hours ago", "duration": 3040, "views": 37849, "badges": [ "4K" ], "channelApproval": "Verified", "channelThumbnails": [ { "url": "https:\/\/yt3.ggpht.com\/ytc\/AIdro_lTLgvhtKVX0nbKfz9w6m0PAZJ9MQPJTOKb7rL7FcM2ph0=s68-c-k-c0x00ffffff-no-rj", "width": 68, "height": 68 } ], "detailedMetadataSnippet": [ { "text": "For the FIRST time, we are " }, { "text": "testing", "bold": true }, { "text": " all of the American rigs you commonly see on our Aussie roads! Models we're " }, { "text": "testing", "bold": true }, { "text": "\u00a0..." } ], "chapters": [] } }, { "kind": "youtube#searchResult", "etag": "NotImplemented", "id": { "kind": "youtube#video", "videoId": "FsvJzfXZI18" }, "snippet": { "channelId": "UCTrSsPMmZavLbc3Ex7VhjDg", "title": "Testing The Assassination Attempt of Donald Trump", "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/FsvJzfXZI18\/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAf28Zv91NBxtKWgSLbL5Kr0MFIKQ", "width": 360, "height": 202 }, { "url": "https:\/\/i.ytimg.com\/vi\/FsvJzfXZI18\/hq720.jpg?sqp=-oaymwEXCNAFEJQDSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLDD01Nvn-F6Wk2M0o1vKHb-UkrfKw", "width": 720, "height": 404 } ], "channelTitle": "Brandon Herrera", "channelHandle": "@BrandonHerrera", "timestamp": "1 month ago", "duration": 1003, "views": 7756137, "badges": [ "4K" ], "channelApproval": "Verified", "channelThumbnails": [ { "url": "https:\/\/yt3.ggpht.com\/ytc\/AIdro_lKTZ9o7UIG4sgEI_ud4wLnASHNVT16xw0ldQ8FGfdpE1w=s68-c-k-c0x00ffffff-no-rj", "width": 68, "height": 68 } ], "detailedMetadataSnippet": [ { "text": "Today we use ballistic data and high speed imagery to put to be some of the myths and conspiracy theories around the attempted\u00a0..." } ], "chapters": [] } }, { "kind": "youtube#searchResult", "etag": "NotImplemented", "id": { "kind": "youtube#video", "videoId": "5cysPPnZEhM" }, "snippet": { "channelId": "UCoUXxtd712vGe5p5lBk_eMg", "title": "The Smile Test", "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/5cysPPnZEhM\/hqdefault.jpg?sqp=-oaymwEjCOADEI4CSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBdhxvdlpDAxk5Jk0raZMzHuMWgQg", "width": 480, "height": 270 } ], "channelTitle": "In59seconds", "channelHandle": "@In59seconds", "timestamp": "10 years ago", "duration": 59, "views": 21084609, "badges": [ "CC" ], "channelApproval": "Verified", "channelThumbnails": [ { "url": "https:\/\/yt3.ggpht.com\/ytc\/AIdro_k6v6o3Lz0Ypp-bdHwJSBhugY1iW5mJQklD7lYMmGosNA=s68-c-k-c0x00ffffff-no-rj", "width": 68, "height": 68 } ], "detailedMetadataSnippet": [ { "text": "The presenter and producers not responsible for any adverse effects resulting from the use of the information presented in this\u00a0..." } ], "chapters": [] } }, { "kind": "youtube#searchResult", "etag": "NotImplemented", "id": { "kind": "youtube#video", "videoId": "GzSz5FBZQe0" }, "snippet": { "channelId": "UCgrNz-aDmcr2uuto8_DL2jg", "title": "New progress made in China's reusable rocket test", "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/GzSz5FBZQe0\/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAp9aMISYzmH2STvdivVSAUaA8XFw", "width": 360, "height": 202 }, { "url": "https:\/\/i.ytimg.com\/vi\/GzSz5FBZQe0\/hq720.jpg?sqp=-oaymwEXCNAFEJQDSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLAI9pYX5Nv7sOrYx3KV4rUQPpdC4A", "width": 720, "height": 404 } ], "channelTitle": "CGTN", "channelHandle": "@cgtn", "timestamp": "6 hours ago", "duration": 144, "views": 2629, "badges": [], "channelApproval": null, "channelThumbnails": [ { "url": "https:\/\/yt3.ggpht.com\/5a5D_Wc4hjQ_u5F3r0WWaaA9VB5Ml-SdPKLSwSoIHkHb1F--SexiM4eFfCHeXtAOr5akpEEWBwI=s68-c-k-c0x00ffffff-no-rj", "width": 68, "height": 68 } ], "detailedMetadataSnippet": [ { "text": "For more: https:\/\/news.cgtn.com\/news\/2024-09-12\/New-progress-made-in-China-s-reusable-rocket-" }, { "text": "test", "bold": true }, { "text": "-1wPAvudz7mo\/p.html\u00a0..." } ], "chapters": [] } }, { "kind": "youtube#searchResult", "etag": "NotImplemented", "id": { "kind": "youtube#video", "videoId": "PK_EJ3DyiiA" }, "snippet": { "channelId": "UCdqp0KK_Io7TwK5cJMBvB0Q", "title": "WhistlinDiesel Cybertruck Durability Test #1", "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/PK_EJ3DyiiA\/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAWAIeGGgaNjWIRF2rcQ-3yYMcGDg", "width": 360, "height": 202 }, { "url": "https:\/\/i.ytimg.com\/vi\/PK_EJ3DyiiA\/hq720.jpg?sqp=-oaymwEXCNAFEJQDSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLCJdw9CU5ncA5Q1FMrkdGhL9CUYnQ", "width": 720, "height": 404 } ], "channelTitle": "WhistlinDiesel", "channelHandle": "@whistlindiesel", "timestamp": "1 month ago", "duration": 1315, "views": 23502459, "badges": [ "4K" ], "channelApproval": "Verified", "channelThumbnails": [ { "url": "https:\/\/yt3.ggpht.com\/SsmCSeJP63Ni-BIDQSWrkFgn6BVOenI1gdkGRUywXuenaFi8SzRwoD4MY5MFuZRbJjhjU95k3EI=s68-c-k-c0x00ffffff-no-rj", "width": 68, "height": 68 } ], "detailedMetadataSnippet": [ { "text": "Welcome to the place that's going to tell you everything you ACTUALLY need to know about the Cybertruck This " }, { "text": "test", "bold": true }, { "text": " is at my\u00a0..." } ], "chapters": [] } }, { "kind": "youtube#searchResult", "etag": "NotImplemented", "id": { "kind": "youtube#video", "videoId": "2a4Uxdy9TQY" }, "snippet": { "channelId": "UCroqujvAIVKTBvJbE2E9cCA", "title": "Idiot Test - 90% fail", "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/2a4Uxdy9TQY\/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAYMZ_0CL0SqORWoFRa1OHj_-_nfA", "width": 360, "height": 202 }, { "url": "https:\/\/i.ytimg.com\/vi\/2a4Uxdy9TQY\/hq720.jpg?sqp=-oaymwEXCNAFEJQDSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLC6h7un-jSO3TGmLF28Hdo2NOIrSQ", "width": 720, "height": 404 } ], "channelTitle": "BrainLift", "channelHandle": "@BrainLiftQuiz", "timestamp": "9 years ago", "duration": 156, "views": 21220159, "badges": [], "channelApproval": "Verified", "channelThumbnails": [ { "url": "https:\/\/yt3.ggpht.com\/EeSPiltTxVCXx7u7VS0TAszVA1Ovhi90L2u61xzDT0bzDxvkYufWnfr0tg5StMT2JvQezVX1=s68-c-k-c0x00ffffff-no-rj", "width": 68, "height": 68 } ], "detailedMetadataSnippet": [ { "text": "This video will " }, { "text": "test", "bold": true }, { "text": " your idiot nature by asking you some questions - are you prone to being carried away by irrelevant information\u00a0..." } ], "chapters": [ { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/2a4Uxdy9TQY\/hqdefault_2000.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAGlr1ph6H3XclGVKZkge-9iYikOQ", "width": 336, "height": 188 } ] }, { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/2a4Uxdy9TQY\/hqdefault_33866.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLD6wMiPmDERdoYvNHQeXFoyv6rErw", "width": 336, "height": 188 } ] }, { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/2a4Uxdy9TQY\/hqdefault_66933.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDf3KC11eOKy9lpvV8esp84VVzESg", "width": 336, "height": 188 } ] }, { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/2a4Uxdy9TQY\/hqdefault_87866.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAAEu3z9Ew_4-IUl7MnQOhbxuHaOg", "width": 336, "height": 188 } ] }, { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/2a4Uxdy9TQY\/hqdefault_99966.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCezDXyTtRlzUUErY3j6oJ4eI0NFw", "width": 336, "height": 188 } ] }, { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/2a4Uxdy9TQY\/hqdefault_115000.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDhtSfxFlzPVcyBlultYviTMQ9FfA", "width": 336, "height": 188 } ] }, { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/2a4Uxdy9TQY\/hqdefault_121000.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLD03XagFPgWaHIkemBTwesbdaCSWA", "width": 336, "height": 188 } ] }, { "title": null, "time": 0, "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/2a4Uxdy9TQY\/hqdefault_151900.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLD_l1D0hYVOXyFdA1ja1y_i4_kTHA", "width": 336, "height": 188 } ] } ] } }, { "kind": "youtube#searchResult", "etag": "NotImplemented", "id": { "kind": "youtube#video", "videoId": "qQFkur0FGWg" }, "snippet": { "channelId": "UC_wITz-Ze4JFc3WLQA1n3Hw", "title": "Good sister helps Ruby with her test", "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/qQFkur0FGWg\/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDMM2j6VMJfLa_1Vp7SzGgWxxA4EA", "width": 360, "height": 202 }, { "url": "https:\/\/i.ytimg.com\/vi\/qQFkur0FGWg\/hq720.jpg?sqp=-oaymwEXCNAFEJQDSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLA1VNaCxxzWxJOACU5kk3PhfYlSrA", "width": 720, "height": 404 } ], "channelTitle": "RubyandBonnie", "channelHandle": "@RubyandBonnie", "timestamp": "2 years ago", "duration": 323, "views": 21433651, "badges": [], "channelApproval": "Verified", "channelThumbnails": [ { "url": "https:\/\/yt3.ggpht.com\/ytc\/AIdro_kBOIz4qWK_tTtUiWyOHqnvdfY5cCHYOCZAHegzcqVjbTM=s68-c-k-c0x00ffffff-no-rj", "width": 68, "height": 68 } ], "detailedMetadataSnippet": [ { "text": "Ruby and Bonnie are in a " }, { "text": "test", "bold": true }, { "text": " for school but Ruby did not study or revise. Bonnie decides to help Ruby with Maths after Ruby fails\u00a0..." } ], "chapters": [] } }, { "kind": "youtube#searchResult", "etag": "NotImplemented", "id": { "kind": "youtube#video", "videoId": "o-Ux0UsyYkc" }, "snippet": { "channelId": "UCjnUIDJYhB5wtvRIZ4bKSLg", "title": "\ud83e\udde0 Test Your Genius Level IQ with These Mind Blowing General Knowledge Questions! \ud83c\udf1f", "thumbnails": [ { "url": "https:\/\/i.ytimg.com\/vi\/o-Ux0UsyYkc\/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBJaryecjpO-2dFkbI8sl23dUke-Q", "width": 360, "height": 202 }, { "url": "https:\/\/i.ytimg.com\/vi\/o-Ux0UsyYkc\/hq720.jpg?sqp=-oaymwEXCNAFEJQDSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLCPZ7lXmXEc2wNu6Vm9PO8caNB75Q", "width": 720, "height": 404 } ], "channelTitle": "Puzzlonic", "channelHandle": "@Puzzlonic", "timestamp": "4 months ago", "duration": 752, "views": 1545078, "badges": [], "channelApproval": null, "channelThumbnails": [ { "url": "https:\/\/yt3.ggpht.com\/2Dmd5hCkfr7pTYgXqWROX02cgsEU7_kW7-lyJN4nEh1dyZnvOdE3J1-J76bIT4HOanl6T3pR=s68-c-k-c0x00ffffff-no-rj", "width": 68, "height": 68 } ], "detailedMetadataSnippet": [ { "text": "iqleval #generalknowledge #" }, { "text": "test", "bold": true }, { "text": " #braingames Assalam u Alaikum ! Welcome to the ultimate IQ challenge! Are you ready to put\u00a0..." } ], "chapters": [] } } ] } ```works fine.
Also pay attention to private instances.