first
This commit is contained in:
commit
2f9d336788
24
README.md
Normal file
24
README.md
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# kashire's youtube query
|
||||||
|
|
||||||
|
kyq searches on youtube so you don't have to.
|
||||||
|
I only made it because I hate opening youtube
|
||||||
|
to find videos to watch on my desktop.
|
||||||
|
|
||||||
|
## how to use
|
||||||
|
`./kyq -h` for help
|
||||||
|
`./kyq -q [query]` for searching.
|
||||||
|
After searching just run it through your favorite video player.
|
||||||
|
`mpv $url`
|
||||||
|
|
||||||
|
You could also use the python script:
|
||||||
|
`python kyq.py $query` -- No help feature here.
|
||||||
|
|
||||||
|
|
||||||
|
## Speed difference
|
||||||
|
not the reason I made it but it's interesting to note
|
||||||
|
![speed_comparison.png](speed_comparison.png)
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
* none for the shell script
|
||||||
|
* bs4 for the python script.
|
||||||
|
|
41
kyq
Executable file
41
kyq
Executable file
@ -0,0 +1,41 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
package="kyq"
|
||||||
|
|
||||||
|
youtubeURI="https://www.youtube.com/results?search_query="
|
||||||
|
|
||||||
|
if [ -z "$1" ]; then
|
||||||
|
echo 'You must specify flag. (e.g. -h)'
|
||||||
|
fi
|
||||||
|
|
||||||
|
while test $# -gt 0; do
|
||||||
|
case "$1" in
|
||||||
|
-h|--help)
|
||||||
|
echo "$package - For returning a list of youtube videos."
|
||||||
|
echo " "
|
||||||
|
echo "$package [option] [argument]"
|
||||||
|
echo " "
|
||||||
|
echo "options:"
|
||||||
|
echo "-h, --help Shows this"
|
||||||
|
echo "-q, --query Search for specific query on youtube"
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
-q|--query)
|
||||||
|
query=$(echo ${@:2} | sed 's/ /%20/g' )
|
||||||
|
html=$(wget -qO- $youtubeURI$query)
|
||||||
|
echo $html >> tmp.html
|
||||||
|
title=$(xmllint --html --xpath '//h3/a[@href]/span' tmp.html)
|
||||||
|
url=$(xmllint --html --xpath '//h3/a/@href' tmp.html)
|
||||||
|
echo $title | sed 's/<\/span>/\n/g' | sed 's/^.*>//' >> A_TITLE.txt
|
||||||
|
echo $url | sed 's/href="/\n/g' | sed 's/&.*//' | sed 's/"//' | sed 's/^/https:\/\/www.youtube.com/' | tail -n +2 | sed '/user/d' >> A_URL.txt
|
||||||
|
# Removes duplicate URL
|
||||||
|
$(awk '!x[$1]++' A_URL.txt >> A_URL_SORTED.txt)
|
||||||
|
## Loop through both files and post them side by side.
|
||||||
|
# lol...
|
||||||
|
$(paste A_URL_SORTED.txt A_TITLE.txt > A_FINISHED.txt)
|
||||||
|
cat A_FINISHED.txt
|
||||||
|
$(rm A_FINISHED.txt A_TITLE.txt A_URL_SORTED.txt A_URL.txt tmp.html)
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
26
kyq.py
Normal file
26
kyq.py
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
import urllib.request
|
||||||
|
from bs4 import BeautifulSoup
|
||||||
|
import sys
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
# pip3 install bs4 --user
|
||||||
|
## NOTE: This is a tempory solution for now.
|
||||||
|
## I really need this to work via bash
|
||||||
|
## or through the youtube API.
|
||||||
|
user_query = ""
|
||||||
|
|
||||||
|
for x in range(1, len(sys.argv)):
|
||||||
|
user_query += sys.argv[x]
|
||||||
|
user_query += " "
|
||||||
|
|
||||||
|
query = urllib.parse.quote(user_query)
|
||||||
|
url = "https://www.youtube.com/results?search_query=" + query
|
||||||
|
response = urllib.request.urlopen(url)
|
||||||
|
html = response.read()
|
||||||
|
soup = BeautifulSoup(html, 'html.parser')
|
||||||
|
for vid in soup.findAll(attrs={'class':'yt-uix-tile-link'}):
|
||||||
|
if ("/user/" not in vid['href']) and ("&list" not in vid['href']):
|
||||||
|
vals = 30 - len(vid['href'])
|
||||||
|
spaces = vals * ' '
|
||||||
|
print(' https://www.youtube.com' + vid['href'] + spaces + vid['title'])
|
||||||
|
|
BIN
speed_comparison.png
Normal file
BIN
speed_comparison.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 48 KiB |
Loading…
Reference in New Issue
Block a user