user-scanner 1.0.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- user_scanner-1.0.0.0/LICENSE +21 -0
- user_scanner-1.0.0.0/PKG-INFO +14 -0
- user_scanner-1.0.0.0/README.md +1 -0
- user_scanner-1.0.0.0/pyproject.toml +26 -0
- user_scanner-1.0.0.0/user_scanner/__init__.py +0 -0
- user_scanner-1.0.0.0/user_scanner/__main__.py +18 -0
- user_scanner-1.0.0.0/user_scanner/community/__init__.py +0 -0
- user_scanner-1.0.0.0/user_scanner/core/__init__.py +0 -0
- user_scanner-1.0.0.0/user_scanner/core/orchestrator.py +62 -0
- user_scanner-1.0.0.0/user_scanner/creator/__init__.py +0 -0
- user_scanner-1.0.0.0/user_scanner/creator/devto.py +37 -0
- user_scanner-1.0.0.0/user_scanner/creator/hashnode.py +54 -0
- user_scanner-1.0.0.0/user_scanner/creator/kaggle.py +41 -0
- user_scanner-1.0.0.0/user_scanner/creator/medium.py +41 -0
- user_scanner-1.0.0.0/user_scanner/dev/__init__.py +1 -0
- user_scanner-1.0.0.0/user_scanner/dev/codeberg.py +37 -0
- user_scanner-1.0.0.0/user_scanner/dev/cratesio.py +39 -0
- user_scanner-1.0.0.0/user_scanner/dev/dockerhub.py +40 -0
- user_scanner-1.0.0.0/user_scanner/dev/github.py +46 -0
- user_scanner-1.0.0.0/user_scanner/dev/gitlab.py +51 -0
- user_scanner-1.0.0.0/user_scanner/dev/launchpad.py +39 -0
- user_scanner-1.0.0.0/user_scanner/dev/npmjs.py +40 -0
- user_scanner-1.0.0.0/user_scanner/dev/replit.py +37 -0
- user_scanner-1.0.0.0/user_scanner/social/__init__.py +1 -0
- user_scanner-1.0.0.0/user_scanner/social/instagram.py +48 -0
- user_scanner-1.0.0.0/user_scanner/social/pinterest.py +48 -0
- user_scanner-1.0.0.0/user_scanner/social/reddit.py +48 -0
- user_scanner-1.0.0.0/user_scanner/social/snapchat.py +54 -0
- user_scanner-1.0.0.0/user_scanner/social/threads.py +48 -0
- user_scanner-1.0.0.0/user_scanner/social/x.py +56 -0
- user_scanner-1.0.0.0/user_scanner/social/youtube.py +62 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Kaif
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: user-scanner
|
|
3
|
+
Version: 1.0.0.0
|
|
4
|
+
Summary: Check username availability across multiple popular platforms
|
|
5
|
+
Keywords: username,checker,availability,social,tech,python,user-scanner
|
|
6
|
+
Author-email: Kaif <kafcodec@gmail.com>
|
|
7
|
+
Requires-Python: >=3.7
|
|
8
|
+
Description-Content-Type: text/markdown
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Requires-Dist: httpx
|
|
11
|
+
Requires-Dist: colorama
|
|
12
|
+
Project-URL: Homepage, https://github.com/kaifcodec/user-scanner
|
|
13
|
+
|
|
14
|
+
# user-scanner
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# user-scanner
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["flit_core >=3.2,<4"]
|
|
3
|
+
build-backend = "flit_core.buildapi"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "user-scanner"
|
|
7
|
+
version = "1.0.0.0"
|
|
8
|
+
description = "Check username availability across multiple popular platforms"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
license = {file = "LICENSE"}
|
|
11
|
+
authors = [
|
|
12
|
+
{name = "Kaif", email = "kafcodec@gmail.com"}
|
|
13
|
+
]
|
|
14
|
+
dependencies = [
|
|
15
|
+
"httpx",
|
|
16
|
+
"colorama"
|
|
17
|
+
]
|
|
18
|
+
|
|
19
|
+
requires-python = ">=3.7"
|
|
20
|
+
keywords = ["username", "checker", "availability", "social", "tech", "python", "user-scanner"]
|
|
21
|
+
|
|
22
|
+
[project.urls]
|
|
23
|
+
Homepage = "https://github.com/kaifcodec/user-scanner"
|
|
24
|
+
|
|
25
|
+
[project.scripts]
|
|
26
|
+
user-scanner = "user_scanner.__main__:main"
|
|
File without changes
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import argparse
|
|
2
|
+
from user_scanner.core.orchestrator import run_checks
|
|
3
|
+
|
|
4
|
+
def main():
|
|
5
|
+
parser = argparse.ArgumentParser(
|
|
6
|
+
prog="user-scanner",
|
|
7
|
+
description="Scan a username across dev, social, creator, and community platforms."
|
|
8
|
+
)
|
|
9
|
+
parser.add_argument(
|
|
10
|
+
"-u", "--username",
|
|
11
|
+
required=True,
|
|
12
|
+
help="Username to scan across all supported platforms."
|
|
13
|
+
)
|
|
14
|
+
args = parser.parse_args()
|
|
15
|
+
run_checks(args.username)
|
|
16
|
+
|
|
17
|
+
if __name__ == "__main__":
|
|
18
|
+
main()
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import importlib
|
|
2
|
+
import pkgutil
|
|
3
|
+
from colorama import Fore, Style
|
|
4
|
+
|
|
5
|
+
def load_modules(package):
|
|
6
|
+
|
|
7
|
+
modules = []
|
|
8
|
+
for _, name, _ in pkgutil.iter_modules(package.__path__, package.__name__ + "."):
|
|
9
|
+
try:
|
|
10
|
+
module = importlib.import_module(name)
|
|
11
|
+
modules.append(module)
|
|
12
|
+
except Exception as e:
|
|
13
|
+
print(f"Failed to import {name}: {e}")
|
|
14
|
+
return modules
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def run_checks(username):
|
|
18
|
+
|
|
19
|
+
from user_scanner import dev, social,creator, community
|
|
20
|
+
|
|
21
|
+
categories = [
|
|
22
|
+
("DEV", dev),
|
|
23
|
+
("SOCIAL", social),
|
|
24
|
+
("CREATOR", creator),
|
|
25
|
+
("COMMUNITY", community)
|
|
26
|
+
]
|
|
27
|
+
|
|
28
|
+
print(f"\n{Fore.CYAN} Checking username: {username}{Style.RESET_ALL}\n")
|
|
29
|
+
|
|
30
|
+
for cat_name, package in categories:
|
|
31
|
+
try:
|
|
32
|
+
modules = load_modules(package)
|
|
33
|
+
except ModuleNotFoundError:
|
|
34
|
+
continue
|
|
35
|
+
|
|
36
|
+
print(f"{Fore.MAGENTA}== {cat_name} SITES =={Style.RESET_ALL}")
|
|
37
|
+
|
|
38
|
+
for module in modules:
|
|
39
|
+
# Find the first function starting with "validate_"
|
|
40
|
+
func = None
|
|
41
|
+
for f in dir(module):
|
|
42
|
+
if f.startswith("validate_") and callable(getattr(module, f)):
|
|
43
|
+
func = getattr(module, f)
|
|
44
|
+
break
|
|
45
|
+
if not func:
|
|
46
|
+
continue
|
|
47
|
+
|
|
48
|
+
site_name = module.__name__.split('.')[-1].capitalize()
|
|
49
|
+
if site_name == "X":
|
|
50
|
+
site_name = "X (Twitter)"
|
|
51
|
+
try:
|
|
52
|
+
result = func(username)
|
|
53
|
+
if result == 1:
|
|
54
|
+
print(f" {Fore.GREEN}[✔] {site_name}: Available{Style.RESET_ALL}")
|
|
55
|
+
elif result == 0:
|
|
56
|
+
print(f" {Fore.RED}[✘] {site_name}: Taken{Style.RESET_ALL}")
|
|
57
|
+
else:
|
|
58
|
+
print(f" {Fore.YELLOW}[!] {site_name}: Error{Style.RESET_ALL}")
|
|
59
|
+
except Exception as e:
|
|
60
|
+
print(f" {Fore.YELLOW}[!] {site_name}: Exception - {e}{Style.RESET_ALL}")
|
|
61
|
+
|
|
62
|
+
print()
|
|
File without changes
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import httpx
|
|
2
|
+
from httpx import ConnectError, TimeoutException
|
|
3
|
+
|
|
4
|
+
def validate_devto(user):
|
|
5
|
+
url = f"https://dev.to/{user}"
|
|
6
|
+
|
|
7
|
+
headers = {
|
|
8
|
+
'User-Agent': "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36",
|
|
9
|
+
'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
try:
|
|
13
|
+
response = httpx.head(url, headers=headers, timeout=3.0, follow_redirects=True)
|
|
14
|
+
status = response.status_code
|
|
15
|
+
|
|
16
|
+
if status == 200:
|
|
17
|
+
return 0
|
|
18
|
+
elif status == 404:
|
|
19
|
+
return 1
|
|
20
|
+
else:
|
|
21
|
+
return 2
|
|
22
|
+
|
|
23
|
+
except (ConnectError, TimeoutException):
|
|
24
|
+
return 2
|
|
25
|
+
except Exception:
|
|
26
|
+
return 2
|
|
27
|
+
|
|
28
|
+
if __name__ == "__main__":
|
|
29
|
+
user = input ("Username?: ").strip()
|
|
30
|
+
result = validate_devto(user)
|
|
31
|
+
|
|
32
|
+
if result == 1:
|
|
33
|
+
print("Available!")
|
|
34
|
+
elif result == 0:
|
|
35
|
+
print("Unavailable!")
|
|
36
|
+
else:
|
|
37
|
+
print("Error occurred!")
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import httpx
|
|
2
|
+
import json
|
|
3
|
+
from httpx import ConnectError, TimeoutException
|
|
4
|
+
|
|
5
|
+
def validate_hashnode(user):
|
|
6
|
+
url = "https://hashnode.com/utility/ajax/check-username"
|
|
7
|
+
|
|
8
|
+
payload = {
|
|
9
|
+
"username": user,
|
|
10
|
+
"name": "Dummy Dummy"
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
headers = {
|
|
14
|
+
'User-Agent': "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Mobile Safari/537.36",
|
|
15
|
+
'Accept': "application/json",
|
|
16
|
+
'Content-Type': "application/json",
|
|
17
|
+
'Origin': "https://hashnode.com",
|
|
18
|
+
'Referer': "https://hashnode.com/signup",
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
try:
|
|
22
|
+
response = httpx.post(url, json=payload, headers=headers, timeout=3.0)
|
|
23
|
+
|
|
24
|
+
if response.status_code == 200:
|
|
25
|
+
data = response.json()
|
|
26
|
+
|
|
27
|
+
if 'status' in data:
|
|
28
|
+
if data['status'] == 1:
|
|
29
|
+
return 1
|
|
30
|
+
elif data['status'] == 0:
|
|
31
|
+
return 0
|
|
32
|
+
|
|
33
|
+
return 2
|
|
34
|
+
|
|
35
|
+
else:
|
|
36
|
+
return 2
|
|
37
|
+
|
|
38
|
+
except (ConnectError, TimeoutException):
|
|
39
|
+
return 2
|
|
40
|
+
except json.JSONDecodeError:
|
|
41
|
+
return 2
|
|
42
|
+
except Exception:
|
|
43
|
+
return 2
|
|
44
|
+
|
|
45
|
+
if __name__ == "__main__":
|
|
46
|
+
user = input ("Username?: ").strip()
|
|
47
|
+
result = validate_hashnode(user)
|
|
48
|
+
|
|
49
|
+
if result == 1:
|
|
50
|
+
print("Available!")
|
|
51
|
+
elif result == 0:
|
|
52
|
+
print("Unavailable!")
|
|
53
|
+
else:
|
|
54
|
+
print("Error occurred!")
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import httpx
|
|
2
|
+
from httpx import ConnectError, TimeoutException
|
|
3
|
+
|
|
4
|
+
def validate_kaggle(user):
|
|
5
|
+
url = f"https://www.kaggle.com/{user}"
|
|
6
|
+
|
|
7
|
+
headers = {
|
|
8
|
+
'User-Agent': "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Mobile Safari/537.36",
|
|
9
|
+
'Accept': "text/html",
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
try:
|
|
13
|
+
# Use GET request for maximum fidelity, though we only check status code
|
|
14
|
+
response = httpx.get(url, headers=headers, timeout=3.0, follow_redirects=True)
|
|
15
|
+
status = response.status_code
|
|
16
|
+
|
|
17
|
+
# If a profile exists (Taken) -> 200 OK
|
|
18
|
+
if status == 200:
|
|
19
|
+
return 0
|
|
20
|
+
# If no profile exists (Available) -> 404 Not Found
|
|
21
|
+
elif status == 404:
|
|
22
|
+
return 1
|
|
23
|
+
# Other status codes are errors
|
|
24
|
+
else:
|
|
25
|
+
return 2
|
|
26
|
+
|
|
27
|
+
except (ConnectError, TimeoutException):
|
|
28
|
+
return 2
|
|
29
|
+
except Exception:
|
|
30
|
+
return 2
|
|
31
|
+
|
|
32
|
+
if __name__ == "__main__":
|
|
33
|
+
user = input ("Username?: ").strip()
|
|
34
|
+
result = validate_kaggle(user)
|
|
35
|
+
|
|
36
|
+
if result == 1:
|
|
37
|
+
print("Available!")
|
|
38
|
+
elif result == 0:
|
|
39
|
+
print("Unavailable!")
|
|
40
|
+
else:
|
|
41
|
+
print("Error occurred!")
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import httpx
|
|
2
|
+
from httpx import ConnectError, TimeoutException
|
|
3
|
+
|
|
4
|
+
def validate_medium(user):
|
|
5
|
+
url = f"https://medium.com/@{user}"
|
|
6
|
+
|
|
7
|
+
headers = {
|
|
8
|
+
'User-Agent': "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36",
|
|
9
|
+
'Accept': "text/html",
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
try:
|
|
13
|
+
response = httpx.get(url, headers=headers, timeout=3.0)
|
|
14
|
+
|
|
15
|
+
if response.status_code == 200:
|
|
16
|
+
html_text = response.text
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
username_tag = f'property="profile:username" content="{user}"'
|
|
20
|
+
|
|
21
|
+
if username_tag in html_text:
|
|
22
|
+
return 0
|
|
23
|
+
else:
|
|
24
|
+
return 1
|
|
25
|
+
return 2
|
|
26
|
+
|
|
27
|
+
except (ConnectError, TimeoutException):
|
|
28
|
+
return 2
|
|
29
|
+
except Exception:
|
|
30
|
+
return 2
|
|
31
|
+
|
|
32
|
+
if __name__ == "__main__":
|
|
33
|
+
user = input ("Username?: ").strip()
|
|
34
|
+
result = validate_medium(user)
|
|
35
|
+
|
|
36
|
+
if result == 1:
|
|
37
|
+
print("Available!")
|
|
38
|
+
elif result == 0:
|
|
39
|
+
print("Unavailable!")
|
|
40
|
+
else:
|
|
41
|
+
print("Error occurred!")
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# tech
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import httpx
|
|
2
|
+
from httpx import ConnectError, TimeoutException
|
|
3
|
+
|
|
4
|
+
def validate_codeberg(user):
|
|
5
|
+
url = f"https://codeberg.org/{user}"
|
|
6
|
+
|
|
7
|
+
headers = {
|
|
8
|
+
'User-Agent': "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Mobile Safari/537.36",
|
|
9
|
+
'Accept': "text/html",
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
try:
|
|
13
|
+
response = httpx.head(url, headers=headers, timeout=3.0, follow_redirects=True)
|
|
14
|
+
status = response.status_code
|
|
15
|
+
|
|
16
|
+
if status == 200:
|
|
17
|
+
return 0
|
|
18
|
+
elif status == 404:
|
|
19
|
+
return 1
|
|
20
|
+
else:
|
|
21
|
+
return 2
|
|
22
|
+
|
|
23
|
+
except (ConnectError, TimeoutException):
|
|
24
|
+
return 2
|
|
25
|
+
except Exception:
|
|
26
|
+
return 2
|
|
27
|
+
|
|
28
|
+
if __name__ == "__main__":
|
|
29
|
+
user = input ("Username?: ").strip()
|
|
30
|
+
result = validate_codeberg(user)
|
|
31
|
+
|
|
32
|
+
if result == 1:
|
|
33
|
+
print("Available!")
|
|
34
|
+
elif result == 0:
|
|
35
|
+
print("Unavailable!")
|
|
36
|
+
else:
|
|
37
|
+
print("Error occurred!")
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import httpx
|
|
2
|
+
from httpx import ConnectError, TimeoutException
|
|
3
|
+
|
|
4
|
+
def validate_cratesio(user):
|
|
5
|
+
url = f"https://crates.io/api/v1/users/{user}"
|
|
6
|
+
|
|
7
|
+
headers = {
|
|
8
|
+
'User-Agent': "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Mobile Safari/537.36",
|
|
9
|
+
'Accept': "application/json",
|
|
10
|
+
'Referer': "https://crates.io/",
|
|
11
|
+
'sec-fetch-mode': "cors",
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
try:
|
|
15
|
+
response = httpx.head(url, headers=headers, timeout=5.0)
|
|
16
|
+
status = response.status_code
|
|
17
|
+
|
|
18
|
+
if status == 200:
|
|
19
|
+
return 0
|
|
20
|
+
elif status == 404:
|
|
21
|
+
return 1
|
|
22
|
+
else:
|
|
23
|
+
return 2
|
|
24
|
+
|
|
25
|
+
except (ConnectError, TimeoutException):
|
|
26
|
+
return 2
|
|
27
|
+
except Exception:
|
|
28
|
+
return 2
|
|
29
|
+
|
|
30
|
+
if __name__ == "__main__":
|
|
31
|
+
user = input ("Username?: ").strip()
|
|
32
|
+
result = validate_cratesio(user)
|
|
33
|
+
|
|
34
|
+
if result == 1:
|
|
35
|
+
print("Available!")
|
|
36
|
+
elif result == 0:
|
|
37
|
+
print("Unavailable!")
|
|
38
|
+
else:
|
|
39
|
+
print("Error occurred!")
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import httpx
|
|
2
|
+
from httpx import ConnectError, TimeoutException
|
|
3
|
+
|
|
4
|
+
def validate_dockerhub(user):
|
|
5
|
+
url = f"https://hub.docker.com/v2/users/{user}/"
|
|
6
|
+
|
|
7
|
+
headers = {
|
|
8
|
+
'User-Agent': "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36",
|
|
9
|
+
'Accept': "application/json",
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
try:
|
|
13
|
+
response = httpx.get(url, headers=headers, timeout=3.0)
|
|
14
|
+
status = response.status_code
|
|
15
|
+
|
|
16
|
+
# UNAVAILABLE (return 0) if the user API endpoint returns 200 OK
|
|
17
|
+
if status == 200:
|
|
18
|
+
return 0
|
|
19
|
+
# AVAILABLE (return 1) if the user API endpoint returns 404 Not Found
|
|
20
|
+
elif status == 404:
|
|
21
|
+
return 1
|
|
22
|
+
# Other status codes are errors
|
|
23
|
+
else:
|
|
24
|
+
return 2
|
|
25
|
+
|
|
26
|
+
except (ConnectError, TimeoutException):
|
|
27
|
+
return 2
|
|
28
|
+
except Exception:
|
|
29
|
+
return 2
|
|
30
|
+
|
|
31
|
+
if __name__ == "__main__":
|
|
32
|
+
user = input ("Username?: ").strip()
|
|
33
|
+
result = validate_dockerhub(user)
|
|
34
|
+
|
|
35
|
+
if result == 1:
|
|
36
|
+
print("Available!")
|
|
37
|
+
elif result == 0:
|
|
38
|
+
print("Unavailable!")
|
|
39
|
+
else:
|
|
40
|
+
print("Error occurred!")
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import httpx
|
|
2
|
+
from httpx import ConnectError, TimeoutException
|
|
3
|
+
|
|
4
|
+
def validate_github(user):
|
|
5
|
+
url = f"https://github.com/signup_check/username?value={user}"
|
|
6
|
+
|
|
7
|
+
headers = {
|
|
8
|
+
'User-Agent': "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36",
|
|
9
|
+
'Accept-Encoding': "gzip, deflate, br, zstd",
|
|
10
|
+
'sec-ch-ua-platform': "\"Linux\"",
|
|
11
|
+
'sec-ch-ua': "\"Chromium\";v=\"140\", \"Not=A?Brand\";v=\"24\", \"Google Chrome\";v=\"140\"",
|
|
12
|
+
'sec-ch-ua-mobile': "?0",
|
|
13
|
+
'sec-fetch-site': "same-origin",
|
|
14
|
+
'sec-fetch-mode': "cors",
|
|
15
|
+
'sec-fetch-dest': "empty",
|
|
16
|
+
'referer': "https://github.com/signup?source=form-home-signup&user_email=",
|
|
17
|
+
'accept-language': "en-US,en;q=0.9",
|
|
18
|
+
'priority': "u=1, i"
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
try:
|
|
22
|
+
response = httpx.get(url, headers=headers, timeout = 3.0)
|
|
23
|
+
status = response.status_code
|
|
24
|
+
|
|
25
|
+
if status == 200:
|
|
26
|
+
return 1
|
|
27
|
+
elif status == 422:
|
|
28
|
+
return 0
|
|
29
|
+
else:
|
|
30
|
+
return 2
|
|
31
|
+
|
|
32
|
+
except (ConnectError, TimeoutException):
|
|
33
|
+
return 2
|
|
34
|
+
except Exception:
|
|
35
|
+
return 2
|
|
36
|
+
|
|
37
|
+
if __name__ == "__main__":
|
|
38
|
+
user = input ("Username?: ").strip()
|
|
39
|
+
result = validate_github(user)
|
|
40
|
+
|
|
41
|
+
if result == 1:
|
|
42
|
+
print("Available!")
|
|
43
|
+
elif result == 0:
|
|
44
|
+
print("Unavailable!")
|
|
45
|
+
else:
|
|
46
|
+
print("Error occured!")
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import httpx
|
|
2
|
+
import json
|
|
3
|
+
from httpx import ConnectError, TimeoutException
|
|
4
|
+
|
|
5
|
+
def validate_gitlab(user):
|
|
6
|
+
url = f"https://gitlab.com/users/{user}/exists"
|
|
7
|
+
|
|
8
|
+
headers = {
|
|
9
|
+
'User-Agent': "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36",
|
|
10
|
+
'Accept': "application/json, text/plain, */*",
|
|
11
|
+
'X-Requested-With': "XMLHttpRequest",
|
|
12
|
+
'Referer': "https://gitlab.com/users/sign_up",
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
try:
|
|
16
|
+
response = httpx.get(url, headers=headers, timeout=3.0)
|
|
17
|
+
|
|
18
|
+
if response.status_code == 200:
|
|
19
|
+
data = response.json()
|
|
20
|
+
|
|
21
|
+
if 'exists' in data:
|
|
22
|
+
# Corrected: Compare against Python boolean True/False
|
|
23
|
+
# AVAILABLE (return 1) if "exists": true
|
|
24
|
+
if data['exists'] is False:
|
|
25
|
+
return 1
|
|
26
|
+
# UNAVAILABLE (return 0) if "exists": false
|
|
27
|
+
elif data['exists'] is True:
|
|
28
|
+
return 0
|
|
29
|
+
|
|
30
|
+
return 2
|
|
31
|
+
|
|
32
|
+
else:
|
|
33
|
+
return 2
|
|
34
|
+
|
|
35
|
+
except (ConnectError, TimeoutException):
|
|
36
|
+
return 2
|
|
37
|
+
except json.JSONDecodeError:
|
|
38
|
+
return 2
|
|
39
|
+
except Exception:
|
|
40
|
+
return 2
|
|
41
|
+
|
|
42
|
+
if __name__ == "__main__":
|
|
43
|
+
user = input ("Username?: ").strip()
|
|
44
|
+
result = validate_gitlab(user)
|
|
45
|
+
|
|
46
|
+
if result == 1:
|
|
47
|
+
print("Available!")
|
|
48
|
+
elif result == 0:
|
|
49
|
+
print("Unavailable!")
|
|
50
|
+
else:
|
|
51
|
+
print("Error occurred!")
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import httpx
|
|
2
|
+
from httpx import ConnectError, TimeoutException
|
|
3
|
+
|
|
4
|
+
def validate_launchpad(user):
|
|
5
|
+
url = f"https://launchpad.net/~{user}"
|
|
6
|
+
|
|
7
|
+
headers = {
|
|
8
|
+
'User-Agent': "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Mobile Safari/537.36",
|
|
9
|
+
'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9",
|
|
10
|
+
'Accept-Encoding': "gzip, deflate, br, zstd",
|
|
11
|
+
'Upgrade-Insecure-Requests': "1",
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
try:
|
|
15
|
+
response = httpx.head(url, headers=headers, timeout=5.0, follow_redirects=True)
|
|
16
|
+
status = response.status_code
|
|
17
|
+
|
|
18
|
+
if status == 200:
|
|
19
|
+
return 0
|
|
20
|
+
elif status == 404:
|
|
21
|
+
return 1
|
|
22
|
+
else:
|
|
23
|
+
return 2
|
|
24
|
+
|
|
25
|
+
except (ConnectError, TimeoutException):
|
|
26
|
+
return 2
|
|
27
|
+
except Exception:
|
|
28
|
+
return 2
|
|
29
|
+
|
|
30
|
+
if __name__ == "__main__":
|
|
31
|
+
user = input ("Username?: ").strip()
|
|
32
|
+
result = validate_launchpad(user)
|
|
33
|
+
|
|
34
|
+
if result == 1:
|
|
35
|
+
print("Available!")
|
|
36
|
+
elif result == 0:
|
|
37
|
+
print("Unavailable!")
|
|
38
|
+
else:
|
|
39
|
+
print("Error occurred!")
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import httpx
|
|
2
|
+
from httpx import ConnectError, TimeoutException
|
|
3
|
+
|
|
4
|
+
def validate_npmjs(user):
|
|
5
|
+
url = f"https://www.npmjs.com/~{user}"
|
|
6
|
+
|
|
7
|
+
headers = {
|
|
8
|
+
'User-Agent': "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36",
|
|
9
|
+
'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
|
|
10
|
+
'Accept-Encoding': "gzip, deflate, br, zstd",
|
|
11
|
+
'accept-language': "en-US,en;q=0.9",
|
|
12
|
+
'priority': "u=0, i"
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
try:
|
|
16
|
+
response = httpx.head(url, headers=headers, timeout=3.0, follow_redirects=True)
|
|
17
|
+
status = response.status_code
|
|
18
|
+
|
|
19
|
+
if status == 200:
|
|
20
|
+
return 0
|
|
21
|
+
elif status == 404:
|
|
22
|
+
return 1
|
|
23
|
+
else:
|
|
24
|
+
return 2
|
|
25
|
+
|
|
26
|
+
except (ConnectError, TimeoutException):
|
|
27
|
+
return 2
|
|
28
|
+
except Exception:
|
|
29
|
+
return 2
|
|
30
|
+
|
|
31
|
+
if __name__ == "__main__":
|
|
32
|
+
user = input ("Username?: ").strip()
|
|
33
|
+
result = validate_npmjs(user)
|
|
34
|
+
|
|
35
|
+
if result == 1:
|
|
36
|
+
print("Available!")
|
|
37
|
+
elif result == 0:
|
|
38
|
+
print("Unavailable!")
|
|
39
|
+
else:
|
|
40
|
+
print("Error occurred!")
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import httpx
|
|
2
|
+
from httpx import ConnectError, TimeoutException
|
|
3
|
+
|
|
4
|
+
def validate_replit(user):
|
|
5
|
+
url = f"https://replit.com/@{user}"
|
|
6
|
+
|
|
7
|
+
headers = {
|
|
8
|
+
'User-Agent': "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Mobile Safari/537.36",
|
|
9
|
+
'Accept': "text/html",
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
try:
|
|
13
|
+
response = httpx.head(url, headers=headers, timeout=3.0, follow_redirects=True)
|
|
14
|
+
status = response.status_code
|
|
15
|
+
|
|
16
|
+
if status == 200:
|
|
17
|
+
return 0
|
|
18
|
+
elif status == 404:
|
|
19
|
+
return 1
|
|
20
|
+
else:
|
|
21
|
+
return 2
|
|
22
|
+
|
|
23
|
+
except (ConnectError, TimeoutException):
|
|
24
|
+
return 2
|
|
25
|
+
except Exception:
|
|
26
|
+
return 2
|
|
27
|
+
|
|
28
|
+
if __name__ == "__main__":
|
|
29
|
+
user = input ("Username?: ").strip()
|
|
30
|
+
result = validate_replit(user)
|
|
31
|
+
|
|
32
|
+
if result == 1:
|
|
33
|
+
print("Available!")
|
|
34
|
+
elif result == 0:
|
|
35
|
+
print("Unavailable!")
|
|
36
|
+
else:
|
|
37
|
+
print("Error occurred!")
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# social
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import httpx
|
|
2
|
+
from httpx import ConnectError, TimeoutException
|
|
3
|
+
|
|
4
|
+
def validate_instagram(user):
|
|
5
|
+
url = f"https://www.instagram.com/api/v1/users/web_profile_info/?username={user}"
|
|
6
|
+
|
|
7
|
+
headers = {
|
|
8
|
+
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
|
|
9
|
+
'X-IG-App-ID': "936619743392459",
|
|
10
|
+
'Accept': "application/json, text/javascript, */*; q=0.01",
|
|
11
|
+
'Accept-Encoding': "gzip, deflate, br",
|
|
12
|
+
'Accept-Language': "en-US,en;q=0.9",
|
|
13
|
+
'X-Requested-With': "XMLHttpRequest",
|
|
14
|
+
'Referer': f"https://www.instagram.com/{user}/",
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
try:
|
|
18
|
+
response = httpx.get(url, headers=headers, timeout = 15.0)
|
|
19
|
+
status = response.status_code
|
|
20
|
+
|
|
21
|
+
if status == 200:
|
|
22
|
+
return 0
|
|
23
|
+
elif status == 404:
|
|
24
|
+
return 1
|
|
25
|
+
else:
|
|
26
|
+
return 2
|
|
27
|
+
|
|
28
|
+
except (ConnectError, TimeoutException):
|
|
29
|
+
return 2
|
|
30
|
+
except Exception:
|
|
31
|
+
return 2
|
|
32
|
+
|
|
33
|
+
if __name__ == "__main__":
|
|
34
|
+
try:
|
|
35
|
+
import httpx
|
|
36
|
+
except ImportError:
|
|
37
|
+
print("Error: 'httpx' library is not installed.")
|
|
38
|
+
exit()
|
|
39
|
+
|
|
40
|
+
user = input ("Username?: ").strip()
|
|
41
|
+
result = validate_instagram(user)
|
|
42
|
+
|
|
43
|
+
if result == 1:
|
|
44
|
+
print("Available!")
|
|
45
|
+
elif result == 0:
|
|
46
|
+
print("Unavailable!")
|
|
47
|
+
else:
|
|
48
|
+
print("Error occured!")
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import httpx
|
|
2
|
+
from httpx import ConnectError, TimeoutException
|
|
3
|
+
|
|
4
|
+
def validate_pinterest(user):
|
|
5
|
+
url = f"https://www.pinterest.com/{user}/"
|
|
6
|
+
|
|
7
|
+
headers = {
|
|
8
|
+
'User-Agent': "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Mobile Safari/537.36",
|
|
9
|
+
'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
|
|
10
|
+
'Accept-Encoding': "gzip",
|
|
11
|
+
'Accept-Language': "en-US,en;q=0.9",
|
|
12
|
+
'sec-fetch-dest': "document",
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
NOT_FOUND_STRING = "User not found."
|
|
16
|
+
|
|
17
|
+
try:
|
|
18
|
+
response = httpx.get(url, headers=headers, follow_redirects=True, timeout = 3.0)
|
|
19
|
+
|
|
20
|
+
if response.status_code == 200:
|
|
21
|
+
if NOT_FOUND_STRING in response.text:
|
|
22
|
+
return 1
|
|
23
|
+
else:
|
|
24
|
+
return 0
|
|
25
|
+
else:
|
|
26
|
+
return 2
|
|
27
|
+
|
|
28
|
+
except (ConnectError, TimeoutException):
|
|
29
|
+
return 2
|
|
30
|
+
except Exception:
|
|
31
|
+
return 2
|
|
32
|
+
|
|
33
|
+
if __name__ == "__main__":
|
|
34
|
+
try:
|
|
35
|
+
import httpx
|
|
36
|
+
except ImportError:
|
|
37
|
+
print("Error: 'httpx' library is not installed.")
|
|
38
|
+
exit()
|
|
39
|
+
|
|
40
|
+
user = input ("Username?: ").strip()
|
|
41
|
+
result = validate_pinterest(user)
|
|
42
|
+
|
|
43
|
+
if result == 1:
|
|
44
|
+
print("Available!")
|
|
45
|
+
elif result == 0:
|
|
46
|
+
print("Unavailable!")
|
|
47
|
+
else:
|
|
48
|
+
print("Error occured!")
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import httpx
|
|
2
|
+
from httpx import ConnectError, TimeoutException
|
|
3
|
+
|
|
4
|
+
def validate_reddit(user):
|
|
5
|
+
url = f"https://www.reddit.com/user/{user}/"
|
|
6
|
+
|
|
7
|
+
headers = {
|
|
8
|
+
'User-Agent': "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36",
|
|
9
|
+
'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
|
|
10
|
+
'Accept-Encoding': "gzip, deflate, br",
|
|
11
|
+
'Accept-Language': "en-US,en;q=0.9",
|
|
12
|
+
'sec-fetch-dest': "document",
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
NOT_FOUND_STRING = "Sorry, nobody on Reddit goes by that name."
|
|
16
|
+
|
|
17
|
+
try:
|
|
18
|
+
response = httpx.get(url, headers=headers, follow_redirects=True, timeout = 3.0)
|
|
19
|
+
|
|
20
|
+
if response.status_code == 200:
|
|
21
|
+
if NOT_FOUND_STRING in response.text:
|
|
22
|
+
return 1
|
|
23
|
+
else:
|
|
24
|
+
return 0
|
|
25
|
+
else:
|
|
26
|
+
return 2
|
|
27
|
+
|
|
28
|
+
except (ConnectError, TimeoutException):
|
|
29
|
+
return 2
|
|
30
|
+
except Exception:
|
|
31
|
+
return 2
|
|
32
|
+
|
|
33
|
+
if __name__ == "__main__":
|
|
34
|
+
try:
|
|
35
|
+
import httpx
|
|
36
|
+
except ImportError:
|
|
37
|
+
print("Error: 'httpx' library is not installed.")
|
|
38
|
+
exit()
|
|
39
|
+
|
|
40
|
+
user = input ("Username?: ").strip()
|
|
41
|
+
result = validate_reddit(user)
|
|
42
|
+
|
|
43
|
+
if result == 1:
|
|
44
|
+
print("Available!")
|
|
45
|
+
elif result == 0:
|
|
46
|
+
print("Unavailable!")
|
|
47
|
+
else:
|
|
48
|
+
print("Error occured!")
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import httpx
|
|
2
|
+
from httpx import ConnectError, TimeoutException
|
|
3
|
+
|
|
4
|
+
def validate_snapchat(user):
|
|
5
|
+
url = f"https://www.snapchat.com/@{user}"
|
|
6
|
+
|
|
7
|
+
headers = {
|
|
8
|
+
'User-Agent': "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Mobile Safari/537.36",
|
|
9
|
+
'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
|
|
10
|
+
'Accept-Encoding': "gzip, deflate, br, zstd",
|
|
11
|
+
'sec-ch-ua': "\"Google Chrome\";v=\"141\", \"Not?A_Brand\";v=\"8\", \"Chromium\";v=\"141\"",
|
|
12
|
+
'sec-ch-ua-mobile': "?1",
|
|
13
|
+
'sec-ch-ua-platform': "\"Android\"",
|
|
14
|
+
'upgrade-insecure-requests': "1",
|
|
15
|
+
'sec-fetch-site': "none",
|
|
16
|
+
'sec-fetch-mode': "navigate",
|
|
17
|
+
'sec-fetch-user': "?1",
|
|
18
|
+
'sec-fetch-dest': "document",
|
|
19
|
+
'accept-language': "en-US,en;q=0.9",
|
|
20
|
+
'priority': "u=0, i"
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
try:
|
|
24
|
+
response = httpx.get(url, headers=headers, follow_redirects=True, timeout = 3.0)
|
|
25
|
+
status = response.status_code
|
|
26
|
+
|
|
27
|
+
if status == 200:
|
|
28
|
+
return 0
|
|
29
|
+
elif status == 404:
|
|
30
|
+
return 1
|
|
31
|
+
else:
|
|
32
|
+
return 2
|
|
33
|
+
|
|
34
|
+
except (ConnectError, TimeoutException):
|
|
35
|
+
return 2
|
|
36
|
+
except Exception:
|
|
37
|
+
return 2
|
|
38
|
+
|
|
39
|
+
if __name__ == "__main__":
|
|
40
|
+
try:
|
|
41
|
+
import httpx
|
|
42
|
+
except ImportError:
|
|
43
|
+
print("Error: 'httpx' library is not installed.")
|
|
44
|
+
exit()
|
|
45
|
+
|
|
46
|
+
user = input ("Username?: ").strip()
|
|
47
|
+
result = validate_snapchat(user)
|
|
48
|
+
|
|
49
|
+
if result == 1:
|
|
50
|
+
print("Available!")
|
|
51
|
+
elif result == 0:
|
|
52
|
+
print("Unavailable!")
|
|
53
|
+
else:
|
|
54
|
+
print("Error occured!")
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import httpx
|
|
2
|
+
from httpx import ConnectError, TimeoutException
|
|
3
|
+
|
|
4
|
+
def validate_instagram(user):
|
|
5
|
+
url = f"https://www.threads.com/api/v1/users/web_profile_info/?username={user}"
|
|
6
|
+
|
|
7
|
+
headers = {
|
|
8
|
+
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
|
|
9
|
+
'X-IG-App-ID': "936619743392459",
|
|
10
|
+
'Accept': "application/json, text/javascript, */*; q=0.01",
|
|
11
|
+
'Accept-Encoding': "gzip, deflate, br",
|
|
12
|
+
'Accept-Language': "en-US,en;q=0.9",
|
|
13
|
+
'X-Requested-With': "XMLHttpRequest",
|
|
14
|
+
'Referer': f"https://www.instagram.com/{user}/",
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
try:
|
|
18
|
+
response = httpx.get(url, headers=headers, timeout = 3.0)
|
|
19
|
+
status = response.status_code
|
|
20
|
+
|
|
21
|
+
if status == 200:
|
|
22
|
+
return 0
|
|
23
|
+
elif status == 404:
|
|
24
|
+
return 1
|
|
25
|
+
else:
|
|
26
|
+
return 2
|
|
27
|
+
|
|
28
|
+
except (ConnectError, TimeoutException):
|
|
29
|
+
return 2
|
|
30
|
+
except Exception:
|
|
31
|
+
return 2
|
|
32
|
+
|
|
33
|
+
if __name__ == "__main__":
|
|
34
|
+
try:
|
|
35
|
+
import httpx
|
|
36
|
+
except ImportError:
|
|
37
|
+
print("Error: 'httpx' library is not installed.")
|
|
38
|
+
exit()
|
|
39
|
+
|
|
40
|
+
user = input ("Username?: ").strip()
|
|
41
|
+
result = validate_instagram(user)
|
|
42
|
+
|
|
43
|
+
if result == 1:
|
|
44
|
+
print("Available!")
|
|
45
|
+
elif result == 0:
|
|
46
|
+
print("Unavailable!")
|
|
47
|
+
else:
|
|
48
|
+
print("Error occured!")
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import httpx
|
|
2
|
+
import json
|
|
3
|
+
from httpx import ConnectError, TimeoutException
|
|
4
|
+
|
|
5
|
+
def validate_x(user):
|
|
6
|
+
url = "https://api.twitter.com/i/users/username_available.json"
|
|
7
|
+
|
|
8
|
+
params = {
|
|
9
|
+
"username": user,
|
|
10
|
+
"full_name": "Test User",
|
|
11
|
+
"email": "test@example.com"
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
headers = {
|
|
15
|
+
"Authority": "api.twitter.com",
|
|
16
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
try:
|
|
20
|
+
response = httpx.get(url, params=params, headers=headers, timeout = 3.0)
|
|
21
|
+
status = response.status_code
|
|
22
|
+
|
|
23
|
+
if status in [401, 403, 429]:
|
|
24
|
+
return 2
|
|
25
|
+
|
|
26
|
+
elif status == 200:
|
|
27
|
+
data = response.json()
|
|
28
|
+
|
|
29
|
+
if data.get('valid') is True:
|
|
30
|
+
return 1
|
|
31
|
+
elif data.get('reason') == 'taken':
|
|
32
|
+
return 0
|
|
33
|
+
else:
|
|
34
|
+
return 2
|
|
35
|
+
|
|
36
|
+
except (ConnectError, TimeoutException, json.JSONDecodeError):
|
|
37
|
+
return 2
|
|
38
|
+
except Exception:
|
|
39
|
+
return 2
|
|
40
|
+
|
|
41
|
+
if __name__ == "__main__":
|
|
42
|
+
try:
|
|
43
|
+
import httpx
|
|
44
|
+
except ImportError:
|
|
45
|
+
print("Error: 'httpx' library is not installed.")
|
|
46
|
+
exit()
|
|
47
|
+
|
|
48
|
+
user = input ("Username?: ").strip()
|
|
49
|
+
result = validate_x(user)
|
|
50
|
+
|
|
51
|
+
if result == 1:
|
|
52
|
+
print("Available!")
|
|
53
|
+
elif result == 0:
|
|
54
|
+
print("Unavailable!")
|
|
55
|
+
else:
|
|
56
|
+
print("Error occured!")
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import httpx
|
|
2
|
+
from httpx import ConnectError, TimeoutException
|
|
3
|
+
|
|
4
|
+
def validate_youtube(user):
|
|
5
|
+
url = f"https://m.youtube.com/@{user}"
|
|
6
|
+
|
|
7
|
+
headers = {
|
|
8
|
+
'User-Agent': "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Mobile Safari/537.36",
|
|
9
|
+
'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
|
|
10
|
+
'Accept-Encoding': "gzip, deflate, br, zstd",
|
|
11
|
+
'device-memory': "4",
|
|
12
|
+
'sec-ch-ua': "\"Google Chrome\";v=\"141\", \"Not?A_Brand\";v=\"8\", \"Chromium\";v=\"141\"",
|
|
13
|
+
'sec-ch-ua-mobile': "?1",
|
|
14
|
+
'sec-ch-ua-full-version': "\"141.0.7390.111\"",
|
|
15
|
+
'sec-ch-ua-arch': "\"\"",
|
|
16
|
+
'sec-ch-ua-platform': "\"Android\"",
|
|
17
|
+
'sec-ch-ua-platform-version': "\"15.0.0\"",
|
|
18
|
+
'sec-ch-ua-bitness': "\"\"",
|
|
19
|
+
'sec-ch-ua-wow64': "?0",
|
|
20
|
+
'sec-ch-ua-full-version-list': "\"Google Chrome\";v=\"141.0.7390.111\", \"Not?A_Brand\";v=\"8.0.0.0\", \"Chromium\";v=\"141.0.7390.111\"",
|
|
21
|
+
'sec-ch-ua-form-factors': "\"Mobile\"",
|
|
22
|
+
'upgrade-insecure-requests': "1",
|
|
23
|
+
'sec-fetch-site': "none",
|
|
24
|
+
'sec-fetch-mode': "navigate",
|
|
25
|
+
'sec-fetch-user': "?1",
|
|
26
|
+
'sec-fetch-dest': "document",
|
|
27
|
+
'accept-language': "en-US,en;q=0.9",
|
|
28
|
+
'priority': "u=0, i"
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
try:
|
|
32
|
+
response = httpx.get(url, headers=headers, follow_redirects=True, timeout = 3.0)
|
|
33
|
+
status = response.status_code
|
|
34
|
+
|
|
35
|
+
if status == 200:
|
|
36
|
+
return 0
|
|
37
|
+
elif status == 404:
|
|
38
|
+
return 1
|
|
39
|
+
else:
|
|
40
|
+
return 2
|
|
41
|
+
|
|
42
|
+
except (ConnectError, TimeoutException):
|
|
43
|
+
return 2
|
|
44
|
+
except Exception:
|
|
45
|
+
return 2
|
|
46
|
+
|
|
47
|
+
if __name__ == "__main__":
|
|
48
|
+
try:
|
|
49
|
+
import httpx
|
|
50
|
+
except ImportError:
|
|
51
|
+
print("Error: 'httpx' library is not installed.")
|
|
52
|
+
exit()
|
|
53
|
+
|
|
54
|
+
user = input ("Username?: ").strip()
|
|
55
|
+
result = validate_youtube(user)
|
|
56
|
+
|
|
57
|
+
if result == 1:
|
|
58
|
+
print("Available!")
|
|
59
|
+
elif result == 0:
|
|
60
|
+
print("Unavailable!")
|
|
61
|
+
else:
|
|
62
|
+
print("Error occured!")
|