From 11159f2bef9fbd7019b4eb3e5d5cf4e674133162 Mon Sep 17 00:00:00 2001
From: j1nx
Date: Sat, 14 Jan 2023 20:03:14 +0100
Subject: [PATCH] Add youtube-search to the rootfs overlay Todo: create
buildroot packages
---
.../youtube_search-2.1.2.dist-info/INSTALLER | 1 +
.../youtube_search-2.1.2.dist-info/LICENSE | 21 ++++++
.../youtube_search-2.1.2.dist-info/METADATA | 44 ++++++++++++
.../youtube_search-2.1.2.dist-info/RECORD | 9 +++
.../youtube_search-2.1.2.dist-info/REQUESTED | 0
.../youtube_search-2.1.2.dist-info/WHEEL | 5 ++
.../top_level.txt | 1 +
.../site-packages/youtube_search/__init__.py | 65 ++++++++++++++++++
.../site-packages/youtube_search/__init__.pyc | Bin 0 -> 2719 bytes
9 files changed, 146 insertions(+)
create mode 100644 buildroot-external/rootfs-overlay/home/mycroft/.local/lib/python3.10/site-packages/youtube_search-2.1.2.dist-info/INSTALLER
create mode 100644 buildroot-external/rootfs-overlay/home/mycroft/.local/lib/python3.10/site-packages/youtube_search-2.1.2.dist-info/LICENSE
create mode 100644 buildroot-external/rootfs-overlay/home/mycroft/.local/lib/python3.10/site-packages/youtube_search-2.1.2.dist-info/METADATA
create mode 100644 buildroot-external/rootfs-overlay/home/mycroft/.local/lib/python3.10/site-packages/youtube_search-2.1.2.dist-info/RECORD
create mode 100644 buildroot-external/rootfs-overlay/home/mycroft/.local/lib/python3.10/site-packages/youtube_search-2.1.2.dist-info/REQUESTED
create mode 100644 buildroot-external/rootfs-overlay/home/mycroft/.local/lib/python3.10/site-packages/youtube_search-2.1.2.dist-info/WHEEL
create mode 100644 buildroot-external/rootfs-overlay/home/mycroft/.local/lib/python3.10/site-packages/youtube_search-2.1.2.dist-info/top_level.txt
create mode 100644 buildroot-external/rootfs-overlay/home/mycroft/.local/lib/python3.10/site-packages/youtube_search/__init__.py
create mode 100644 buildroot-external/rootfs-overlay/home/mycroft/.local/lib/python3.10/site-packages/youtube_search/__init__.pyc
diff --git a/buildroot-external/rootfs-overlay/home/mycroft/.local/lib/python3.10/site-packages/youtube_search-2.1.2.dist-info/INSTALLER b/buildroot-external/rootfs-overlay/home/mycroft/.local/lib/python3.10/site-packages/youtube_search-2.1.2.dist-info/INSTALLER
new file mode 100644
index 00000000..a1b589e3
--- /dev/null
+++ b/buildroot-external/rootfs-overlay/home/mycroft/.local/lib/python3.10/site-packages/youtube_search-2.1.2.dist-info/INSTALLER
@@ -0,0 +1 @@
+pip
diff --git a/buildroot-external/rootfs-overlay/home/mycroft/.local/lib/python3.10/site-packages/youtube_search-2.1.2.dist-info/LICENSE b/buildroot-external/rootfs-overlay/home/mycroft/.local/lib/python3.10/site-packages/youtube_search-2.1.2.dist-info/LICENSE
new file mode 100644
index 00000000..ad096495
--- /dev/null
+++ b/buildroot-external/rootfs-overlay/home/mycroft/.local/lib/python3.10/site-packages/youtube_search-2.1.2.dist-info/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2019 joe tats
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/buildroot-external/rootfs-overlay/home/mycroft/.local/lib/python3.10/site-packages/youtube_search-2.1.2.dist-info/METADATA b/buildroot-external/rootfs-overlay/home/mycroft/.local/lib/python3.10/site-packages/youtube_search-2.1.2.dist-info/METADATA
new file mode 100644
index 00000000..29ca82a0
--- /dev/null
+++ b/buildroot-external/rootfs-overlay/home/mycroft/.local/lib/python3.10/site-packages/youtube_search-2.1.2.dist-info/METADATA
@@ -0,0 +1,44 @@
+Metadata-Version: 2.1
+Name: youtube-search
+Version: 2.1.2
+Summary: Perform YouTube video searches without the API
+Home-page: https://github.com/joetats/youtube_search
+Author: Joe Tatusko
+Author-email: tatuskojc@gmail.com
+License: MIT
+Classifier: License :: OSI Approved :: MIT License
+Classifier: Programming Language :: Python :: 3
+Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
+Description-Content-Type: text/markdown
+License-File: LICENSE
+Requires-Dist: requests
+
+# youtube_search
+
+Python function for searching for youtube videos to avoid using their heavily rate-limited API
+
+To avoid using the API, this uses the form on the youtube homepage and scrapes the resulting page.
+
+## Example Usage
+
+For a basic search (and all of the current functionality), you can use the search tool as follows:
+
+```pip install youtube-search```
+
+```python
+from youtube_search import YoutubeSearch
+
+results = YoutubeSearch('search terms', max_results=10).to_json()
+
+print(results)
+
+# returns a json string
+
+########################################
+
+results = YoutubeSearch('search terms', max_results=10).to_dict()
+
+print(results)
+# returns a dictionary
+```
diff --git a/buildroot-external/rootfs-overlay/home/mycroft/.local/lib/python3.10/site-packages/youtube_search-2.1.2.dist-info/RECORD b/buildroot-external/rootfs-overlay/home/mycroft/.local/lib/python3.10/site-packages/youtube_search-2.1.2.dist-info/RECORD
new file mode 100644
index 00000000..d7252b3e
--- /dev/null
+++ b/buildroot-external/rootfs-overlay/home/mycroft/.local/lib/python3.10/site-packages/youtube_search-2.1.2.dist-info/RECORD
@@ -0,0 +1,9 @@
+youtube_search-2.1.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
+youtube_search-2.1.2.dist-info/LICENSE,sha256=zVjZaKVVhb_CGuoJOu5bqSpnhbqyTJlpz-LNi_6eqD0,1065
+youtube_search-2.1.2.dist-info/METADATA,sha256=wEWvppkKB-B7DeOSj2BSxXRurMUpNdWkteSIopw51Xo,1197
+youtube_search-2.1.2.dist-info/RECORD,,
+youtube_search-2.1.2.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
+youtube_search-2.1.2.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
+youtube_search-2.1.2.dist-info/top_level.txt,sha256=a9m0vWREPPFPH9ghqteiTbDyIOTXrXickQ3rb4SZtRQ,15
+youtube_search/__init__.py,sha256=DoUp4KBhq9WeNp531X1zfVTYkF5WZ6BzG_fbxQRehHc,2834
+youtube_search/__init__.pyc,,
diff --git a/buildroot-external/rootfs-overlay/home/mycroft/.local/lib/python3.10/site-packages/youtube_search-2.1.2.dist-info/REQUESTED b/buildroot-external/rootfs-overlay/home/mycroft/.local/lib/python3.10/site-packages/youtube_search-2.1.2.dist-info/REQUESTED
new file mode 100644
index 00000000..e69de29b
diff --git a/buildroot-external/rootfs-overlay/home/mycroft/.local/lib/python3.10/site-packages/youtube_search-2.1.2.dist-info/WHEEL b/buildroot-external/rootfs-overlay/home/mycroft/.local/lib/python3.10/site-packages/youtube_search-2.1.2.dist-info/WHEEL
new file mode 100644
index 00000000..becc9a66
--- /dev/null
+++ b/buildroot-external/rootfs-overlay/home/mycroft/.local/lib/python3.10/site-packages/youtube_search-2.1.2.dist-info/WHEEL
@@ -0,0 +1,5 @@
+Wheel-Version: 1.0
+Generator: bdist_wheel (0.37.1)
+Root-Is-Purelib: true
+Tag: py3-none-any
+
diff --git a/buildroot-external/rootfs-overlay/home/mycroft/.local/lib/python3.10/site-packages/youtube_search-2.1.2.dist-info/top_level.txt b/buildroot-external/rootfs-overlay/home/mycroft/.local/lib/python3.10/site-packages/youtube_search-2.1.2.dist-info/top_level.txt
new file mode 100644
index 00000000..31eedf6f
--- /dev/null
+++ b/buildroot-external/rootfs-overlay/home/mycroft/.local/lib/python3.10/site-packages/youtube_search-2.1.2.dist-info/top_level.txt
@@ -0,0 +1 @@
+youtube_search
diff --git a/buildroot-external/rootfs-overlay/home/mycroft/.local/lib/python3.10/site-packages/youtube_search/__init__.py b/buildroot-external/rootfs-overlay/home/mycroft/.local/lib/python3.10/site-packages/youtube_search/__init__.py
new file mode 100644
index 00000000..ae3ab21d
--- /dev/null
+++ b/buildroot-external/rootfs-overlay/home/mycroft/.local/lib/python3.10/site-packages/youtube_search/__init__.py
@@ -0,0 +1,65 @@
+import requests
+import urllib.parse
+import json
+
+
+class YoutubeSearch:
+ def __init__(self, search_terms: str, max_results=None):
+ self.search_terms = search_terms
+ self.max_results = max_results
+ self.videos = self._search()
+
+ def _search(self):
+ encoded_search = urllib.parse.quote_plus(self.search_terms)
+ BASE_URL = "https://youtube.com"
+ url = f"{BASE_URL}/results?search_query={encoded_search}"
+ response = requests.get(url).text
+ while "ytInitialData" not in response:
+ response = requests.get(url).text
+ results = self._parse_html(response)
+ if self.max_results is not None and len(results) > self.max_results:
+ return results[: self.max_results]
+ return results
+
+ def _parse_html(self, response):
+ results = []
+ start = (
+ response.index("ytInitialData")
+ + len("ytInitialData")
+ + 3
+ )
+ end = response.index("};", start) + 1
+ json_str = response[start:end]
+ data = json.loads(json_str)
+
+ for contents in data["contents"]["twoColumnSearchResultsRenderer"]["primaryContents"]["sectionListRenderer"]["contents"]:
+ for video in contents["itemSectionRenderer"]["contents"]:
+ res = {}
+ if "videoRenderer" in video.keys():
+ video_data = video.get("videoRenderer", {})
+ res["id"] = video_data.get("videoId", None)
+ res["thumbnails"] = [thumb.get("url", None) for thumb in video_data.get("thumbnail", {}).get("thumbnails", [{}]) ]
+ res["title"] = video_data.get("title", {}).get("runs", [[{}]])[0].get("text", None)
+ res["long_desc"] = video_data.get("descriptionSnippet", {}).get("runs", [{}])[0].get("text", None)
+ res["channel"] = video_data.get("longBylineText", {}).get("runs", [[{}]])[0].get("text", None)
+ res["duration"] = video_data.get("lengthText", {}).get("simpleText", 0)
+ res["views"] = video_data.get("viewCountText", {}).get("simpleText", 0)
+ res["publish_time"] = video_data.get("publishedTimeText", {}).get("simpleText", 0)
+ res["url_suffix"] = video_data.get("navigationEndpoint", {}).get("commandMetadata", {}).get("webCommandMetadata", {}).get("url", None)
+ results.append(res)
+
+ if results:
+ return results
+ return results
+
+ def to_dict(self, clear_cache=True):
+ result = self.videos
+ if clear_cache:
+ self.videos = ""
+ return result
+
+ def to_json(self, clear_cache=True):
+ result = json.dumps({"videos": self.videos})
+ if clear_cache:
+ self.videos = ""
+ return result
diff --git a/buildroot-external/rootfs-overlay/home/mycroft/.local/lib/python3.10/site-packages/youtube_search/__init__.pyc b/buildroot-external/rootfs-overlay/home/mycroft/.local/lib/python3.10/site-packages/youtube_search/__init__.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..340dfd75ff1ef8a9d06e995b5f0333eb9aa9dd78
GIT binary patch
literal 2719
zcmZ`5%WfP+u)F86v*TSq6F)*ofCQ99i8nkXByd8&iBP2ALpB^3DH@HZ+um_zXV%?4
zj@O!%kYYZ7bA)7b%aK1od;up8Epg(MUjT_v-8<{pPBN?RuCA)7sdsJOZ2AbEKmPqa
zo}EDGZ+$ubSa7)oOMD0$MHHtf7@asE=57VnH;58y?IUVEA%RVC2es_yz>n5qy&r#U
zxZHvz^u|ztDFQi@lrU=pWKetG0SOLu_fg=`8uj3G=@j+p#6Avc05xb6AkTbdS~b7V
z3t6nQ4vTo)T~iHVfKW2t6S3BQ{AifKT7@Of!B*lDg{UO319U(R5kMA29rO&ZwQR0m
zP!qjqH{?tdsT8Ufj-)GhC!s7CElb&gr5lEoJHY=8@j4v;+-rC99&7goG0!(-dpXVH
zC~c?7db>Z6-8}nb`J?M?kw|u}AH|QNO(xodks;M5+F_Vvi44Q#{y=%-OATZT7d98W
zcoOf;pRj&;%obx{89$m`n_}!P0gz}5AAr?c)*&8Ziie~mPa%ROeu{p!hL*GsoDyhT
z?$D-IY42cu`Bj`a2R^HnHpp;5mPb*6`HHNU&J*zFmiNf!E2Trhr(52SWC^@lIyx`b
z_U5`$_QmJzvBk@A-rJjRS5E%23gC9Z_~3?W4&+_%LlUL8BN?@PZ3NEH1%gOAlJ9Zif!o30+NUEF{r=3$$}HiV{uJ-uG|WD#yQ-aC6L
zR3kHEosr`Q>JRA%n@IfzG2BED8+-s&cZelK>Iq(eI4z)|Wv~`RiBKEvHsmryO8a@}
zNOEA64#dSRUFs|$>cXnQ@?gRJHhTE$uvXS+{pkM7&`Z#;PW{q5un*A=;(r3mTu1a0C&avMSP>vVc$M4hRqvzn^ubZ!X&_nAu8
zOvQKhINvK=^A*>^ajw@$Tdeq&D!y}c&S?Brg+G4^|8|AHa0-91!oO4D->uH~s`FB%
z{bk@I2X0wE#29UVS`z+ONeIG_>)TgL0@?ol8rOO8T-VI^sH^e5zbn20x$hJ0y@UuW(YhgYEXNxGZd_8bv
zx9F{(DhTDTq@WqXmz&umD`i9*Mm@j
zMKI2k1??^H4ICPx9%aYc+#FnWhKLo|Z0r#ilNW@L|HzAJr-6NZo=iilYrts}O4V&yOy)h9Uoal(UZjNTQHXf#l>4_ZX|7d#a#9UJdvQoFsXO=Nu
zO~fe_R2WBbmnnDDwofN%P39p@V)+@oC-fk2L3zDS_v(u870vX28PlsT03gu;bZF3z
zB+#vO-{wu2sVIc$3OZVAMn8TPSX&mq1c!2H(d&y5{u&@&r=Skk4WJnXwRhj3pyuOR
zp%#A7s_TCYS=3`;sQfVO<+MmO+z7+%B1$WY1zEuL%rWze>*(_9diz*!FJo^YGv~&=
zLg=REp=s2ghJIeZ!p)fi3aWmDa}sfB5C4bSVuDsN?^;Z0r4#!wG=Fh6Il
F{{d=Gvx@)#
literal 0
HcmV?d00001