News for hackers. Stuff that matters.

portInit

Re:Show HN: Crul || Query Any Webpage or API on Wednesday March 01, 2023 @03:25AM (#34980006)
Appreciate you taking the time to play around with crul and share your thoughts! They're incredibly valuable.

1. Although it has limitations, were you able to try the normalize command? https://www.crul.com/docs/queryconcepts/api-normalization

2. Will need to think about this some more.

3. Although we don't yet handle pdfs, the rest of the flow is one we aiming to accomplish with crul. Other than pdf, the pieces should be there and would love to understand this further

Re:Show HN: Crul || Query Any Webpage or API on Wednesday March 01, 2023 @12:48AM (#34979197)
We certainly have, it is admittedly quite new to both of us, so we have been exploring the best way to introduce something like this, as well as tying up technical bits. The open core model with commercial features is certainly appealing.

Open to any perspectives on this.

Re:Show HN: Crul || Query Any Webpage or API on Wednesday March 01, 2023 @12:41AM (#34979161)
Thank you! Will make this more clear.
Re:Show HN: Crul || Query Any Webpage or API on Tuesday February 28, 2023 @10:29PM (#34978416)
Thank you! The query below would get you the full page text, although it likely wont be too legible. I'll read up on readability JS some, it looks quite magic and could possibly be added in.

open https://news.ycombinator.com/item?id=34970917 || filter "(nodeName == 'BODY')" || table innerText

Often you can use crul to discover the html structure in the results table. With a `find "text string"` to filter rows and then a filter on the column values that identify the desired elements.

Re:Show HN: Crul || Query Any Webpage or API on Tuesday February 28, 2023 @10:25PM (#34978390)
I'm having trouble replicating. Although I did get a prompt from Safari to allow downloads from crul.com. The screenshot looks like it is redirecting from the button, is that what you are seeing - rather than the button triggering a download?
Re:Show HN: Crul || Query Any Webpage or API on Tuesday February 28, 2023 @10:11PM (#34978310)
Yeah exactly. Living up to your username :) nice find! Note this is a global default, unlike domain policies which are associated with a domain.
Re:Show HN: Crul || Query Any Webpage or API on Tuesday February 28, 2023 @10:08PM (#34978297)
Thanks for the heads up. Could you share what browser you are using? And are you downloading from https://www.crul.com/account?
Re:Show HN: Crul || Query Any Webpage or API on Tuesday February 28, 2023 @10:07PM (#34978286)
You would need to do a bit filtering to get the exact text you need. For example, to get the text for this post you could run:

open https://news.ycombinator.com/item?id=34970917 || filter "(attributes.class == 'toptext')" || table innerText

Re:Show HN: Crul || Query Any Webpage or API on Tuesday February 28, 2023 @08:47PM (#34977713)
We hand wrote a number of integrations, sometimes it was a simple as reusing a schema with slightly different values, we are also using the awesome https://www.benthos.dev/!
Re:Show HN: Crul || Query Any Webpage or API on Tuesday February 28, 2023 @08:29PM (#34977581)
That's unfortunate. A quick look suggests ISP but maybe not with the hotspot. Will do a little more digging.
Re:Show HN: Crul || Query Any Webpage or API on Tuesday February 28, 2023 @07:36PM (#34977123)
Thank you! Docker image has everything for functionality, there's just an update check that pings our end to check for updates.
Re:Show HN: Crul || Query Any Webpage or API on Tuesday February 28, 2023 @06:34PM (#34976491)
Sorry to hear that - we do need to think about this. It's our first pass at product tiers and features and we may need to adjust.

Scheduling and Domain Policies were the main features we chose to gate initially as they don't affect core functionality other than performance and deployment.

Re:Show HN: Crul || Query Any Webpage or API on Tuesday February 28, 2023 @06:11PM (#34976262)
We'll have to see how close our current postgres integration is! Would like to understand more and will reach out.
Re:Show HN: Crul || Query Any Webpage or API on Tuesday February 28, 2023 @06:08PM (#34976227)
Thanks for this, we're still trying to figure out these details ourselves.

Related to the quote, we've seen interest for API data wrangling, where prepackaged data feeds can be cumbersome to edit, or other implementation details become challenging like credential management, domain throttling, scheduling, checkpointing, export, etc.

It's also interesting for webpage data when you need to use a particular page as an index of links to filter and crawl. We've tried to build an abstraction layer around that.

Initially, we were mainly focused on webpages, and wanted to bypass the visuals of the browser and use a headless browser to fulfill network requests, render js, etc. then convert the page to flat table of enriched elements. With the APIs as another data set there is some work for us to do around language.

We're now trying to figure out what workflows are most relevant for crul to optimize around, as well, honestly - we just built what we thought was cool. Some features/workflows will certainly be more straightforward with existing tools and software - especially for a technically savvy user.

Re:Show HN: Crul || Query Any Webpage or API on Tuesday February 28, 2023 @05:47PM (#34976026)
Ah! We didn't quite get an html table command in this release but it will be in the next one.

Here's a query that shows an option, but the table command will be far more straightforward.

open https://www.w3schools.com/html/html_tables.asp --dimension || filter "(nodeName == 'TD')" || groupBy boundingClientRect.top || table _group.0.innerText _group.1.innerText _group.2.innerText

Re:Show HN: Crul || Query Any Webpage or API on Tuesday February 28, 2023 @05:22PM (#34975774)
Thank you! Really means a lot to us
Re:Show HN: Crul || Query Any Webpage or API on Tuesday February 28, 2023 @05:10PM (#34975629)
Agreed, caching does come with its own set of quirks and mind-numbing bugs, crul does have a caching override flag at the command/stage level which alleviates some of this: https://www.crul.com/docs/queryconcepts/common-flags#--cache

Your provided links are interesting and something for us think about some more. Honestly, I would be quite interested in hearing more about your experiences.

Re:Show HN: Crul || Query Any Webpage or API on Tuesday February 28, 2023 @04:21PM (#34975021)
Yes that is possible, although we currently have the scheduler set as an enterprise feature. We should look into a free trial, I enjoyed the flow of the EasyDataTransform installation with the free trial option.
Re:Show HN: Crul || Query Any Webpage or API on Tuesday February 28, 2023 @04:12PM (#34974927)
Would love to chat and try a few use cases together! At first glance I see you can drag in csv files, which could be generated by crul and either manually downloaded or scheduled and written to the filesystem.

Crul is a really easy way of populating tools that need data, whether it's just a one time thing for a demo/static data set or a scheduled data feed, so this kind of usage makes sense to us.

Re:Show HN: Crul || Query Any Webpage or API on Tuesday February 28, 2023 @04:02PM (#34974795)
Yeah the default domain throttle policy is 1 req per second per domain. Configurable through domain policies https://www.crul.com/docs/features/domain-policies - although currently an enterprise feature.

We found that it becomes too easy to break API request limits or spam a website otherwise.

However if you rerun that query it should load pretty instantly due to the caching layers, so the actual querying/filtering of the data part is smoother/faster.

Re:Show HN: Crul || Query Any Webpage or API on Tuesday February 28, 2023 @03:59PM (#34974749)
Thank you and your comment really warms our hearts. It's been fun building in the "cave" but comes with self doubt.

We've built using a microservice architecture to allow us to scale out the parts that need to scale, mainly the workers, which interact with a queue, although we'll need to move from the parts that are currently nodejs for some perf gains and a smaller footprint. All those microservices are consolidated for the desktop variants.

Network concurrency is mostly throttled by our domain policy manager (named "gonogo" - lol) at 1 req/per outbound domain a sec. It's a little slow for a default, but also configurable and provides a nice guardrail for api request limits, etc. Overall async networking has been quite tricky, esp with retries, etc., and we're still iterating on it. Agreed on the profiling difficulties.

Re:Show HN: Crul || Query Any Webpage or API on Tuesday February 28, 2023 @03:02PM (#34974053)
This makes sense and I am curious about this. Was there consistency between those 1k client sites or were they all rather different? Mind if I reach out?
Re:Show HN: Crul || Query Any Webpage or API on Tuesday February 28, 2023 @02:38PM (#34973797)
lol - yeah. https://www.imdb.com/title/tt0085811/?ref_=tt_urv

We've been thinking of ways to make the pronunciation a bit clearer, maybe a mascot or something. Open to ideas!

Re:Show HN: Crul || Query Any Webpage or API on Tuesday February 28, 2023 @02:06PM (#34973403)
It's a tricky question. Part of it is looking at APIs as the main source of data for scheduled queries/data feeds.

Crul sort of operates as a text only browser when interacting with a single page at a time, but when you expand and open up multiple tabs it becomes a little more challenging. We have the concept of domain policies which allow you to control how quickly/slowly you access something. There are also some puppeteer level options that could be relevant, even a headful toggle.

We have not invested too much time into this yet as we focused on getting the core functionality working. We think there are use cases (particularly with APIs) that don't run into this problem, but if it comes up more often we'll come up with some options.

Re:Show HN: Crul || Query Any Webpage or API on Tuesday February 28, 2023 @01:24PM (#34972855)
At this point we're considering it a foundational concept to build around - web content changes, so our best option currently is to make the query as easy as possible to change, and alert when things break.

We have done some preliminary work in some AI or other intelligence for pattern recognition to be able to handle structural changes better, but still have lots of work.

But the expanding and querying concepts also make a lot of sense with APIs, which tend to be a little more stable.

Re:Show HN: Crul || Query Any Webpage or API on Tuesday February 28, 2023 @01:20PM (#34972806)
Will absolutely reach out! Our experience has been that just getting data is often really challenging, so we've really focused on that piece, and being able to easily share with destinations that are purpose built for analytics, viz, etc.

Thanks for checking it out!

Re:Show HN: Crul || Query Any Webpage or API on Tuesday February 28, 2023 @11:47AM (#34971498)
Thanks @dishwishy! The find (https://www.crul.com/docs/commands/find) command works really well if you are trying to construct a filter expression and just want to quickly look for results containing a particular string so you can see the defining attributes/column+row values.

There's a short writeup of this pattern here: https://www.crul.com/docs/examples/how-to-find-filters

Re:Show HN: Crul || Query Any Webpage or API on Tuesday February 28, 2023 @11:13AM (#34970922)
Hi HN, we’re Carl and Nic, the creators of crul (https://www.crul.com), and we’ve been hard at work for the last year and a half building our dream of turning the web into a dataset. In a nutshell crul is a tool for querying and building web and api data feeds from anywhere to anywhere.

With crul you can crawl and transform web pages into csv tables, explore and dynamically query APIs, filter and organize data, and push data sets to third party data lakes and analytics tools. Here’s a demo video, we’ve been told Nic sounds like John Mayer (lol) (https://www.crul.com/demo-video)

We’ve personally struggled wrangling data from the web using puppeteer/playwright/selenium, jq or cobbling together python scripts, client libraries, and schedulers to consume APIs. The reality is that shit is hard, doesn’t scale (classic blocking for-loop or async saturation), and comes with thorny maintenance/security issues. The tools we love to hate.

Crul’s value prop is simple: Query any Webpage or API for free.

At its core, crul is based on the foundational linked nature of Web/API content. It consists of a purpose built map/expand/reduce engine for hierarchical Web/API content (kind of like postman but with a membership to Gold's Gym) with a familiar parser expression grammar that naturally gets the job done (and layered caching to make it quick to fix when it doesn’t on the first try). There’s a boatload of other features like domain policies, scheduler, checkpoints, templates, REST API, Web UI, vault, OAuth for third parties and 20+ stores to send your data to.

Our goal is to open source crul as time and resources permit. At the end of the day it’s just the two of us trying to figure things out as we go! We’re just getting started.

Crul is one bad mother#^@%*& and the web is finally yours!

Download crul for free as a Mac OS desktop application or as a Docker image (https://www.crul.com) and let us know if you love it or hate it. (https://forms.gle/5BXb5bLC1D5QG7i99) And come say hello to us on our slack channel - we’re a friendly bunch! (https://crulinc.slack.com/)

Nic and Carl (https://www.crul.com/early-days)

Older »