Menu
Portfolio
Blog
Snippets
Login
Confirm
exit_to_app
Close
Entries
library_add
Utility(Event,Mouse): Log Movement X,Y
delete
Utility(txt): Basic Sentence Generator
delete
Utility(Event,Keyboard): Logger
delete
Utility(txt): Expanded Phrase Generator
delete
Scrape(General|Multi): Paginated Crawler
delete
Scrape(Sunbiz|Multi): Get Biz's By Zip
delete
Utility(Time): Test Load Speed
delete
Scrape(General|Single|NLP): Get Keyword Stats
delete
Scrape(General|Single): Get Text Near Links
delete
Utility(Event|Mouse): Press Down,Up, & Dragend
delete
Utility(Number): Between Range
delete
Utility(Event|Window): On Resize
delete
Scrape(Youtube|Single): Crawl Channel Videos
delete
Scrape(General|Multi): Tiny Link Crawler
delete
Utility(Time): Day of Week Report
delete
Utility(Number): Aspect Ratio Size Pairs
delete
Utility(Data): Sort Object Properties
delete
Scrape(General|Single): RiTa Sentences & Words
delete
Scrape(General|Single): Investigate Element Layers
delete
Scrape(NLP|Single): Using Compromise Plugins
delete
Utility(General): Remote Script Loader
delete
Scrape(General|Single|NLP): Compromise RiTa D3
delete
Scrape(General|Multi|Node): Grouped Node Crawler
delete
Scrape(Amazon|Multi): Crawl Product SERPs
delete
Scrape(Amazon|Multi): Get Paginated Brands
delete
Utility (Data): Download JSON in Browser
delete
Utility (Data): JSON AutoTypes
delete
Scrape(YouTube|Single): Video Page
delete
Utility (Text): Make Page Editable
delete
Utility (Text): Article Editor
delete
Scrape(General|Single|Text): Get Text On Click
delete
Utility (File): DnD File Parser (CSV,JSON,TXT)
delete
Scrape(General|Single): Get Links (Examples)
delete
Scrape(General|Single|Text): Get Sentences by Tag
delete
Utility (File): JSON to CSV via D3.js
delete
Scrape(General|Single): Auto Parse by Content Type
delete
Scrape(General|Single): Get Paragraphs & Sentences
delete
Scrape(Amazon|Multi): Get Reviews by ASIN
delete
Scrape(General|Single): Download Images on Page
delete
Utility(Event,Form): Custom Submit Function
delete
Utility (Fetch): Basic API Post Request
delete
Utility (Event,Form,Fetch): Form Data to API
delete
Utility (Time): Async Delay
delete
Utility (Time): Async Repeat Every N Secs
delete
Scrape(coj): Crawl Property SERPs
delete
Utility (Data): Promise Chain
delete
Utility (Fetch): Examples - JSON,Text,HTML
delete
Scrape(Amazon|Single): Product Review NLP
delete
Utility (Nodejs): Streaming Collections
delete
Scrape(Rate My Professor|Multi): Crawl Prof SERPs
delete
Utility (Time): JS Timer
delete
Utility (Text): Proper Case
delete
Scrape(Thingiverse API): Get Things via Search API
delete
Scrape(General|Single|Node): Get Node Attributes
delete
Scrape(General|Single|Node): Node Attributes + Text
delete
Scrape(Thesaurus): Get Words from SERPs
delete
Scrape(Walmart): Crawl Product SERPs
delete
Scrape(free3d): Crawl 3D Model SERPs
delete
Scrape(Aliexpress|Single): Get Products From SERP
delete
Scrape(simplify3d): Crawl Post SERPs
delete
Scrape(Twitter): Crawl Post Feed (infinite scroll)
delete
Scrape(DDuckGo|Single): Get Links from SERP
delete
Scrape(General|Single): Get Tokens String Distance
delete
Scrape(General|Single): Content Report
delete
Scrape(General|Single|Node): Node Recon (CSV)
delete
Utility (File): D3 JSON to CSV
delete
Scrape(coj|Multi): Crawl Property SERPs
delete
Scrape(coj|Single): sidenote
delete
Scrape(General|Single): Recursive Node Crawler
delete
Utility (Event,Window): Scroll to Root ScrollHeight
delete
Scrape(Indeed|Multi): Crawl Job SERPs
delete
Scrape(Thingiverse API): Get Things By Id
delete
Scrape(Thingiverse): Crawl Things by Category
delete
Scrape(Thingiverse API): Get Thing Batches by Id via DnD
delete
Scrape(YouTube|Single): Get Video Playlist
delete
Utility (Data): Join Thing Metrics & Meta
delete
Utility(Data): Get Nested Array Lengths
delete
Utility (Twitter): Hide Followed Profiles
delete
Utility (Time): YYYY-MM-DD HH:MM:SS
delete
Scrape(Thangs|Multi): Crawl 3D Model SERPs
delete
Scrape(PrusaPrints,Multi): Get Prints
delete
Scrape(Reddit,Single): Get Posts
delete
Userscript(Youtube): Scrape Channel Videos
delete
Userscript(Youtube): Tab Manager
delete
Scrape(Sunbiz|Multi): Biz Details
delete
Utility(Data):DnD View Types
delete
Scrape(General|Single|Node): Select Nodes by Attr
delete
Scrape(Aliexpress|Multi) Get Products via API
delete
Utility(Text): Strip Web Page CSS, Script, Events, Media
delete
Scrape(Youtube|Single) Get Subs
delete
Scrape(General|Single): SelectAll ReduceByProp
delete
Scrape(General|Single): SelectAll ReduceMultiProps
delete
Scrape(General|Multi): Tiny Link Crawler + Delay & Node Reports
delete
Scrape(P5|Multi): Get Examples
delete
Scrape(LinkedIn|Single): Find New Connections
delete
UserScript(linkedIn|Single) Get Jobs
delete
Utility (Time): Date From Days Ago
delete
Utility(General|Single) Keep Scrolling
delete
Scrape(YouTube) Videos From Search
delete
Utility(General|Single): getOffset
delete
Utility(Event,Form): Get Data On Form Input
delete
Utility(Event,Element): ResizeObserver
delete
COCO-SSD Object Categories
delete
Scrape(Wikipedia|Multi): What Links Here?
delete
Scrape(DDuckGo|Single): Download Images
delete
Scrape(General|Single|NLP): Compromise nGram
delete
Scrape(Thingiverse API): Get Thing Batches by Id via DnD
Edit Snippet
var downloadCSV = (data, fileName) => { var d = document, a = d.createElement('a'); a.href = window.URL.createObjectURL(new Blob([d3.csvFormat(data)],{type:'text/csv;charset=utf-8;'})); a.setAttribute('download', `${fileName}.csv`); d.body.appendChild(a); a.click(); d.body.removeChild(a); finalResults = []; }; var finalResults = []; (() => { var options = { scripts: ["https://d3js.org/d3.v6.min.js"], } var run = (data) => { console.log(`Import Data by dropping files anywhere on the browser window. Export Data: downloadCSV(data, "fileName") `); } const fileToString = (inputFile) => { const fr = new FileReader(); return new Promise((resolve, reject) => { fr.onerror = () => {fr.abort(); reject({error:"file reader error"})} fr.onload = () => resolve(fr.result); fr.readAsText(inputFile); })} var apiFetch = (d) => fetch(` https://api.thingiverse.com/things/${d.id}`, { "headers": { "Authorization": "Bearer 56edfc79ecf25922b98202dd79a291aa" } }) var requestBatch = async (arr) => { var batch = []; for (let d of arr){ try{ batch.push(apiFetch(d)); }catch(e){ console.log({e}); } } var responses = await Promise.all(batch); var collection = []; for (let res of responses){ collection.push(res.json()) } var data = await Promise.all(collection); return await data; } const dropHandler = async (e) => { e.preventDefault(); //disable default drop behavior for await (let file of e.dataTransfer.files) { //loop through dropped files let r = {format:file.name.slice(file.name.lastIndexOf(".")+1)} const str = await fileToString(file); //convert dropped file to string var parse = () => { var stringParser = () => { var parseStr = (delimiter) => str.split(delimiter); var testStr = (delimiter) => str.indexOf(delimiter) > -1 var t = {hasLines:testStr("\n"),hasComma:testStr(","),hasTab:testStr("\t")}; return t.hasLines ? parseStr("\n") : t.hasTab ? parseStr("\t") : t.hasComma ? parseStr(",") : []; } return r.format == "json" ? JSON.parse(str) : r.format == "txt" ? stringParser() : r.format == "csv" ? d3.csvParse(str) : [] }; r.name = file.name.replace("."+r.format,""), r.data = parse(); var count = r.data.length; console.log({r}); async function* ag() { let i = 0; while (i < Math.ceil(count/75)) { yield i++; } } for await (let n of ag()) { n = n * 75; var batchData = await requestBatch(r.data.slice(n,(n+75))); for await (let item of batchData){ finalResults.push(Object.entries(item).reduce((o,e)=> { e[0].indexOf("_count") > -1 || e[0] == "id" ? o[e[0]] = e[1] : null; return o; },{})); count--; if(count <= 0 || finalResults.length >= 10000){ downloadCSV(finalResults, "thingsById"); } } } } } window.ondragover = (e) => e.preventDefault(); //Prevent default browser behavior window.ondrop = (e) => dropHandler(e); //Handle dropped files const loadScripts = (scripts) => { console.log(`Loading External Scripts`); var scriptCountdown = scripts.length; var loadScript = (url) => { var scriptsLoaded = () => { scriptCountdown == 0 ? run() : null; return true; } var imported = document.createElement('script'); imported.src = url; imported.addEventListener("load", () => {scriptCountdown--; scriptsLoaded();}); document.head.appendChild(imported); } scripts.forEach(loadScript) } loadScripts(options.scripts); })();