notaboutdave 6 years ago

This is pretty great. It looks like it automatically writes to the next logical empty cell.

  curl https://www.bitstamp.net/api/v2/ticker/btcusd \
  | grep 'last": *"\d*\.\d*' -o | grep '\d*\.\d*' -o \
  | tosheets -c A1 --spreadsheet=foo
^ That will append the last BTC price to column A of sheet 'foo'
  • sillysaurus3 6 years ago

    Can I nerd out over how unreasonably effective regexps are?

    That's basically a mini JSON parser in 48 characters.

    • gcr 6 years ago

      With a domain-specific tool, it's even easier though.

          curl ... | jq -r .last
      • sillysaurus3 6 years ago

        Sure. But you can't use jq to scrape arbitrary websites, for example. :)

        • dpflan 6 years ago

          Jeff Atwood has an entertaining post about parsing HTML with regular expressions:

          https://blog.codinghorror.com/parsing-html-the-cthulhu-way/

          “”” That's right, if you attempt to parse HTML with regular expressions, you're succumbing to the temptations of the dark god Cthulhu's … er … code. “””

          • ams6110 6 years ago

            Parsing and scraping are different things though. You don't need to parse a web page to extract specific things from it.

        • nurettin 6 years ago

          For cases where a website is not a tutorial for websites, regex is a suitable tool for scraping.

    • heptathorp 6 years ago

      Do NOT use r̔ͩegͩ̾ͪͥͪeͮ͊ͨ̓xͫ͆͆̓ ͤt͊͗o̒̾͋ͬ̾̚ ͆̌͌̄p͠a͟r̐̎͆̽̄ͭ́se̒ͥ ͕̪̻̭̭̺̳ͣͬͪͫͪj̞̲ͤ̚s̡̳̟̤̳̖̤͒̋ͣ͊ͤ͗̿oͬ̀͆n̮̳͚̝̩͙͔̈͋ ̮͕̩̼̔̾̈̄̋ͦ́́̚ͅĤ̷̝̯̝ͯ̈́ͣ̔ͪ̊ͬ͜͡Eͬͧ҉̜̰̲̩̰̝̠̥ ̶̯̯͚̗̪̭̘ͨͩͭ̎ͧͮCͪ҉̖͍͔͚͚̯͕Ơ̰̻̂̅̋̇̓̅͌M̸̭̱̭̥͆̽ͨͦÊ̸̴̢̪͚̮̲̜̙̍ͤ͋̾ͦS̛̗̟͙͍̹͈̳ͣ͑̏̓ͤͦ̽

      • dang 6 years ago

        Please don't do this here.

thesandlord 6 years ago

I wrote something similar that will send stdin to Google Stackdriver Logging.

https://github.com/thesandlord/logpipe

  • troydavis 6 years ago

    In the same vein, pipe anything to `logger` to send it to the local syslogd (and if configured, to remote destinations).

    For example, this uses datamash (https://www.gnu.org/software/datamash/) to sum column 2 of a CSV ("-t,"), then log the output:

        datamash -t, sum 2 < stuff.csv | logger
    • thesandlord 6 years ago

      Yeah logger or fluentd are definitely better long term solutions. I wanted something that was no frills and minimal config for ad-hoc situations. Other's on my team found it useful so I open sourced it.

      Bonus: In depth code review for this package: https://youtu.be/c5ufcpTGIJM

fiatjaf 6 years ago

Amazing.

We need more utilities like this that help integrate apps and web services between themselves and the Unix environment.

"Pipes to the web" should be like this. Not bloted a UI with forms that perform premade actions with your web apps data.

tardo99 6 years ago

They mean stdout, right?

  • forkerenok 6 years ago

    Depends on from where you look :)

    It is stdout for the previous process in the pipeline and stdin for the tosheets itself.

    EDIT: Tosheets -> tosheets

    • jwilk 6 years ago

      tosheets just reads stuff from stdin. It doesn't care if it's attached to a pipe or not. It might be that there's no "previous process" at all.

O_H_E 6 years ago

Interestingly Nice

Your project ruins my English

nine_k 6 years ago

Nope, it sends stdout to sheets. Getting input from sheets would be cool, too.

  • PowerfulWizard 6 years ago

    Consider the command:

        tosheets --spreadsheet=ABC <myfile.txt
    
    In this example, stdin is what goes to the spreadsheet. stdout is (I assume) nothing.
  • Naac 6 years ago

    It looks to me like you're being downvoted, but what you're saying looks correct to me. $PROGRAM sends to stdout what google sheets reads from "stdin"

    • reificator 6 years ago

      When you run this utility, it forwards stdin to Google Sheets.

      Should you pipeline stdout from somewhere else to this utility, the contents of that stdout will be forwarded to Google Sheets.

      It is correct to say either that you are forwarding stdin or that you are forwarding stdout. It is therefore not correct to say that it does not forward stdin, because the source code explicitly refers to stdin. That's likely the reason for the [Fight Club]s the GP is receiving.

    • jwilk 6 years ago

      From the HN guidelines:

      Please don't comment about the voting on comments. It never does any good, and it makes boring reading.