jamisonordway / command_line_forecast

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Command Line Forecast

This application provides weather forecast breakdowns right in the command line!

To use Command Line Forecast, clone this repo, then procede to setup.

(This project was time-boxed to 4 hours of effort.)

Setup

Enter Command Line Forecast directory with cd command_line_forecast

Install excon for API calls: sudo gem install excon

Then install dotenv for environment variables: gem install dotenv

Obtain an key for the Dark Sky API here.

From command line, touch .env

Inside .env, add the following:

API_KEY: [YOUR_API_KEY]

Getting a weather forecast

In the command line, run forecast -h to see a list of all parameter options.

-a refers to a latitude.

-o refers to a longitude.

-g refers to a given granularity (currently, hourly, or daily). Will default to 'currently' unless another granularity is specified.

-p is optional and allows for a specified 'path/to/file' to which JSON result will be written.

Examples

With specified filepath:

forecast -a 37.7749 -o 122.4194 -g currently -p folder/log.json

=>

{"time"=>1541440903, "summary"=>"Overcast", "icon"=>"cloudy", "precipIntensity"=>0, "precipProbability"=>0, "temperature"=>51.97, "apparentTemperature"=>51.97, "dewPoint"=>38.69, "humidity"=>0.6, "pressure"=>1027.28, "windSpeed"=>17.34, "windGust"=>17.42, "windBearing"=>352, "cloudCover"=>0.96, "uvIndex"=>0, "visibility"=>10,"ozone"=>280.31} Thank you for using Command Line Forecast!

# folder/log.json

{ "time":1541440903, "summary":"Overcast", "icon":"cloudy", "precipIntensity":0, "precipProbability":0, "temperature":51.97, "apparentTemperature":51.97, "dewPoint":38.69, "humidity":0.6, "pressure":1027.28, "windSpeed":17.34, "windGust":17.42, "windBearing":352, "cloudCover":0.96, "uvIndex":0, "visibility":10, "ozone":280.31 }

Without specified filepath:

forecast -a 40.7128 -o 74.0060 -g daily

=>

{"summary"=>"Snow (7–11 in.) tomorrow through Sunday, with high temperatures falling to 13°F next Tuesday.", "icon"=>"snow", "data"=>[{"time"=>1541440800, "summary"=>"Mostly cloudy starting in the afternoon.", "icon"=>"partly-cloudy-night", "sunriseTime"=>1541468472, "sunsetTime"=>1541505393, "moonPhase"=>0.95, "precipIntensity"=>0, "precipIntensityMax"=>0.0001, "precipIntensityMaxTime"=>1541505600, "precipProbability"=>0, "temperatureHigh"=>30.6, "temperatureHighTime"=>1541494800, "temperatureLow"=>16.2, "temperatureLowTime"=>1541530800, "apparentTemperatureHigh"=>30.6, "apparentTemperatureHighTime"=>1541494800, "apparentTemperatureLow"=>9.62, "apparentTemperatureLowTime"=>1541527200, "dewPoint"=>3.68, "humidity"=>0.58, "pressure"=>1027.98, "windSpeed"=>5.15, "windGust"=>12.55, "windGustTime"=>1541451600, "windBearing"=>116, "cloudCover"=>0.46, "uvIndex"=>3, "uvIndexTime"=>1541484000, "visibility"=>10, "ozone"=>279.69, "temperatureMin"=>6.82, "temperatureMinTime"=>1541440800, "temperatureMax"=>30.6, "temperatureMaxTime"=>1541494800, "apparentTemperatureMin"=>-5.35, "apparentTemperatureMinTime"=>1541444400, "apparentTemperatureMax"=>30.6, "apparentTemperatureMaxTime"=>1541494800}, {"time"=>1541527200, "summary"=>"Snow (< 1 in.) overnight.", "icon"=>"snow", "sunriseTime"=>1541554944, "sunsetTime"=>1541591729, "moonPhase"=>0.98, "precipIntensity"=>0.0007, "precipIntensityMax"=>0.0045, "precipIntensityMaxTime"=>1541606400, "precipProbability"=>0.07, "precipAccumulation"=>0.28, "precipType"=>"snow", "temperatureHigh"=>31.79, "temperatureHighTime"=>1541574000, "temperatureLow"=>13.11, "temperatureLowTime"=>1541642400, "apparentTemperatureHigh"=>31.79, "apparentTemperatureHighTime"=>1541574000, "apparentTemperatureLow"=>13.11, "apparentTemperatureLowTime"=>1541642400, "dewPoint"=>10.15, "humidity"=>0.65, "pressure"=>1022.76, "windSpeed"=>1.39, "windGust"=>6.96, "windGustTime"=>1541552400, "windBearing"=>146, "cloudCover"=>0.97, "uvIndex"=>3, "uvIndexTime"=>1541570400, "visibility"=>10, "ozone"=>260.23, "temperatureMin"=>16.2, "temperatureMinTime"=>1541530800, "temperatureMax"=>31.79, "temperatureMaxTime"=>1541574000, "apparentTemperatureMin"=>9.62, "apparentTemperatureMinTime"=>1541527200, "apparentTemperatureMax"=>31.79, "apparentTemperatureMaxTime"=>1541574000}, {"time"=>1541613600, "summary"=>"Snow (3–6 in.) until evening.", "icon"=>"snow", "sunriseTime"=>1541641415, "sunsetTime"=>1541678067, "moonPhase"=>0.03, "precipIntensity"=>0.0117, "precipIntensityMax"=>0.0254, "precipIntensityMaxTime"=>1541667600, "precipProbability"=>0.44, "precipAccumulation"=>5.271, "precipType"=>"snow", "temperatureHigh"=>13.84, "temperatureHighTime"=>1541638800, "temperatureLow"=>4.19, "temperatureLowTime"=>1541700000, "apparentTemperatureHigh"=>13.84, "apparentTemperatureHighTime"=>1541638800, "apparentTemperatureLow"=>-1.54, "apparentTemperatureLowTime"=>1541728800, "dewPoint"=>11.5, "humidity"=>0.98, "pressure"=>1026.33, "windSpeed"=>1.98, "windGust"=>13.17, "windGustTime"=>1541678400, "windBearing"=>252, "cloudCover"=>0.98, "uvIndex"=>3, "uvIndexTime"=>1541656800, "visibility"=>2.81, "ozone"=>282.27, "temperatureMin"=>4.33, "temperatureMinTime"=>1541696400, "temperatureMax"=>18.65, "temperatureMaxTime"=>1541613600, "apparentTemperatureMin"=>-0.44, "apparentTemperatureMinTime"=>1541678400, "apparentTemperatureMax"=>18.65, "apparentTemperatureMaxTime"=>1541613600}, {"time"=>1541700000, "summary"=>"Partly cloudy overnight.", "icon"=>"partly-cloudy-night", "sunriseTime"=>1541727887, "sunsetTime"=>1541764406, "moonPhase"=>0.06, "precipIntensity"=>0, "precipIntensityMax"=>0.0001, "precipIntensityMaxTime"=>1541710800, "precipProbability"=>0, "temperatureHigh"=>26.05, "temperatureHighTime"=>1541750400, "temperatureLow"=>8.5, "temperatureLowTime"=>1541790000, "apparentTemperatureHigh"=>26.05, "apparentTemperatureHighTime"=>1541750400, "apparentTemperatureLow"=>0.55, "apparentTemperatureLowTime"=>1541782800, "dewPoint"=>3.32, "humidity"=>0.7, "pressure"=>1027.82, "windSpeed"=>2.49, "windGust"=>7.57, "windGustTime"=>1541779200, "windBearing"=>144, "cloudCover"=>0.13, "uvIndex"=>3, "uvIndexTime"=>1541743200, "visibility"=>10, "ozone"=>289.97, "temperatureMin"=>4.19, "temperatureMinTime"=>1541700000, "temperatureMax"=>26.05, "temperatureMaxTime"=>1541750400, "apparentTemperatureMin"=>-1.54, "apparentTemperatureMinTime"=>1541728800, "apparentTemperatureMax"=>26.05, "apparentTemperatureMaxTime"=>1541750400}, {"time"=>1541786400, "summary"=>"Light snow (< 1 in.) starting in the evening.", "icon"=>"snow", "sunriseTime"=>1541814359, "sunsetTime"=>1541850746, "moonPhase"=>0.09, "precipIntensity"=>0.0022, "precipIntensityMax"=>0.0076, "precipIntensityMaxTime"=>1541854800, "precipProbability"=>0.25, "precipAccumulation"=>0.986, "precipType"=>"snow", "temperatureHigh"=>24.77, "temperatureHighTime"=>1541836800, "temperatureLow"=>12.87, "temperatureLowTime"=>1541894400, "apparentTemperatureHigh"=>23.81, "apparentTemperatureHighTime"=>1541833200, "apparentTemperatureLow"=>12.87, "apparentTemperatureLowTime"=>1541894400, "dewPoint"=>9.18, "humidity"=>0.81, "pressure"=>1025.35, "windSpeed"=>2.27, "windGust"=>7.02, "windGustTime"=>1541786400, "windBearing"=>162, "cloudCover"=>0.59, "uvIndex"=>3, "uvIndexTime"=>1541829600, "visibility"=>10, "ozone"=>291, "temperatureMin"=>8.5, "temperatureMinTime"=>1541790000, "temperatureMax"=>24.77, "temperatureMaxTime"=>1541836800, "apparentTemperatureMin"=>0.74, "apparentTemperatureMinTime"=>1541786400, "apparentTemperatureMax"=>23.81, "apparentTemperatureMaxTime"=>1541833200}, {"time"=>1541872800, "summary"=>"Snow (1–2 in.) until afternoon.", "icon"=>"snow", "sunriseTime"=>1541900831, "sunsetTime"=>1541937089, "moonPhase"=>0.12, "precipIntensity"=>0.0052, "precipIntensityMax"=>0.0113, "precipIntensityMaxTime"=>1541905200, "precipProbability"=>0.38, "precipAccumulation"=>2.248, "precipType"=>"snow", "temperatureHigh"=>23.16, "temperatureHighTime"=>1541923200, "temperatureLow"=>9.08, "temperatureLowTime"=>1541988000, "apparentTemperatureHigh"=>16.56, "apparentTemperatureHighTime"=>1541923200, "apparentTemperatureLow"=>9.08, "apparentTemperatureLowTime"=>1541988000, "dewPoint"=>15.2, "humidity"=>1, "pressure"=>1025.7, "windSpeed"=>2.39, "windGust"=>9.9, "windGustTime"=>1541923200, "windBearing"=>225, "cloudCover"=>0.89, "uvIndex"=>3, "uvIndexTime"=>1541919600, "visibility"=>2.68, "ozone"=>287.81, "temperatureMin"=>10.45, "temperatureMinTime"=>1541955600, "temperatureMax"=>23.16, "temperatureMaxTime"=>1541923200, "apparentTemperatureMin"=>8.69, "apparentTemperatureMinTime"=>1541905200, "apparentTemperatureMax"=>16.56, "apparentTemperatureMaxTime"=>1541923200}, {"time"=>1541959200, "summary"=>"Snow (< 1 in.) starting in the afternoon, continuing until evening.", "icon"=>"snow", "sunriseTime"=>1541987303, "sunsetTime"=>1542023433, "moonPhase"=>0.15, "precipIntensity"=>0.0028, "precipIntensityMax"=>0.0084, "precipIntensityMaxTime"=>1542024000, "precipProbability"=>0.26, "precipAccumulation"=>1.264, "precipType"=>"snow", "temperatureHigh"=>20.25, "temperatureHighTime"=>1542006000, "temperatureLow"=>6.05, "temperatureLowTime"=>1542070800, "apparentTemperatureHigh"=>15.56, "apparentTemperatureHighTime"=>1541998800, "apparentTemperatureLow"=>-0.91, "apparentTemperatureLowTime"=>1542074400, "dewPoint"=>10.93, "humidity"=>0.97, "pressure"=>1023.72, "windSpeed"=>1.31, "windGust"=>8.18, "windGustTime"=>1542013200, "windBearing"=>226, "cloudCover"=>0.77, "uvIndex"=>2, "uvIndexTime"=>1541998800, "visibility"=>4.51, "ozone"=>290.76, "temperatureMin"=>7.83, "temperatureMinTime"=>1542042000, "temperatureMax"=>20.25, "temperatureMaxTime"=>1542006000, "apparentTemperatureMin"=>4.24, "apparentTemperatureMinTime"=>1542024000, "apparentTemperatureMax"=>15.56, "apparentTemperatureMaxTime"=>1541998800}, {"time"=>1542045600, "summary"=>"Snow (1–3 in.) until afternoon.", "icon"=>"snow", "sunriseTime"=>1542073774, "sunsetTime"=>1542109779, "moonPhase"=>0.18, "precipIntensity"=>0.0064, "precipIntensityMax"=>0.0088, "precipIntensityMaxTime"=>1542085200, "precipProbability"=>0.38, "precipAccumulation"=>2.922, "precipType"=>"snow", "temperatureHigh"=>13.13, "temperatureHighTime"=>1542088800, "temperatureLow"=>-0.43, "temperatureLowTime"=>1542142800, "apparentTemperatureHigh"=>5.41, "apparentTemperatureHighTime"=>1542088800, "apparentTemperatureLow"=>-7.37, "apparentTemperatureLowTime"=>1542160800, "dewPoint"=>5.99, "humidity"=>0.99, "pressure"=>1027.92, "windSpeed"=>2.74, "windGust"=>8.93, "windGustTime"=>1542096000, "windBearing"=>271, "cloudCover"=>1, "uvIndex"=>2, "uvIndexTime"=>1542085200, "visibility"=>0.13, "ozone"=>304.71, "temperatureMin"=>0.03, "temperatureMinTime"=>1542128400, "temperatureMax"=>13.13, "temperatureMaxTime"=>1542088800, "apparentTemperatureMin"=>-4.07, "apparentTemperatureMinTime"=>1542106800, "apparentTemperatureMax"=>7.61, "apparentTemperatureMaxTime"=>1542045600}]} Thank you for using Command Line Forecast!

With missing parameters:

forecast -a 40.7128

missing params. Thank you for using Command Line Forecast!

notes and next steps

  • Minutely breakdown doesn't function as expected -- options[:minutely] returns nil. Could be a bug or a rate limit issue.

  • Refactor lengthy conditionals in runner.rb

  • Add unit tests

About


Languages

Language:Ruby 100.0%