Hacker News new | past | comments | ask | show | jobs | submit login
Curl Wttr.in (github.com/chubin)
461 points by old-gregg on June 26, 2020 | hide | past | favorite | 122 comments



I use this all the time. I find this option pretty neat:

  curl wttr.in/Moon
Shows current lunar phase.

I use Termux[0] on my phone with curl installed. Pretty handy.

Also, check out rate.sx[1] from the same author:

  curl rate.sx
Shows information about current exchange rates of cryptocoins.

More similar console services: https://github.com/chubin/awesome-console-services

[0]: https://termux.com/

[1]: https://github.com/chubin/rate.sx


shameless plug: https://e.xec.sh


another shameless plug:

  curl ipaddress.sh


also

    curl findip.win


Just FYI this doesn't seem to work with MacOS's default Terminal app. I guess it doesn't support 256 colors or something.


heh... visited that link and tried it; then I remembered that I sit behind a proxy. Guess what happens when a proxy first caches the entire responwe of that page and then sends it to the client all at once? :D


Also very useful:

curl ifconfig.co (shows your public ip)


I just use an alias

   myip is aliased to `dig +short myip.opendns.com @resolver1.opendns.com'


I do the same! Only catch is, doesn't always work if you're on a restrictive network that only allows udp/53 to a specific DNS (captive portals, corpnets etc). I use a small shell script that tries the DNS trick first, then falls back on HTTP if that times out.


Nice. I like the curl thing because I can hop any any server and not have to worry if I setup an alias or not....I got a lot of servers I am constantly on.


I used to use this a lot, but when I tried yesterday (and same today) I got a Heroku error message :(

Not sure if it's temporary down or fully off.


I get that occasionally too...not sure why, but if you spam it it usually works after 3-4 attempts.


Don’t forget the /json


Thank you very much for sharing this info. Now I can use wttr.in in a varied manner


This is one of those services that I love when I find them, use extensively for the next 30 minutes and forget about. But I keep coming back to it!

I even spent a time to make a simple function in my shell to cut off the output after today and accept a location name

    w () {
        curl -s "wttr.in/$1?M1q" | head -17
    }
and then I can just do

    w london
to get the weather for London today.

But, like most of the functions/aliases I create, I can't remember the last time I used it (except couple of times when I see someone talking about it and I remember about it)


You could do something like this

  w () {
    curl -s "wttr.in/${*// /+}"
  }
to make it work with places that have spaces in their name. E.g.

  w new york


Just use IFS for this

w() { ( IFS=+; curl wttr.in/"$*";); }


I love when you can post something simple like a function/alias and learn so many new things. Never seen IFS before. Updated locally and works perfectly!


Pretty neat, it shadows the `w` command however. Not that is that much useful in a personal computer


Just add `F` to the options, and you don't need `| head -17` then


Oh, awesome! I don't know if they added this after I created the function or if I just didn't notice it.

EDIT: I just realised that "they" is actually you!


I wasn't sure what F you were talking about, if other people are wondering, the new command would be:

  w () {
     curl -s "wttr.in/$1?M1qF"
  }


A while back I made something along similar lines, though not quite as useful.

   curl https://poptart.spinda.net


When I type "cat" in the terminal, this is what I expect to see.



That's great, content like this is why I browse hackernews.

As someone who is still relatively new to tech, how did you make this?

You even somehow turned my black terminal screen to dark blue, even after I stopped the curl process!


Terminal colors can be controlled using ANSI color codes. Since curl just outputs everything it receives directly to the tty, if the server response contains ANSI, your terminal will render it.


This scared me the first time I tried it because the output was perfectly sized to my terminal. I couldn't fathom how it was possible for the server to know my terminal width.

It turns out my terminal was set at 125 characters wide and wttr.in outputs a 125 character width display.


Curious - wouldn't it be possible to output terminal escape characters to perform some "magic" like moving at the end of the line? Or does curl protect users by not outputting them? (I think not, because fetching a binary file by mistake sometimes garbles the output)


It is possible, but it brings nothing, because you don't only need to move to the end of the line but print something in between, and for that the server mush know the width of your terminal


I will take this opportunity to offer some caution:

From what I understand, “curl example.com” is almost exactly as risky as “curl example.com | bash”, since curl does not escape terminal command sequences, and those can include key rebindings; e.g. your Enter key can be rebound to “rm -rf ∗” or “sendfile ∗ evil@example.com”.


It was the case indeed (many many years ago), we discussed at the anuualy curl hackers conference in Nuremberg back in 2017, but the only terminals that we managed to find with the support of this were not younger than 2001.

Anyway, one can write a small filter, to cut any suspicious sequences from the output off, and add some wrapper like that to your bashrc:

curl() { [ -t 1 ] && curl "$@" | sanitize || curl "$@"; }


I see you are using regular formatting for code/shell commands on your comments. Not that that's a problem but just a note you can use one of HN's comments formatting tips[0] for this.

Text after a blank line that is indented by two or more spaces is reproduced verbatim. (This is intended for code.)

[0]: https://news.ycombinator.com/formatdoc


Wow! That's cool. Let's try it

  curl() { [ -t 1 ] && curl "$@" | sanitize || curl "$@"; }


I actually stick to regular formatting on HN because of how terribly code formatting on HN renders on a phone. It doesn't wrap around when you format it as code and I have to scroll horizontally since the width is fixed. But it's probably OK for something like this code snippet.


Yes it works! The difference is minimal though (it was intentionally a one-liner)


> those can include key rebindings; e.g. your Enter key can be rebound to “rm -rf ∗” or “sendfile ∗ evil@example.com”.

oh my god. From http://www.termsys.demon.co.uk/vtansi.htm :

> Set Key Definition <ESC>[{key};"{string}"p

> Associates a string of text to a keyboard key. {key} indicates the key by its ASCII value in decimal.

But I can't reproduce it; in my terminal (gnome-terminal), `print('\x1b[97;"echo foo"p')` just shows `cho foo"p`.

So it looks like not all terminals implement it, if any?


No modern terminal implements any of the dangerous escape sequences.


As the other poster mentioned, I'm not aware of any terminal that allows these sequences these days.

This wasn't an uncommon thing back in the 90s with DOS ANSI art. I'm not sure if the original ANSI.SYS included with DOS 5/6 but there was a period of time where people remapped things like "echo y|format c:" using ANSI that only required one to "type somefile.ans/txt". The "fix" was to use an accelerated ANSI driver that dropped key-remapping.


Can you share some information about which terminal applications may be vulnerable to this?


As other commenters have pointed out, apparently there aren’t any modern ones anymore. My information seems to have been out of date.


I also like how you can add zipcodes or location names as a path and it returns that. At least it works with zipcodes, cities, airport codes, landmarks. Not sure what else.

Using this, I found out it was currently raining in Paris. And then saw that the thunder was rendered as emojis.

I wonder what other options there are... for example, I'm in the US, so it returns temperature in Fahrenheit even if I requested information about France. Are there options to change this?

But, all in all, this is really nice and polished.


There are quite a few options, it is pretty cool. You can check them out by hitting the :help endpoint[1].

I usually call it with a few of them to make the output cleaner, and without colors[2].

curl --compressed https://wttr.in/"$location"?QTAF

Where `$location` is either the location you want the weather for, or an IP address.

[1] https://wttr.in/:help

[2] https://git.sr.ht/~jamesponddotco/dotfiles/tree/master/.loca...


The README explains that you can get Celsius by appending `?m` to your query.


I’ve been curling this for years but was not aware of the new v2 api that shows hourly ascii charts. Looks sweet!


A good opportunity to remind everyone that we finally inboxed curl into Windows 10, so this works (with color output) from a stock Windows command prompt.

Better late than never, I hope.


No need for that. You can do this:

     (Invoke-WebRequest -Uri wttr.in).content
from Powershell. Why not use the happy path?


Serious question -- not a flame war :)

I honestly can't tell if this is sarcastic or not. I've been typing `curl -O http: ...` into command prompts for decades, and that Powershell incantation looks awfully unwieldy.

In what way is it the happy path?


Like others have said, you would never type that long thing in Powershell, just `irm wttr.in` (even shorter then curl).

People for some reason always show long stuff that is only used when you write scripts to share with others and not interactivelly - you could do the same with curl if you use --long-parameter-names but somehow people are biased when talking about posh like aliases and other things do not exist.


Because it's the native Windows answer. There's no need to make Windows look like Unix. It's great (really!) the way it was designed.


Any good resources for using Powershell? Is there ever a reason not to use powershell? Coming from OSX it doesn't really make sense to me that there are two terminals installed by default, and I end up just using WSL ubuntu. Also I don't really know the commands so it feels crippled to me (no ssh (still? idk), not many tools, etc)


> Is there ever a reason not to use powershell?

No, you should always use it.

Its maybe a problem when ultimate performance is in question, but you can go long way with Powershell - I recently had a web service SOAP client implemented in it that did millions of requests in an hour using threads in less then 50 lines of code consuming less then 3% of server resources (running entire country in single day actually)

> I end up just using WSL ubuntu

You can have basiclly anthing working without WSL (except maybe docker correctly).

> Also I don't really know the commands so it feels crippled to me (no ssh (still? idk),

SSH is there. Learn commands along the way. You should def take a book like this one: https://www.manning.com/books/learn-windows-powershell-in-a-...

> not many tools,

All usual tools, linux and windows, can be used. You have majority of them hosted on chocolatey.


Do you feel like you are typing a lot more for simple things like this?


Powershell comes installed with a lot of aliases.

Invoke-WebRequest is just iwr


Can't speak for that person, but I'm certain it was sarcasm.


Maybe it's just me, but I find PowerShell to be so verbose.

Why does every parameter have to have consist of a camelcased sentence? I'm a good typist, but I don't think what you wrote is better than

    curl wttr.in
But that might just be (my) programming.


PowerShell can be shorter by 1 character for this use case:

  irm wttr.in
irm is an alias for Invoke-RestMethod which is similar to Invoke-WebRequest but better for non-html responses like json or plain text.


It's case insensitive and there are short aliases for commands. I live in Linux, but used it way back when. It's an object oriented shell that is kind of awesome and intuitive. Bash is great and you can get shit done, but i don't think it's as user friendly as powershell.


Honestly PS feels like yet another cryptic language with irregular/nih naming of functions and arguments (like AHK which is great, but invented its own megacryptic irrational language instead of taking something generic, and now you have to google every damn thing). If I programmed for PS, then okay, but seriously, Invoke-Rest-?Method, -Uri/Url, .content — how much semantics do you learn until you give up? I’d better

  http.get(url="...").body
in my console rather than this Invoke-WhatEver thing, because at least it seems programming language-y and names are consistent with all other web software.

Ed: strictly speaking, URI is not even a thing that you pass to a web request. I bet that IRM couldn’t fetch urn:isbn:0451450523.


> my console rather than this Invoke-WhatEver thing, because at least it seems programming language-y and names are consistent with all other web software.

Because curl is consistent?

> urn:isbn:0451450523

Curl can't do whatever this is either?


Because that seems programming language-y and names are consistent with all other web software.

>Curl can't do whatever this is either?

Right. This is a valid URI, which Invoke-RestMethod uses as a parameter name (-Uri) and which is a unique id for a resource and not its location (it could be, but not in this particular case). They should not have call that argument “URI”, if what they actually do is fetching from a URL.


This works great from the new Windows Terminal (using PowerShell 7):

  Invoke-RestMethod http://wttr.in
For some reason they recommend that early in the readme, but not down in https://github.com/chubin/wttr.in#windows-users where they discuss various issues on Windows.

EDIT: I see now that lzybkr already suggested using the even shorter alias `irm` for `Invoke-RestMethod`. Nice!


This handy function will ask and remember the city:

https://github.com/majkinetor/posh/blob/master/MM_Sugar/Get-...


Even easier with Invoke-RestMethod wtte.in


Glad to hear that, though I wasn't aware color output now works on windows command. I was under the impression the ansi.sys driver or similar was still necessary for color support.


My team shipped the next generation (after ANSI.SYS) of VT support with the first release of Windows 10 back in 2015. We keep adding things to it, trying to make sure we stay compatible with Xterm. It really is a different landscape now :)

The console subsystem is open-source at https://github.com/microsoft/terminal. Feel free to file bugs, complain, or what have you. That’s what we’re here for!

To quote GP, “better late than never, I hope”.


Is there anyway to get the new terminal working on Windows 10 LTSC? It seems as though a newer version of Windows is required. A backport maybe?


Unfortunately, we’ve got a couple dependencies on platform features that first shipped in 1903. Whether we can divest ourselves of those dependencies has been the topic of significant discussion recently! No promises, but we’ll do what we can.


[flagged]


Aw, come on. It was interesting and obviously well intentioned. Please don't be an asshole on HN; disincentivizing people from sharing things they've worked on is strictly negative for this site.

https://news.ycombinator.com/newsguidelines.html


Windows is fairly transcendent in our culture, like it or not. It’s not Joe’s-10-person-company-not-relevant-to-99%-of-readers.


I don't think we need to hear about new Windows features on HN posts because they both mention cURL. GP is just taking the chance to advertise.

It's like if they commented on the Mac OS X announcements saying "Look, Windows can count to 10 too!"

Off topic, against the rules, flag it.


I’m an open source advocate, but still appreciate that Windows is the most used PC operating system on the planet. The fact that you can use the tool ITA as it’s presented on stock Windows (when this is a recently added feature) is relevant info that’s useful to readers and I highly doubt parent intended it in any way to be an ad.

Not to put words in his mouth, but he’s probably just proud to have some influence on making Windows users’ lives a little easier and it would be an odd thing for him to expect people familiar with curl to suddenly become Windows partisans just because they’re now prepacking it (or generally for any Microsoft engineer to have much personal interest in convincing end users to adopt Windows personally).


This is supremely relevant though. The docs basically say "It's supposed to work like X, but for Windows you need to do ABCEDFGHIJ". OC is just "Actually, X works on windows now."

This comment is rude, inaccurate, and not in line with the rules of HN.


Isn't Windows 10 free?


No, it's priced into most computers. Retail costs over $100 last I checked (and more for pro), though OEMs pay cheaper prices for that sort of volume. There are also sketchy keys available for ~$20.


Sort of? You can install without a key, and other than a little 'watermark' in the corner of the screen (and being prevented from changing the wallpaper) it will get updates and work normally.


there are ebay keys for a couple dollars


For the life of me I cannot understand why would anyone waste their money on such keys. Usually those are volume licenses being sold separately, which is not legal and does not provide you with a valid license. If one is intent on breaking the law anyway, one can save those two bucks and use of the many safe activation methods which do not require installing anything on your machine.


It's really nice but I started to use this a year ago and had to stop because they always ran out of resources. Hopefully this is fixed since it's such a nice and easy service!


Has nobody mentioned, that this is just wego as a service?


Their github page explains this early in project page, so no harm done, I guess?


Oops, don't know how I missed that. Sorry!


To say truth, it is not just a wego as a service since many years, but is started like that indeed

Now it has a lot of additional features:

* one-line output for status lines

* astronomical information

* translation to 70+ languages

* geolocation

* full fledged multilingual location search

* HTML frontend

* PNG frontend

* Slack support

* scalable architecture (it handles 10M+ queries daily for the moment of writing, with avg processing time under 30 msec)

It took one weak for the initial wego-as-a-service wrapper implementation, and more than 4 years (and 99 contributors) for the rest.

But we of course honor wego, and mention it in the README, and on each HTML page in browser


Nice ! Did you contribute back your improvements to wego ?


No, because they are not implemented as a part of wego; wego is used just for visualization of one of the views (v1). The rest is implemented outside of it


What is wego? Google only seems to give me travel companies and alternatives.


I didn't know either! Searching for "wego weather" shows this CLI: https://github.com/schachmat/wego

Reading the readme for chubin/wttr.in also clarifies what "wego" is:

> wttr.in uses wego for visualization and various data sources for weather forecast information.

"wego" in that sentence is also linked to schachmat/wego so seems to confirm is that one.


See my comment in the neighbor thread


Rendering a richer UI for curl users with terminal escapes is brilliant! Has this been done elsewhere?



Very cool, if i could suggest improvements it would be another view that shows some sort of line graph of temperature and rain and sunshine hours. Also thanks for the T option - useful if your terminal has a white background( like Apple's default).


curl v2.wttr.in

and for the white background:

curl wttr.in/?I


What I am most amazed of is how they manage to get my actual location always right...

I mean, we all now those "geolocate me" things on websites, but I've never encountered a single page where it worked; it's always hilariously all over the place (shows the headquarter of my provider, or just locates me in Frankfurt at the DE-CIX).

But wttr.in is different. I wonder what the magic ingredient is and why no one else seemingly has it.


It depends entirely on the geolocation database being used to map your IP address to location. wttr.in seems to use https://www.ip2location.com/ so maybe they have better mappings for your ISP. Bigger providers tend to use Akamai or similar.


I use this so much that if I start to curl something else I type wttr after it from muscle memory and have to delete it.


Would be nice to have Sixel/iTerm output, but almost 40 years after most computers could do split text/graphics modes, nobody uses these and we're looking at ASCII graphics instead... Might want to look at using ℃ and Emoji though for people with modern terminals.


Looks like lightning breaks the formatting a little, at least for me. Otherwise, very cool. Guessing lighting is a unicode char & not being counted "correctly", which I believe is a challenging thing


The problem is that it depends on the terminal, and you can render this character properly for all 100% of the terminals on the server side


Welcome to my alias list. This provides better weather information than local news websites who have dedicated pages. That said, I'm in a developing country where it's just monsoon all the damm time :D


Been using it for years here in Ireland. I have the following: alias wett='curl wttr.in/limerick'. :-)


Try this:

curl ga.wttr.in/limerick


It would be cool to have a curl-able service directory of those services on the web, and also a standard way to know the quota of refresh, and some standard /help URL to know more about the options


curl wttr.in/:help

and the curlable directory is almost there

As an interim solution, you can use this:

  curl https://raw.githubusercontent.com/chubin/awesome-console-services/master/README.md


One of the downsides is that if you have curl set to not use a user agent, it (along with many such services) won't work.

So

  curl --user-agent "" wttr.in
just serves you unformatted HTML.


Just use

    curl --user-agant "" wttr.in?A
for that.

The `A` option enforces ANSI output (curl wttr.in/:help for more)


Oh nice, thanks! I wish more services would do that.

(btw there's a typo, should be --user-agent)


Another cool command-line weather service:

finger city@graph.no

also includes forecasts (try city+24).


Any other similar services for the terminal out there?


curl cheat.sh

curl rate.sx

curl qrenco.de

and the rest from https://github.com/chubin/awesome-console-services


I love this on Linux, but it is also a good example of how awful the standard Windows command prompt is at formatting :(


Works fine for me (Windows 10 1909 with Windows Terminal)


That's because Windows Terminal is not the standard Windows console. :P


It'd be nice to be able to point to be able to point this to my backyard weather station, via wunderground or such.


Neat script! On a related note and something I use more frequently : curl ifconfig.me

Easy way to find the public IP :)


Shameless plug: curl ipaddy.net

Returns public IP address, ISO country code, User-Agent string, and a new line (to ensure the terminal prompt doesn't get shifted after displaying the response).[0][1]

- [0] https://use.ipaddy.net - [1] https://github.com/oedmarap/ipaddy



I use icanhazip.com


Love this! Every day I find fewer reasons to ever leave my terminal.


perfect command for a bash alias

alias godstatus='curl wttr.in'


Make it a shell function and you can parameterise invocation.

    weather () 
    { 
        curl http://wttr.in/${1:-LAX}
    }


Awesome! Resolves ambiguity pretty well.


okay, thats pretty cool. this art and utility shouldn't have fallen by the way side




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: