webscout 6.4__tar.gz → 6.5__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.
Potentially problematic release.
This version of webscout might be problematic. Click here for more details.
- {webscout-6.4/webscout.egg-info → webscout-6.5}/PKG-INFO +12 -68
- {webscout-6.4 → webscout-6.5}/README.md +10 -61
- {webscout-6.4 → webscout-6.5}/setup.py +1 -7
- {webscout-6.4 → webscout-6.5}/webscout/AIutel.py +7 -54
- {webscout-6.4 → webscout-6.5}/webscout/DWEBS.py +48 -26
- {webscout-6.4/webscout → webscout-6.5/webscout/Extra/YTToolkit}/YTdownloader.py +990 -1103
- webscout-6.5/webscout/Extra/YTToolkit/__init__.py +3 -0
- {webscout-6.4/webscout → webscout-6.5/webscout/Extra/YTToolkit}/transcriber.py +1 -1
- webscout-6.5/webscout/Extra/YTToolkit/ytapi/__init__.py +6 -0
- webscout-6.5/webscout/Extra/YTToolkit/ytapi/channel.py +307 -0
- webscout-6.5/webscout/Extra/YTToolkit/ytapi/errors.py +13 -0
- webscout-6.5/webscout/Extra/YTToolkit/ytapi/extras.py +45 -0
- webscout-6.5/webscout/Extra/YTToolkit/ytapi/https.py +88 -0
- webscout-6.5/webscout/Extra/YTToolkit/ytapi/patterns.py +61 -0
- webscout-6.5/webscout/Extra/YTToolkit/ytapi/playlist.py +59 -0
- webscout-6.5/webscout/Extra/YTToolkit/ytapi/pool.py +8 -0
- webscout-6.5/webscout/Extra/YTToolkit/ytapi/query.py +37 -0
- webscout-6.5/webscout/Extra/YTToolkit/ytapi/stream.py +60 -0
- webscout-6.5/webscout/Extra/YTToolkit/ytapi/utils.py +62 -0
- webscout-6.5/webscout/Extra/YTToolkit/ytapi/video.py +102 -0
- {webscout-6.4 → webscout-6.5}/webscout/Extra/__init__.py +2 -1
- {webscout-6.4 → webscout-6.5}/webscout/Extra/autocoder/rawdog.py +679 -680
- {webscout-6.4 → webscout-6.5}/webscout/Extra/gguf.py +441 -441
- webscout-6.5/webscout/Extra/markdownlite/__init__.py +862 -0
- {webscout-6.4 → webscout-6.5}/webscout/Extra/weather_ascii.py +2 -2
- webscout-6.5/webscout/Provider/PI.py +293 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/Perplexity.py +6 -14
- {webscout-6.4 → webscout-6.5}/webscout/Provider/Reka.py +0 -1
- webscout-6.5/webscout/Provider/TTS/__init__.py +7 -0
- webscout-6.5/webscout/Provider/TTS/deepgram.py +183 -0
- webscout-6.5/webscout/Provider/TTS/elevenlabs.py +137 -0
- webscout-6.5/webscout/Provider/TTS/gesserit.py +151 -0
- webscout-6.5/webscout/Provider/TTS/murfai.py +139 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/TTS/parler.py +134 -107
- {webscout-6.4 → webscout-6.5}/webscout/Provider/TTS/streamElements.py +360 -275
- webscout-6.5/webscout/Provider/TTS/utils.py +280 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/TTS/voicepod.py +116 -116
- {webscout-6.4 → webscout-6.5}/webscout/Provider/__init__.py +146 -146
- {webscout-6.4 → webscout-6.5}/webscout/Provider/meta.py +794 -779
- {webscout-6.4 → webscout-6.5}/webscout/Provider/typegpt.py +1 -2
- {webscout-6.4 → webscout-6.5}/webscout/__init__.py +24 -28
- {webscout-6.4 → webscout-6.5}/webscout/litprinter/__init__.py +831 -830
- {webscout-6.4 → webscout-6.5}/webscout/optimizers.py +269 -269
- {webscout-6.4 → webscout-6.5}/webscout/prompt_manager.py +279 -279
- webscout-6.5/webscout/scout/__init__.py +11 -0
- webscout-6.5/webscout/scout/core.py +884 -0
- webscout-6.5/webscout/scout/element.py +459 -0
- webscout-6.5/webscout/scout/parsers/__init__.py +69 -0
- webscout-6.5/webscout/scout/parsers/html5lib_parser.py +172 -0
- webscout-6.5/webscout/scout/parsers/html_parser.py +236 -0
- webscout-6.5/webscout/scout/parsers/lxml_parser.py +178 -0
- webscout-6.5/webscout/scout/utils.py +38 -0
- {webscout-6.4 → webscout-6.5}/webscout/update_checker.py +125 -125
- {webscout-6.4 → webscout-6.5}/webscout/version.py +1 -1
- webscout-6.5/webscout/zeroart/__init__.py +55 -0
- webscout-6.5/webscout/zeroart/base.py +61 -0
- webscout-6.5/webscout/zeroart/effects.py +99 -0
- webscout-6.5/webscout/zeroart/fonts.py +816 -0
- webscout-6.5/webscout/zerodir/__init__.py +225 -0
- {webscout-6.4 → webscout-6.5/webscout.egg-info}/PKG-INFO +12 -68
- {webscout-6.4 → webscout-6.5}/webscout.egg-info/SOURCES.txt +35 -10
- {webscout-6.4 → webscout-6.5}/webscout.egg-info/requires.txt +1 -6
- webscout-6.4/webscout/Agents/Onlinesearcher.py +0 -182
- webscout-6.4/webscout/Agents/__init__.py +0 -2
- webscout-6.4/webscout/Agents/functioncall.py +0 -248
- webscout-6.4/webscout/Bing_search.py +0 -251
- webscout-6.4/webscout/Provider/PI.py +0 -222
- webscout-6.4/webscout/Provider/TTS/__init__.py +0 -3
- webscout-6.4/webscout/gpt4free.py +0 -666
- webscout-6.4/webscout/requestsHTMLfix.py +0 -775
- webscout-6.4/webscout/webai.py +0 -2590
- {webscout-6.4 → webscout-6.5}/LICENSE.md +0 -0
- {webscout-6.4 → webscout-6.5}/setup.cfg +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/AIauto.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/AIbase.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Bard.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Extra/autocoder/__init__.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Extra/autocoder/autocoder_utiles.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Extra/autollama.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Extra/weather.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/LLM.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Litlogger/__init__.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Local/__init__.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Local/_version.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Local/formats.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Local/model.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Local/samplers.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Local/thread.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Local/ui.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Local/utils.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/AI21.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/Amigo.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/Andi.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/Bing.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/Blackboxai.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/ChatGPTES.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/Chatify.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/Cloudflare.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/Cohere.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/DARKAI.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/Deepinfra.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/Deepseek.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/DiscordRocks.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/EDITEE.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/Farfalle.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/Free2GPT.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/GPTWeb.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/Gemini.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/Groq.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/Koboldai.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/Llama.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/Llama3.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/Marcus.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/NinjaChat.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/OLLAMA.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/Openai.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/Phind.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/PizzaGPT.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/RUBIKSAI.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/RoboCoders.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/TTI/AiForce/__init__.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/TTI/AiForce/async_aiforce.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/TTI/AiForce/sync_aiforce.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/TTI/Nexra/__init__.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/TTI/Nexra/async_nexra.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/TTI/Nexra/sync_nexra.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/TTI/PollinationsAI/__init__.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/TTI/PollinationsAI/async_pollinations.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/TTI/PollinationsAI/sync_pollinations.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/TTI/__init__.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/TTI/artbit/__init__.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/TTI/artbit/async_artbit.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/TTI/artbit/sync_artbit.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/TTI/blackbox/__init__.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/TTI/blackbox/async_blackbox.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/TTI/blackbox/sync_blackbox.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/TTI/deepinfra/__init__.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/TTI/deepinfra/async_deepinfra.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/TTI/deepinfra/sync_deepinfra.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/TTI/huggingface/__init__.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/TTI/huggingface/async_huggingface.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/TTI/huggingface/sync_huggingface.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/TTI/imgninza/__init__.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/TTI/imgninza/async_ninza.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/TTI/imgninza/sync_ninza.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/TTI/talkai/__init__.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/TTI/talkai/async_talkai.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/TTI/talkai/sync_talkai.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/TeachAnything.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/Youchat.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/ai4chat.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/aimathgpt.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/askmyai.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/bagoodex.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/cerebras.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/cleeai.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/elmo.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/felo_search.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/gaurish.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/geminiapi.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/geminiprorealtime.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/genspark.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/julius.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/koala.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/learnfastai.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/lepton.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/llama3mitril.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/llamatutor.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/llmchat.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/mhystical.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/perplexitylabs.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/prefind.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/promptrefine.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/talkai.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/turboseek.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/tutorai.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/twitterclone.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/upstage.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/x0gpt.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/Provider/yep.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/__main__.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/cli.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/conversation.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/exceptions.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/litagent/__init__.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/swiftcli/__init__.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/tempid.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/utils.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/webscout_search.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout/webscout_search_async.py +0 -0
- {webscout-6.4 → webscout-6.5}/webscout.egg-info/dependency_links.txt +0 -0
- {webscout-6.4 → webscout-6.5}/webscout.egg-info/entry_points.txt +0 -0
- {webscout-6.4 → webscout-6.5}/webscout.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: webscout
|
|
3
|
-
Version: 6.
|
|
3
|
+
Version: 6.5
|
|
4
4
|
Summary: Search for anything using Google, DuckDuckGo, phind.com, Contains AI models, can transcribe yt videos, temporary email and phone number generation, has TTS support, webai (terminal gpt and open interpreter) and offline LLMs and more
|
|
5
5
|
Author: OEvortex
|
|
6
6
|
Author-email: helpingai5@gmail.com
|
|
@@ -28,10 +28,7 @@ Requires-Dist: mistune
|
|
|
28
28
|
Requires-Dist: tenacity
|
|
29
29
|
Requires-Dist: curl_cffi
|
|
30
30
|
Requires-Dist: nest-asyncio
|
|
31
|
-
Requires-Dist: g4f>=0.2.2.3
|
|
32
|
-
Requires-Dist: g4f[webdriver]
|
|
33
31
|
Requires-Dist: rich
|
|
34
|
-
Requires-Dist: beautifulsoup4
|
|
35
32
|
Requires-Dist: markdownify
|
|
36
33
|
Requires-Dist: requests
|
|
37
34
|
Requires-Dist: google-generativeai
|
|
@@ -39,12 +36,10 @@ Requires-Dist: lxml>=5.2.2
|
|
|
39
36
|
Requires-Dist: termcolor
|
|
40
37
|
Requires-Dist: orjson
|
|
41
38
|
Requires-Dist: PyYAML
|
|
42
|
-
Requires-Dist: appdirs
|
|
43
39
|
Requires-Dist: tls_client
|
|
44
40
|
Requires-Dist: clipman
|
|
45
41
|
Requires-Dist: playsound
|
|
46
42
|
Requires-Dist: ollama
|
|
47
|
-
Requires-Dist: pyfiglet
|
|
48
43
|
Requires-Dist: pillow
|
|
49
44
|
Requires-Dist: bson
|
|
50
45
|
Requires-Dist: cloudscraper
|
|
@@ -53,10 +48,10 @@ Requires-Dist: openai
|
|
|
53
48
|
Requires-Dist: prompt-toolkit
|
|
54
49
|
Requires-Dist: primp
|
|
55
50
|
Requires-Dist: pyreqwest_impersonate
|
|
56
|
-
Requires-Dist: lxml_html_clean
|
|
57
51
|
Requires-Dist: gradio_client
|
|
58
52
|
Requires-Dist: psutil
|
|
59
53
|
Requires-Dist: yaspin
|
|
54
|
+
Requires-Dist: websocket
|
|
60
55
|
Provides-Extra: dev
|
|
61
56
|
Requires-Dist: ruff>=0.1.6; extra == "dev"
|
|
62
57
|
Requires-Dist: pytest>=7.4.2; extra == "dev"
|
|
@@ -103,12 +98,11 @@ Requires-Dist: unicorn; extra == "local"
|
|
|
103
98
|
</div>
|
|
104
99
|
|
|
105
100
|
## 🚀 Features
|
|
106
|
-
* **Comprehensive Search:** Leverage Google, DuckDuckGo
|
|
101
|
+
* **Comprehensive Search:** Leverage Google, DuckDuckGo for diverse search results.
|
|
107
102
|
* **AI Powerhouse:** Access and interact with various AI models, including OpenAI, Cohere, and more.
|
|
108
|
-
* **YouTube Toolkit:**
|
|
103
|
+
* **[YouTube Toolkit](webscout/Extra/YTToolkit):** Advanced YouTube video and transcript management with multi-language support, versatile downloading, and intelligent data extraction
|
|
109
104
|
* **Tempmail & Temp Number:** Generate temporary email addresses and phone numbers for enhanced privacy.
|
|
110
|
-
* **Text-to-Speech (TTS):** Convert text into natural-sounding speech using
|
|
111
|
-
* **WebAI:** Experience the power of terminal-based GPT and an open interpreter for code execution and more.
|
|
105
|
+
* **[Text-to-Speech (TTS)](webscout/Provider/TTS/README.md):** Convert text into natural-sounding speech using multiple AI-powered providers like ElevenLabs, StreamElements, and Voicepods.
|
|
112
106
|
* **Offline LLMs:** Utilize powerful language models offline with GGUF support.
|
|
113
107
|
* **Extensive Provider Ecosystem:** Explore a vast collection of providers, including BasedGPT, DeepSeek, and many others.
|
|
114
108
|
* **Local LLM Execution:** Run GGUF models locally with minimal configuration.
|
|
@@ -121,6 +115,7 @@ Requires-Dist: unicorn; extra == "local"
|
|
|
121
115
|
* **[LitLogger](webscout/litlogger/Readme.md):** Simplifies logging with customizable formats and color schemes
|
|
122
116
|
* **[LitAgent](webscout/litagent/Readme.md):** Powerful and modern user agent generator that keeps your requests fresh and undetectable
|
|
123
117
|
* **[Text-to-Image](webscout/Provider/TTI/README.md):** Generate high-quality images using a wide range of AI art providers
|
|
118
|
+
* **[MarkdownLite](webscout/Extra/markdownlite/README.md):** Powerful HTML to Markdown conversion library with advanced parsing and structured output
|
|
124
119
|
|
|
125
120
|
## ⚙️ Installation
|
|
126
121
|
```python
|
|
@@ -226,29 +221,7 @@ python -m webscout --help
|
|
|
226
221
|
|
|
227
222
|
[Go To TOP](#webscout-️)
|
|
228
223
|
|
|
229
|
-
## ⬇️ YTdownloader
|
|
230
224
|
|
|
231
|
-
```python
|
|
232
|
-
from os import rename, getcwd
|
|
233
|
-
from webscout import YTdownloader
|
|
234
|
-
def download_audio(video_id):
|
|
235
|
-
youtube_link = video_id
|
|
236
|
-
handler = YTdownloader.Handler(query=youtube_link)
|
|
237
|
-
for third_query_data in handler.run(format='mp3', quality='128kbps', limit=1):
|
|
238
|
-
audio_path = handler.save(third_query_data, dir=getcwd())
|
|
239
|
-
rename(audio_path, "audio.mp3")
|
|
240
|
-
|
|
241
|
-
def download_video(video_id):
|
|
242
|
-
youtube_link = video_id
|
|
243
|
-
handler = YTdownloader.Handler(query=youtube_link)
|
|
244
|
-
for third_query_data in handler.run(format='mp4', quality='auto', limit=1):
|
|
245
|
-
video_path = handler.save(third_query_data, dir=getcwd())
|
|
246
|
-
rename(video_path, "video.mp4")
|
|
247
|
-
|
|
248
|
-
if __name__ == "__main__":
|
|
249
|
-
# download_audio("https://www.youtube.com/watch?v=c0tMvzB0OKw")
|
|
250
|
-
download_video("https://www.youtube.com/watch?v=c0tMvzB0OKw")
|
|
251
|
-
```
|
|
252
225
|
|
|
253
226
|
## ☀️ Weather
|
|
254
227
|
|
|
@@ -304,20 +277,7 @@ if __name__ == "__main__":
|
|
|
304
277
|
asyncio.run(main())
|
|
305
278
|
```
|
|
306
279
|
|
|
307
|
-
## 📝 Transcriber
|
|
308
280
|
|
|
309
|
-
The `transcriber` function in Webscout is a handy tool that transcribes YouTube videos.
|
|
310
|
-
|
|
311
|
-
**Example:**
|
|
312
|
-
|
|
313
|
-
```python
|
|
314
|
-
from webscout import YTTranscriber
|
|
315
|
-
yt = YTTranscriber()
|
|
316
|
-
from rich import print
|
|
317
|
-
video_url = input("Enter the YouTube video URL: ")
|
|
318
|
-
transcript = yt.get_transcript(video_url, languages=None)
|
|
319
|
-
print(transcript)
|
|
320
|
-
```
|
|
321
281
|
|
|
322
282
|
## 🔍 GoogleS (formerly DWEBS)
|
|
323
283
|
|
|
@@ -330,16 +290,6 @@ for result in results:
|
|
|
330
290
|
print(result)
|
|
331
291
|
```
|
|
332
292
|
|
|
333
|
-
### BingS
|
|
334
|
-
|
|
335
|
-
```python
|
|
336
|
-
from webscout import BingS
|
|
337
|
-
from rich import print
|
|
338
|
-
searcher = BingS()
|
|
339
|
-
results = searcher.search("HelpingAI-9B", max_results=20, extract_webpage_text=True, max_extract_characters=1000)
|
|
340
|
-
for result in results:
|
|
341
|
-
print(result)
|
|
342
|
-
```
|
|
343
293
|
|
|
344
294
|
## 🦆 WEBS and AsyncWEBS
|
|
345
295
|
|
|
@@ -956,18 +906,12 @@ ai = BLACKBOXAI(
|
|
|
956
906
|
model=None # You can specify a model if needed
|
|
957
907
|
)
|
|
958
908
|
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
if prompt.lower() == "exit":
|
|
966
|
-
break
|
|
967
|
-
|
|
968
|
-
# Use the 'chat' method to send the prompt and receive a response
|
|
969
|
-
r = ai.chat(prompt)
|
|
970
|
-
print(r)
|
|
909
|
+
|
|
910
|
+
# Define a prompt to send to the AI
|
|
911
|
+
prompt = "Tell me about india"
|
|
912
|
+
# Use the 'chat' method to send the prompt and receive a response
|
|
913
|
+
r = ai.chat(prompt)
|
|
914
|
+
print(r)
|
|
971
915
|
```
|
|
972
916
|
|
|
973
917
|
### ❓ `PERPLEXITY` - Search with PERPLEXITY
|
|
@@ -34,12 +34,11 @@
|
|
|
34
34
|
</div>
|
|
35
35
|
|
|
36
36
|
## 🚀 Features
|
|
37
|
-
* **Comprehensive Search:** Leverage Google, DuckDuckGo
|
|
37
|
+
* **Comprehensive Search:** Leverage Google, DuckDuckGo for diverse search results.
|
|
38
38
|
* **AI Powerhouse:** Access and interact with various AI models, including OpenAI, Cohere, and more.
|
|
39
|
-
* **YouTube Toolkit:**
|
|
39
|
+
* **[YouTube Toolkit](webscout/Extra/YTToolkit):** Advanced YouTube video and transcript management with multi-language support, versatile downloading, and intelligent data extraction
|
|
40
40
|
* **Tempmail & Temp Number:** Generate temporary email addresses and phone numbers for enhanced privacy.
|
|
41
|
-
* **Text-to-Speech (TTS):** Convert text into natural-sounding speech using
|
|
42
|
-
* **WebAI:** Experience the power of terminal-based GPT and an open interpreter for code execution and more.
|
|
41
|
+
* **[Text-to-Speech (TTS)](webscout/Provider/TTS/README.md):** Convert text into natural-sounding speech using multiple AI-powered providers like ElevenLabs, StreamElements, and Voicepods.
|
|
43
42
|
* **Offline LLMs:** Utilize powerful language models offline with GGUF support.
|
|
44
43
|
* **Extensive Provider Ecosystem:** Explore a vast collection of providers, including BasedGPT, DeepSeek, and many others.
|
|
45
44
|
* **Local LLM Execution:** Run GGUF models locally with minimal configuration.
|
|
@@ -52,6 +51,7 @@
|
|
|
52
51
|
* **[LitLogger](webscout/litlogger/Readme.md):** Simplifies logging with customizable formats and color schemes
|
|
53
52
|
* **[LitAgent](webscout/litagent/Readme.md):** Powerful and modern user agent generator that keeps your requests fresh and undetectable
|
|
54
53
|
* **[Text-to-Image](webscout/Provider/TTI/README.md):** Generate high-quality images using a wide range of AI art providers
|
|
54
|
+
* **[MarkdownLite](webscout/Extra/markdownlite/README.md):** Powerful HTML to Markdown conversion library with advanced parsing and structured output
|
|
55
55
|
|
|
56
56
|
## ⚙️ Installation
|
|
57
57
|
```python
|
|
@@ -157,29 +157,7 @@ python -m webscout --help
|
|
|
157
157
|
|
|
158
158
|
[Go To TOP](#webscout-️)
|
|
159
159
|
|
|
160
|
-
## ⬇️ YTdownloader
|
|
161
160
|
|
|
162
|
-
```python
|
|
163
|
-
from os import rename, getcwd
|
|
164
|
-
from webscout import YTdownloader
|
|
165
|
-
def download_audio(video_id):
|
|
166
|
-
youtube_link = video_id
|
|
167
|
-
handler = YTdownloader.Handler(query=youtube_link)
|
|
168
|
-
for third_query_data in handler.run(format='mp3', quality='128kbps', limit=1):
|
|
169
|
-
audio_path = handler.save(third_query_data, dir=getcwd())
|
|
170
|
-
rename(audio_path, "audio.mp3")
|
|
171
|
-
|
|
172
|
-
def download_video(video_id):
|
|
173
|
-
youtube_link = video_id
|
|
174
|
-
handler = YTdownloader.Handler(query=youtube_link)
|
|
175
|
-
for third_query_data in handler.run(format='mp4', quality='auto', limit=1):
|
|
176
|
-
video_path = handler.save(third_query_data, dir=getcwd())
|
|
177
|
-
rename(video_path, "video.mp4")
|
|
178
|
-
|
|
179
|
-
if __name__ == "__main__":
|
|
180
|
-
# download_audio("https://www.youtube.com/watch?v=c0tMvzB0OKw")
|
|
181
|
-
download_video("https://www.youtube.com/watch?v=c0tMvzB0OKw")
|
|
182
|
-
```
|
|
183
161
|
|
|
184
162
|
## ☀️ Weather
|
|
185
163
|
|
|
@@ -235,20 +213,7 @@ if __name__ == "__main__":
|
|
|
235
213
|
asyncio.run(main())
|
|
236
214
|
```
|
|
237
215
|
|
|
238
|
-
## 📝 Transcriber
|
|
239
216
|
|
|
240
|
-
The `transcriber` function in Webscout is a handy tool that transcribes YouTube videos.
|
|
241
|
-
|
|
242
|
-
**Example:**
|
|
243
|
-
|
|
244
|
-
```python
|
|
245
|
-
from webscout import YTTranscriber
|
|
246
|
-
yt = YTTranscriber()
|
|
247
|
-
from rich import print
|
|
248
|
-
video_url = input("Enter the YouTube video URL: ")
|
|
249
|
-
transcript = yt.get_transcript(video_url, languages=None)
|
|
250
|
-
print(transcript)
|
|
251
|
-
```
|
|
252
217
|
|
|
253
218
|
## 🔍 GoogleS (formerly DWEBS)
|
|
254
219
|
|
|
@@ -261,16 +226,6 @@ for result in results:
|
|
|
261
226
|
print(result)
|
|
262
227
|
```
|
|
263
228
|
|
|
264
|
-
### BingS
|
|
265
|
-
|
|
266
|
-
```python
|
|
267
|
-
from webscout import BingS
|
|
268
|
-
from rich import print
|
|
269
|
-
searcher = BingS()
|
|
270
|
-
results = searcher.search("HelpingAI-9B", max_results=20, extract_webpage_text=True, max_extract_characters=1000)
|
|
271
|
-
for result in results:
|
|
272
|
-
print(result)
|
|
273
|
-
```
|
|
274
229
|
|
|
275
230
|
## 🦆 WEBS and AsyncWEBS
|
|
276
231
|
|
|
@@ -887,18 +842,12 @@ ai = BLACKBOXAI(
|
|
|
887
842
|
model=None # You can specify a model if needed
|
|
888
843
|
)
|
|
889
844
|
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
if prompt.lower() == "exit":
|
|
897
|
-
break
|
|
898
|
-
|
|
899
|
-
# Use the 'chat' method to send the prompt and receive a response
|
|
900
|
-
r = ai.chat(prompt)
|
|
901
|
-
print(r)
|
|
845
|
+
|
|
846
|
+
# Define a prompt to send to the AI
|
|
847
|
+
prompt = "Tell me about india"
|
|
848
|
+
# Use the 'chat' method to send the prompt and receive a response
|
|
849
|
+
r = ai.chat(prompt)
|
|
850
|
+
print(r)
|
|
902
851
|
```
|
|
903
852
|
|
|
904
853
|
### ❓ `PERPLEXITY` - Search with PERPLEXITY
|
|
@@ -34,10 +34,7 @@ setup(
|
|
|
34
34
|
"tenacity",
|
|
35
35
|
"curl_cffi",
|
|
36
36
|
"nest-asyncio",
|
|
37
|
-
"g4f>=0.2.2.3",
|
|
38
|
-
"g4f[webdriver]",
|
|
39
37
|
"rich",
|
|
40
|
-
"beautifulsoup4",
|
|
41
38
|
"markdownify",
|
|
42
39
|
"requests",
|
|
43
40
|
"google-generativeai",
|
|
@@ -45,12 +42,10 @@ setup(
|
|
|
45
42
|
"termcolor",
|
|
46
43
|
"orjson",
|
|
47
44
|
"PyYAML",
|
|
48
|
-
"appdirs",
|
|
49
45
|
"tls_client",
|
|
50
46
|
"clipman",
|
|
51
47
|
"playsound",
|
|
52
48
|
"ollama",
|
|
53
|
-
"pyfiglet",
|
|
54
49
|
"pillow",
|
|
55
50
|
"bson",
|
|
56
51
|
"cloudscraper",
|
|
@@ -59,12 +54,11 @@ setup(
|
|
|
59
54
|
"prompt-toolkit",
|
|
60
55
|
"primp",
|
|
61
56
|
"pyreqwest_impersonate",
|
|
62
|
-
"lxml_html_clean",
|
|
63
57
|
"gradio_client",
|
|
64
58
|
"psutil",
|
|
65
59
|
"yaspin",
|
|
60
|
+
"websocket"
|
|
66
61
|
# "cerebras_cloud_sdk",
|
|
67
|
-
|
|
68
62
|
],
|
|
69
63
|
entry_points={
|
|
70
64
|
"console_scripts": [
|
|
@@ -5,14 +5,11 @@ import subprocess
|
|
|
5
5
|
import logging
|
|
6
6
|
import threading
|
|
7
7
|
import time
|
|
8
|
-
import appdirs
|
|
9
8
|
import datetime
|
|
10
9
|
import re
|
|
11
10
|
import sys
|
|
12
|
-
import click
|
|
13
11
|
from rich.markdown import Markdown
|
|
14
12
|
from rich.console import Console
|
|
15
|
-
import g4f
|
|
16
13
|
from typing import List, Tuple, Union
|
|
17
14
|
from typing import NoReturn
|
|
18
15
|
import requests
|
|
@@ -21,49 +18,9 @@ from playsound import playsound
|
|
|
21
18
|
from time import sleep as wait
|
|
22
19
|
import pathlib
|
|
23
20
|
import urllib.parse
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
if not os.path.exists(default_path):
|
|
29
|
-
os.makedirs(default_path)
|
|
30
|
-
webai = [
|
|
31
|
-
"leo",
|
|
32
|
-
"openai",
|
|
33
|
-
"opengpt",
|
|
34
|
-
"koboldai",
|
|
35
|
-
"gemini",
|
|
36
|
-
"phind",
|
|
37
|
-
"blackboxai",
|
|
38
|
-
"g4fauto",
|
|
39
|
-
"perplexity",
|
|
40
|
-
"groq",
|
|
41
|
-
"reka",
|
|
42
|
-
"cohere",
|
|
43
|
-
"yepchat",
|
|
44
|
-
"you",
|
|
45
|
-
"xjai",
|
|
46
|
-
"thinkany",
|
|
47
|
-
"berlin4h",
|
|
48
|
-
"chatgptuk",
|
|
49
|
-
"auto",
|
|
50
|
-
"poe",
|
|
51
|
-
"basedgpt",
|
|
52
|
-
"deepseek",
|
|
53
|
-
"deepinfra",
|
|
54
|
-
"vtlchat",
|
|
55
|
-
"geminiflash",
|
|
56
|
-
"geminipro",
|
|
57
|
-
"ollama",
|
|
58
|
-
"andi",
|
|
59
|
-
"llama3"
|
|
60
|
-
]
|
|
61
|
-
|
|
62
|
-
gpt4free_providers = [
|
|
63
|
-
provider.__name__ for provider in g4f.Provider.__providers__ # if provider.working
|
|
64
|
-
]
|
|
65
|
-
|
|
66
|
-
available_providers = webai + gpt4free_providers
|
|
21
|
+
|
|
22
|
+
default_path = os.path.join(os.path.expanduser("~"), ".cache", "AIWEBS", "webscout")
|
|
23
|
+
|
|
67
24
|
def sanitize_stream(
|
|
68
25
|
chunk: str, intro_value: str = "data:", to_json: bool = True
|
|
69
26
|
) -> str | dict:
|
|
@@ -109,14 +66,10 @@ def run_system_command(
|
|
|
109
66
|
)
|
|
110
67
|
return (True, result)
|
|
111
68
|
except subprocess.CalledProcessError as e:
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
if help is not None:
|
|
117
|
-
click.secho(help, fg="cyan")
|
|
118
|
-
sys.exit(e.returncode) if exit_on_error else None
|
|
119
|
-
return (False, e)
|
|
69
|
+
if exit_on_error:
|
|
70
|
+
raise Exception(f"Command failed with exit code {e.returncode}") from e
|
|
71
|
+
else:
|
|
72
|
+
return (False, e)
|
|
120
73
|
|
|
121
74
|
|
|
122
75
|
from .conversation import Conversation
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
from bs4 import BeautifulSoup
|
|
2
1
|
import requests
|
|
3
2
|
from typing import Dict, List, Optional, Union, Any
|
|
4
3
|
from concurrent.futures import ThreadPoolExecutor, as_completed
|
|
4
|
+
from webscout.scout import Scout
|
|
5
5
|
from urllib.parse import quote, urljoin
|
|
6
|
+
from webscout.litagent import LitAgent
|
|
6
7
|
|
|
7
8
|
import time
|
|
8
9
|
import random
|
|
@@ -10,14 +11,13 @@ import json
|
|
|
10
11
|
import os
|
|
11
12
|
from datetime import datetime, timedelta
|
|
12
13
|
from functools import lru_cache
|
|
13
|
-
from .Litlogger import LitLogger, LogFormat, ColorScheme
|
|
14
|
-
from tenacity import retry, stop_after_attempt, wait_exponential
|
|
14
|
+
from webscout.Litlogger import LitLogger, LogFormat, ColorScheme
|
|
15
15
|
|
|
16
16
|
class GoogleS:
|
|
17
|
-
"""A Python interface for Google search with advanced features
|
|
17
|
+
"""A Python interface for Google search with advanced features
|
|
18
18
|
|
|
19
19
|
The GoogleS class provides a powerful interface to perform web searches, image searches,
|
|
20
|
-
and advanced filtering on Google. Built with love by HAI to keep it
|
|
20
|
+
and advanced filtering on Google. Built with love by HAI to keep it
|
|
21
21
|
|
|
22
22
|
Basic Usage:
|
|
23
23
|
>>> from webscout.DWEBS import GoogleS
|
|
@@ -122,7 +122,7 @@ class GoogleS:
|
|
|
122
122
|
"""
|
|
123
123
|
self.proxy = proxy
|
|
124
124
|
self.headers = headers if headers else {
|
|
125
|
-
"User-Agent":
|
|
125
|
+
"User-Agent": LitAgent().random() # Use LitAgent to generate user agent
|
|
126
126
|
}
|
|
127
127
|
self.headers["Referer"] = "https://www.google.com/"
|
|
128
128
|
self.client = requests.Session()
|
|
@@ -155,25 +155,46 @@ class GoogleS:
|
|
|
155
155
|
time.sleep(self.rate_limit - time_since_last)
|
|
156
156
|
self.last_request_time = time.time()
|
|
157
157
|
|
|
158
|
-
@retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=4, max=10))
|
|
159
158
|
def _get_url(self, method: str, url: str, params: Optional[Dict[str, str]] = None,
|
|
160
|
-
data: Optional[Union[Dict[str, str], bytes]] = None) -> bytes:
|
|
159
|
+
data: Optional[Union[Dict[str, str], bytes]] = None, max_retries: int = 3) -> bytes:
|
|
161
160
|
"""
|
|
162
|
-
Makes an HTTP request with retry logic and rate limiting.
|
|
161
|
+
Makes an HTTP request with manual retry logic and rate limiting.
|
|
162
|
+
|
|
163
|
+
Args:
|
|
164
|
+
method (str): HTTP method (GET, POST, etc.)
|
|
165
|
+
url (str): Target URL
|
|
166
|
+
params (Optional[Dict[str, str]]): Query parameters
|
|
167
|
+
data (Optional[Union[Dict[str, str], bytes]]): Request payload
|
|
168
|
+
max_retries (int): Maximum number of retry attempts
|
|
169
|
+
|
|
170
|
+
Returns:
|
|
171
|
+
bytes: Response content
|
|
163
172
|
"""
|
|
164
173
|
self._respect_rate_limit()
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
self.
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
174
|
+
|
|
175
|
+
for attempt in range(max_retries):
|
|
176
|
+
try:
|
|
177
|
+
if self.use_litlogger:
|
|
178
|
+
self.logger.debug(f"Making {method} request to {url} (Attempt {attempt + 1})")
|
|
179
|
+
|
|
180
|
+
resp = self.client.request(method, url, params=params, data=data, timeout=self.timeout)
|
|
181
|
+
resp.raise_for_status()
|
|
182
|
+
|
|
183
|
+
if self.use_litlogger:
|
|
184
|
+
self.logger.success(f"Request successful: {resp.status_code}")
|
|
185
|
+
|
|
186
|
+
return resp.content
|
|
187
|
+
|
|
188
|
+
except requests.exceptions.RequestException as ex:
|
|
189
|
+
if self.use_litlogger:
|
|
190
|
+
self.logger.error(f"Request failed: {url} - {str(ex)}")
|
|
191
|
+
|
|
192
|
+
# Exponential backoff
|
|
193
|
+
if attempt < max_retries - 1:
|
|
194
|
+
wait_time = (2 ** attempt) + random.random()
|
|
195
|
+
time.sleep(wait_time)
|
|
196
|
+
else:
|
|
197
|
+
raise
|
|
177
198
|
|
|
178
199
|
@lru_cache(maxsize=100)
|
|
179
200
|
def _cache_key(self, query: str, **kwargs) -> str:
|
|
@@ -217,7 +238,7 @@ class GoogleS:
|
|
|
217
238
|
type_filter: Optional[str] = None,
|
|
218
239
|
**kwargs
|
|
219
240
|
) -> List[Dict[str, str]]:
|
|
220
|
-
"""Search for images on Google with style!
|
|
241
|
+
"""Search for images on Google with style!
|
|
221
242
|
|
|
222
243
|
Args:
|
|
223
244
|
query (str): What you're looking for fam
|
|
@@ -270,7 +291,7 @@ class GoogleS:
|
|
|
270
291
|
params["tbs"] = f"itp:{type_filter}"
|
|
271
292
|
|
|
272
293
|
content = self._get_url("GET", self.SEARCH_TYPES["image"], params=params)
|
|
273
|
-
soup =
|
|
294
|
+
soup = Scout(content) # Use Scout parser
|
|
274
295
|
|
|
275
296
|
results = []
|
|
276
297
|
for img in soup.find_all("img", class_="rg_i"):
|
|
@@ -365,7 +386,8 @@ class GoogleS:
|
|
|
365
386
|
for future in as_completed(futures):
|
|
366
387
|
try:
|
|
367
388
|
resp_content = future.result()
|
|
368
|
-
soup =
|
|
389
|
+
soup = Scout(resp_content) # Use Scout parser
|
|
390
|
+
|
|
369
391
|
result_blocks = soup.find_all("div", class_="g")
|
|
370
392
|
|
|
371
393
|
if not result_blocks:
|
|
@@ -429,9 +451,9 @@ class GoogleS:
|
|
|
429
451
|
|
|
430
452
|
def _extract_text_from_webpage(self, html_content: bytes, max_characters: Optional[int] = None) -> str:
|
|
431
453
|
"""
|
|
432
|
-
Extracts visible text from HTML content using
|
|
454
|
+
Extracts visible text from HTML content using Scout parser.
|
|
433
455
|
"""
|
|
434
|
-
soup =
|
|
456
|
+
soup = Scout(html_content) # Use Scout parser
|
|
435
457
|
for tag in soup(["script", "style", "header", "footer", "nav"]):
|
|
436
458
|
tag.extract()
|
|
437
459
|
visible_text = soup.get_text(strip=True)
|