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