{"id":42415504,"url":"https://github.com/evancooper9/weather_sms","last_synced_at":"2026-01-28T02:00:54.602Z","repository":{"id":130778390,"uuid":"55277566","full_name":"EvanCooper9/weather_sms","owner":"EvanCooper9","description":"Scheduled weather notifications via SMS","archived":false,"fork":false,"pushed_at":"2016-06-06T19:46:04.000Z","size":6012,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2023-03-09T05:36:22.514Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/EvanCooper9.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2016-04-02T04:25:46.000Z","updated_at":"2020-11-25T01:22:25.000Z","dependencies_parsed_at":"2026-01-28T02:00:46.672Z","dependency_job_id":null,"html_url":"https://github.com/EvanCooper9/weather_sms","commit_stats":null,"previous_names":[],"tags_count":null,"template":null,"template_full_name":null,"purl":"pkg:github/EvanCooper9/weather_sms","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EvanCooper9%2Fweather_sms","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EvanCooper9%2Fweather_sms/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EvanCooper9%2Fweather_sms/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EvanCooper9%2Fweather_sms/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/EvanCooper9","download_url":"https://codeload.github.com/EvanCooper9/weather_sms/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EvanCooper9%2Fweather_sms/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28833321,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-27T23:29:49.665Z","status":"online","status_checked_at":"2026-01-28T02:00:06.943Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-28T02:00:20.519Z","updated_at":"2026-01-28T02:00:54.577Z","avatar_url":"https://github.com/EvanCooper9.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"#weather_sms [![Build Status](https://travis-ci.org/EvanCooper9/weather_sms.svg?branch=master)](https://travis-ci.org/EvanCooper9/weather_sms)\nWeather notifications via SMS\n\n##About\nA pure javascript app that sends scheduled text messages containing weather information. In terms of APIs, It integrates [Twilio](https://www.twilio.com) for SMS messaging and is powered by [Forecast.io](http://forecast.io/) weather information. With Node.js, weather_sms runs as a standalone application/server to send/receive messages.\n\nCurrently, it runs on an [Onion Omega](https://onion.io). Omega's own node binary requires the use of [forever](https://www.npmjs.com/package/forever) to force the program to run continuously. In my case, I'm using a binary different than the one officially supported by the Onion Omega. I'm able to use less of the very limited resources.\n\n##Goals\nWith this project, I aim to build a diverse web and cloud enabled application that explores the content I'm learning in school, and more. I want to further familiarize myself with today and tomorrow's modern technologies, specifically mobile platforms and the web. This may have the potential to become my Honours project for my final year of university, but we'll take it one step at a time. It's also something to keep me busy.\n\n##What's New?\n###On-demand Weather\nUsers can now request on-demand weather updates, rather than just having scheduled alerts. To get a weatehr update, the user simply has to text `weather` (case insensitive) to the number that sends them weather updates. They will then get a weather update with the current weather for their location\n```\nUser:\nWeather\n\nweather_sms:\nAutomatic weather: Ottawa, ON, Canada\nCurrent: 22, Clear\nHigh: 23\nLow: 5\n```\n\n###Changing Location\nAdditionally, users can change their location by simply texing `location` (case insensitive) to the number that sends them weather updates. This functionality uses twilio's request parameters along with google's geocoding API in order to fetch a user's location by name. If multiple locations exist with the same namme, the user will be prompted to choose one. Example below.\n```\nUser:\nLocation\n\nweather_sms:\nMultiple locations matching your location name:\n0. Ottawa, ON, Canada\n1. Ottawa, IL 61350, USA\n2. Ottawa, KS 66067, USA\n3. Ottawa, OH 45875, USA\nReply with desired location number.\n\nUser:\n1\n\nweather_sms:\nYour location has been changed to: Ottawa, ON, Canada\n```\n\n##Getting Started\nInstall package dependencies using npm:\n- [twilio](https://www.npmjs.com/package/twilio)\n- [forecast](https://www.npmjs.com/package/forecast)\n- [systime](https://www.npmjs.com/package/systime)\n- [express](https://www.npmjs.com/package/express)\n- [body-parser](https://www.npmjs.com/package/body-parser)\n- [morgan](https://www.npmjs.com/package/morgan)\n- [forever](https://www.npmjs.com/package/forever) - **optional** \n```\nnpm install\n```\n\nFinally, simply run `weather_sms.js` with `node`.\nTo specify the port for the incoming server, set the `PORT` environment variable. Without this, port 3000 is used as default. I personally use `screen` to detach the porcess from the shell in order to run the program forever.\n```\nnode weather_sms.js\n\u003e weather_sms server listening on 3000\n\u003e weather_sms is now running\n```\n```\nPORT=9999 node weather_sms.js\n\u003e weather_sms server listening on 9999\n\u003e weather_sms is now running\n```\n\n##User Data\nAll user-related data is stored in `userData.json`, and is located in the `./data` directory. User accounts are stored as JSON objects in an array named `accounts`. Geographic locations, or cities, are stored similarly.\n\n```\n{\n\t\"accounts\" : [ \n\t\t{\n\t\t\t\"name\" : \"Evan\",\n\t\t\t\"number\" : \"14161234567\",\n\t\t\t\"city\" : \"Ottawa, ON, Canada\",\n\t\t\t\"alerts\" : [\n\t\t\t\t{\n\t\t\t\t\t\"day\" : \"Mon\",\n\t\t\t\t\t\"time\" : \"1345\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t],\n\t\"cities\" : {\n\t\t\"Ottawa, ON, Canada\" : {\n\t\t\t\"lat\" : 45.4215,\n\t\t\t\"lng\" : -75.6972\n\t\t}\n\t}\n}\n```\n\n##API's and Stuff\nAPI credentials are stored in `credentials.JSON`, located in `./data`. You should have your own API keys for Twilio, Forecast.io and Google. Additionally for Twilio, weather_sms requires your Twilio phone number associated with your API key to be stored in the credentials file.\n\nAll API data is stored as follows:\n```JSON\n{\n\t\"twilio\" : {\n\t\t\"accountSID\" : \"twilio_accountSID\",\n\t\t\"authToken\" : \"twilio_authToken\",\n\t\t\"phoneNumber\" : \"twilio_phoneNumber\"\n\t},\n\t\"forecast.io\" : {\n\t\t\"APIKey\" : \"forecast.io_APIKey\"\n\t},\n\t\"googleGeocoding\" : {\n\t\t\"APIKey\" : \"googleGeocoding_APIKey\"\n\t}\n}\n```\n\n##Logs\nweather_sms logs every minute to a .txt file in `./logs`.\nOn start, weather_sms creates a new log file, `000_boot.txt`. Everyday, a new log file will be created that includes the date it was created in the file name (ex: `Apr 04 2016.txt`).\n\nLog messages are recorded as follows:\n```\n...\nMon Apr 04 2016 10:53:00 GMT-0400 (EDT)\nMon Apr 04 2016 10:54:00 GMT-0400 (EDT)\nMon Apr 04 2016 10:55:00 GMT-0400 (EDT)\nMon Apr 04 2016 10:56:00 GMT-0400 (EDT)\nMon Apr 04 2016 10:57:00 GMT-0400 (EDT)\n...\n```\n\n##Next Steps\n- Allow clients to sign-up and further edit their profile by sending a text message\n- Build a web app interface\n- Build mobile interfaces\n\n##License\nMIT License\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fevancooper9%2Fweather_sms","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fevancooper9%2Fweather_sms","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fevancooper9%2Fweather_sms/lists"}