//////////////////////////////////////////////////////////
///// PhantomJS URL Scraper v.1.3 /////
//
// Copyrighted by +A.M.Danischewski 2016+ (c)
// This program may be reutilized without limits, provided this
// notice remain intact.
//
// Usage: phantomjs phantom_urls.js <URL> [["class"|"id"] [<query id/class name>]]
//
// Argument 1: URL -- "https://www.youtube.com/watch?v=8TniRMwL2Vg"
// Argument 2: "class" or "id"
// Argument 3: If Argument 2 was provided, "class name" or "id name"
//
// By default this program will display ALL urls from a user supplied URL.
// If a class name or id name is provided then only URL's from the class
// or id are displayed.
//
///////////////////////////////////
var page = require('webpage').create(),
system = require('system'),
address;
if (system.args.length === 1) {
console.log(' Usage: phantomjs phantom_urls.js <URL> [["class"|"id"] [<query id/class name>]]');
phantom.exit();
}
address = system.args[1];
querytype= system.args[2];
queryclass = system.args[3];
page.open(address, function(status) {
if (status !== 'success') {
console.log('Error loading address: '+address);
} else {
//console.log('Success! In loading address: '+address);
}
});
page.onConsoleMessage = function(msg) {
console.log(msg);
}
page.onLoadFinished = function(status) {
var dynclass="function() { window.class_urls = new Array(); window.class_urls_next=0; var listings = document.getElementsByClassName('"+queryclass+"'); for (var i=0; i < listings.length; i++) { var el = listings[i]; var ellnks=[].map.call(el.querySelectorAll('a'),function(link) {return link.getAttribute('href');}); var elhtml=el.innerHTML; window.class_urls.push(ellnks.join('\\n')); }; return window.class_urls;}";
var dynid="function() { window.id_urls = new Array(); window.id_urls_next=0; var listings = document.getElementById('"+queryclass+"'); var ellnks=[].map.call(listings.querySelectorAll('a'),function(link) {return link.getAttribute('href');}); var elhtml=listings.innerHTML; window.id_urls.push(ellnks.join('\\n')); return window.id_urls;}";
var allurls="function() { var links = page.evaluate(function() { return [].map.call(document.querySelectorAll('a'), function(link) { return link.getAttribute('href'); };); };); console.log(links.join('\\n')); }";
var page_eval_function="";
if (querytype === "class") {
console.log(page.evaluate(dynclass).toString().replace(/,/g, "\n"));
} else if (querytype === "id") {
console.log(page.evaluate(dynid).toString().replace(/,/g, "\n"));
} else {
var links = page.evaluate(function() {
return [].map.call(document.querySelectorAll('a'), function(link) {
return link.getAttribute('href');
});
});
console.log(links.join('\n'));
}
phantom.exit();
};
Sunday, January 31, 2016
Simple Webscraper with PhantomJs!
Wednesday, January 20, 2016
cp to Multiple Destinations - cpm
alias cpm='_() { src="${1%/}"; shift; printf "\"%s\" " "$@" | xargs -n 1 cp -vR "${src}"; }; _'
Wednesday, January 6, 2016
To the Clipboard! In Bash
#!/usr/bin/env bash
### Copyrighted +A.M.Danischewski (c)2016+
### You may reuse this software without limit provided
### this notice remain in tact.
###
### File: clip.bsh
### Requires: xsel
### Description: This script copies something to the clipboard, I
### recommend a simple alias, such as: $> alias clip='clip.bsh'
### Then you can:
### $> echo "hi there" | clip
### $> clip myblogpost.html
### $> clip <<< "little message"
### _-= Enjoy! _-=
declare cliptxt="${1}"
declare rdlnk=$(readlink /proc/$$/fd/0)
declare nl=$(echo -en "\x01")
if grep -Eq "^pipe:|deleted" <<< "${rdlnk}"; then
[[ ! -z "${cliptxt}" ]] && cliptxt=""
while IFS= read -d $'\n' -r piped_input || break; do cliptxt="${cliptxt}${piped_input}${nl}"; done
elif [[ -f "${rdlnk}" ]]; then ## Its a redirected file
cliptxt=$(< "${rdlnk}")
elif [[ -e "${cliptxt}" ]]; then ## Its a filename
cliptxt=$(< "${cliptxt}") ## File name proper no redirect
else
echo " *** Something is wrong, input not read by ${0}."
fi
echo -En "${cliptxt}" | tr "${nl}" "\n" | xsel -ib
exit 0
Bash Sound Fader
#!/usr/bin/env bash
### Copyrighted +A.M.Danischewski (c)2016+
### You may reuse this software without limit provided
### this notice remain in tact.
###
### File: fader.bsh
### Description: Simple starter framework for sound manipulation.
### $> alias fade='fader.bsh'
### $> fade 90
### Note: If its broken for some reason, perhaps you have a different
### sound card configuration, don't use Alsa/Pulse etc.
### To fix it find a way to make the following commands work, and
### search and replace them in the code below:
###
### getvol -- The next command should return an integer of the current
### volume level:
### amixer -D pulse sget Master | sed -n "/Left: Playback/p" | \
### grep -o "\[[0-9]*\%" | sed "s/^.//;s/.\$//"
###
### setvol -- where ${a} is any integer, should set the volume:
### amixer -D pulse sset Master ${a}% &>"${DISCARD_DEV}"
###
### _-= Enjoy! _-=
declare fade_step=${2:-.05}
declare target_vol=${1}
declare DISCARD_DEV="/dev/random"
(($#==0)) || [[ "${1}" =~ ^- ]] && usage
function usage() {
echo " Usage: fade <target volume> <fade_speed [.05-10]>"
exit 0
}
function getvol() {
amixer -D pulse sget Master | sed -n "/Left: Playback/p" | \
grep -o "\[[0-9]*\%" | sed "s/^.//;s/.\$//"
}
function sanity_checks() {
((${target_vol}>100)) && target_vol=100
((${target_vol}<0)) && target_vol=0
}
function fade() {
local curr_vol=$(getvol)
for a in $(eval echo {${curr_vol}..${target_vol}}); do
amixer -D pulse sset Master ${a}% &>"${DISCARD_DEV}"
sleep ${fade_step}
done
}
function main() {
sanity_checks
fade &
}
main
exit 0
Monday, January 4, 2016
Numbers to Words! In Bash
#!/usr/bin/env bash
### Copyrighted +A.M.Danischewski (c)2016+
### You may reuse this software without limit provided
### this notice remain in tact.
### Version: 1.03
### File: num2str.bsh
### Description: This script turns numbers into words!
### $> num2str.bsh 112975
### One Hundred Twelve Thousand Nine Hundred Seventy Five
### $> num2str.bsh 112975 anyflag ## More verbose!
### One Hundred Twelve Thousand Nine Hundred Seventy Fifth
### $> num2str.bsh 1
### One
### $> num2str.bsh
### First
### _-= Enjoy! _-=
declare -a units=("" "one" "two" "three" "four" "five" "six" "seven" \
"eight" "nine" "ten" "eleven" "twelve" "thirteen" "fourteen" \
"fifteen" "sixteen" "seventeen" "eighteen" "nineteen")
declare -a tens=("" "" "twenty" "thirty" "forty" "fifty" "sixty" "seventy" "eighty" "ninety")
declare -a unitsverbose=("" "first" "second" "third" "fourth" "fifth" "sixth" \
"seventh" "eighth" "ninth" "tenth" "eleventh" "twelfth" "thirteenth" \
"fourteenth" "fifteenth" "sixteenth" "seventeenth" "eigteenth" \
"nineteenth")
declare numstr="${1}"
declare rdlnk=$(readlink /proc/$$/fd/0)
if grep -Eq "^pipe:|deleted" <<< "${rdlnk}"; then
[[ ! -z "${numstr}" ]] && numstr="" && set -- ourdearflag again
while IFS= read -r piped_input || break; do numstr="${numstr}${piped_input}"; done
elif [[ -f "${rdlnk}" ]]; then
[[ ! -z "${numstr}" ]] && numstr="" && set -- ourdearflag again
numstr=$(head -1 "${rdlnk}") ## Only line 14u, you want more than h4ck.
elif [[ -e "${numstr}" ]]; then
numstr=$(head -1 "${numstr}") ## File name proper no redirect.
fi
function main() {
local tmpnum=""
local tmpnumv=""
if (($# > 1)); then
## If more than 2 digits, convert only the ((last digit) (if > 0)) or last 2 digits.
if ((${#numstr} > 2)); then
tmpnumv=$(sed 's/^\(.*\)\(..$\)/\2/' <<< "$numstr")
tmpnum="$(sed 's/..$//' <<< "$numstr")00"
tmpnum=$(convert ${tmpnum})
numstr=$((10#${tmpnumv}))
tmpnumv=$(convert ${tmpnumv} "unitsverbose")
((${#numstr} == 2)) && ((${numstr}>19)) && ((${numstr:1:1}==0)) && tmpnumv="$(sed 's/y$//' <<< "${tmpnumv}")ieth"
numstr="${tmpnum} ${tmpnumv}"
elif ((${#numstr} == 2)) && ((${numstr}>19)); then
numstr="$(sed 's/y$//' <<< $(convert "${numstr}" "unitsverbose"))ieth"
else ## Convert the whole number to verbose
numstr=$(convert "$numstr" "unitsverbose")
fi
grep -qEi 'hundred$|thousand$|million$|billion$' <<< "${numstr}" && numstr="${numstr}th"
else ## Normal conversion
numstr=$(convert "$numstr")
fi
## Temp, fix for 329478932 and other large numbers that may cause a double space.
sed 's/[ ]*$//;s/ / /g' <<< "${numstr}"
}
function convert() {
local -i INTEGER=$((10#${1}))
local unitstype=${2:-"units"} ## units or unitsverbose
if (($INTEGER < 0)); then
echo -en "minus "
convert $(($INTEGER*-1))
elif (($INTEGER < 20)); then
eval echo -en \${${unitstype}[$INTEGER]}
elif (($INTEGER < 100)); then
echo -en ${tens[$(($INTEGER/10))]}
(($INTEGER%10)) && echo -en " "
eval echo -en \${${unitstype}[$(($INTEGER%10))]}
elif (($INTEGER < 1000)); then
eval echo -en "\${${unitstype}[$(($INTEGER/100))]} hundred"
(($INTEGER%100)) && echo -en " "
convert $(($INTEGER%100))
elif (($INTEGER < 1000000)); then
convert $(($INTEGER/1000))
echo -en " thousand"
(($INTEGER%1000)) && echo -en " "
convert $(($INTEGER%1000))
elif (($INTEGER < 1000000000)); then
convert $(($INTEGER/1000000))
echo -en " million "
(($INTEGER%1000)) && echo -en " "
convert $(($INTEGER%1000000))
else
convert $(($INTEGER/1000000000))
echo -en " billion"
(($INTEGER%1000000000)) && echo -en " "
convert $(($INTEGER%1000000000))
fi
}
main $@ | sed 's/^./\U&/;s/ [^ ]/\U&/g'
exit 0
Sunday, January 3, 2016
Word dılɟ! in Bash
#!/bin/bash
### Copyrighted +A.M.Danischewski (c)2015+
### You may reuse this software without limit provided this notice
### remain in tact.
###
### File: wordflip.bsh
### Description: This script turns text upside down! =)
### It can accept piped data and redirects,
### $> wordflip.bsh <<< "some txt"
### $> echo -en "flip\nme\n" | wordflip.bsh
### _-= Enjoy! _-=
declare word=""
declare -A wordlist
wordlist["a"]="\u0250"
wordlist["b"]="q"
wordlist["c"]="\u0254"
wordlist["d"]="p"
wordlist["e"]="\u01dd"
wordlist["f"]="\u025f"
wordlist["g"]="\u0183"
wordlist["h"]="\u0265"
wordlist["i"]="\u0131"
wordlist["j"]="\u027e"
wordlist["k"]="\u029e"
wordlist["l"]="l"
wordlist["m"]="\u026f"
wordlist["n"]="u"
wordlist["o"]="o"
wordlist["p"]="d"
wordlist["q"]="b"
wordlist["r"]="\u0279"
wordlist["s"]="s"
wordlist["t"]="\u0287"
wordlist["u"]="n"
wordlist["t"]="\u0287"
wordlist["v"]="\u028c"
wordlist["w"]="\u028d"
wordlist["x"]="x"
wordlist["y"]="\u028e"
wordlist["z"]="z"
wordlist["]"]="["
wordlist["["]="]"
wordlist[","]="'"
wordlist["'"]=","
wordlist["("]=")"
wordlist[")"]="("
wordlist["{"]="}"
wordlist["}"]="{"
wordlist["?"]="\u00bf"
wordlist["!"]="\u00a1"
wordlist["\""]=","
wordlist[">"]="<"
wordlist["<"]=">"
wordlist["+"]="+"
wordlist["_"]="\u203e"
wordlist[";"]="\u061b"
## Handle piped input and here-string redirects.
if readlink /proc/$$/fd/0 | grep -Eq "^pipe:|deleted"; then
word=""
while IFS= read -r PIPED_INPUT || { DONE=1; }; do
PIPED_INPUT=$(sed 's#\\#\\\\#g' <<< "${PIPED_INPUT}")
word="${word}${PIPED_INPUT}+"
((${DONE})) && break;
done
else
word="${1}"
fi
revword=$(echo "$word"|rev)
for i in $(eval echo "{1..${#revword}}"); do
printf "${wordlist[${revword:$((${i}-1)):1}]}"
done | sed 's/^+*//' | tr '+' '\n'
echo
exit 0
Boustrophedonify your text!
alias boustrophedon='sed -n "1{p;b a};{/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//;p};n;p;:a"'
Friday, January 1, 2016
Ls File Path to Clipboard / via readlink and xsel
alias lsp='_(){ readlink -f "${1}" | tee /dev/stderr | head -1 | xsel -ib; }; _'
Subscribe to:
Posts (Atom)