Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/firelemons/twitterweatherbot
My personal weather bot
https://github.com/firelemons/twitterweatherbot
Last synced: 22 days ago
JSON representation
My personal weather bot
- Host: GitHub
- URL: https://github.com/firelemons/twitterweatherbot
- Owner: FireLemons
- Created: 2018-12-07T23:34:12.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2022-12-08T07:36:46.000Z (about 2 years ago)
- Last Synced: 2024-11-28T20:29:35.415Z (30 days ago)
- Language: JavaScript
- Homepage:
- Size: 866 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 19
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# TwitterWeatherBot
My personal twitter weather botBasic features:
+ Tweet a forecast for the near future every 2 hours
+ Add a random weather fact to the 2 hour forecast
+ Tweet alerts from the NWS
+ Retweet all tweets from the local weather station
## Configuration
### Required:
#### Logging
Set the dierctory path where logs will be stored.
Paths are relative to `index.js`."log": {
"logDir": "logs"
}
#### Open Weather Map
The forecast area is set `config.weather.openWeatherMap.location` using one of these combinations.- City Name
`q: "{city name},{country code}"`
- City ID
A list of city ids can be [downloaded here](http://bulk.openweathermap.org/sample/city.list.json.gz).
`id: {city id}`
- Geographic Coordinates
`lat: {lat}`
`lon: {lon}`
- Zip Code
`zip: "{zip code},{country code}"`set `config.weather.openWeatherMap.key` to the openWeatherMap api key
Example"weather":{
"openWeatherMap": {
"location": {
"id": 4381982
},
"key": "API KEY"
}
}
`config.twitter` contains keys generated from the twitter developer account."twitter": {
"consumer_key": "CONSUMER KEY",
"consumer_secret": "CONSUMER SECRET",
"access_token_key": "ACCESS TOKEN KEY",
"access_token_secret": "ACCESS TOKENM SECRET"
}### Optional Configuration:
#### Alerts
Alerts are sent out at midnight, 6:00, noon, and 18:00.
Alert requests must contain an email, app name, app version, and a website in the header. These are set in `config.weather.alerts.app`
`weather.alerts.params` will contain get parameters to send to api.weather.gov/alerts. The NWS has a request testing tool [here](https://www.weather.gov/documentation/services-web-api#/default/get_alerts) under the "Specification" tab.
Example:"weather": {
"alerts": {
"disabled": false,
"app": {
"contact": "[email protected]",
"name": "AppName",
"version": "0.1",
"website": "www.yourWebsite.com"
},
"params": {
"active": true,
"area": "MO",
"status": "actual"
}
}
}##### Alert Filters
Filters are in the form:{
"restriction":"FILTER TYPE",
"path": "PATH TO VALUE",
"value": "VALUE FOR FILTERING",
"keep": true
}where
- restriction is the type of filter
- path is the path in the alert object to the value to be filtered
- value will be different depending on the filter type
- keep is true if all alerts matching the filter are to be kept and false if all alerts not matching the filter are to be kept
Available filter types:
- after
Matches alerts with dates after and excluding the time *t* when alerts are tweeted
value is a number of hours to offset *t*
- before
Matches alerts with dates before and excluding the time *t* when alerts are tweeted
value is a number of hours to offset *t*
- contains
Matches alerts with arrays containing VALUE
value is an element of an array to be searched for. it must be a primitive value
- has
Matches alerts where PATH in the object exits
value is not needed
The has filter is always used first
- equals
Matches alerts with VALUE exactly equal to the value at path
value is a primitive value to be compared with using strict equality
- matches
Matches alerts with strings matching a regex pattern
value contains a regex string
Filters go in an array at config.weather.alerts.filters.
Example:
Keep all alerts where "Boone;" or "Boone, MO" is used to describe the area and discard all alerts that have been replaced by another alert."weather": {
"alerts": {
...
"filters": [
{
"restriction": "matches",
"path": "properties.areaDesc",
"value": "Boone;|Boone, MO;",
"keep": true
},
{
"restriction": "has",
"path": "properties.replacedBy",
"keep": false
}
]
}
}#### Extra Messages
Extra messages are appended at the end of every forecast tweet. They give additional weather information and are picked at random.
Extra messages require coordiantes to work.
`config.extra.coordinates.elevation` is the elevation in meters
`config.extra.coordinates.long` is the longitude west(west is negative, east is positive)
`config.extra.coordinates.lat` is the north latitude(north is positive, south is negative)Example:
"extra":{
"coordinates": {
"elevation": 231,
"long": -92.3341,
"lat": 38.9517
},
...
}
The avaialable message types are
- __joke__ Fetches a random joke from `data/jokes.json`'s "general" array
- __tutorial__ Mostly tells what weather conditions forecast icons correspond to.
- __lunar__ Tells the current phase of the moon
- __season__ Tells the number of days between the latest solstice/equinox and the next solstice/equinox
- __sunrise__ At day tells sunset and sunrise times and day length. At night tells last sunset and next sunrise and night length.
- __beaufort__ Describes the current wind speed using the [Beaufort scale](https://en.wikipedia.org/wiki/Beaufort_scale)
- __records__ Tells the hottest temperature, the coldest temperature, or the most precipitation that has ever occoured on the current day of the year.
- __cloudiness__ Forecasted %cloudiness for the next 9 hours same as the main forecast
- __humidity__ Forecasted %humidity for the next 9 hours same as the main forecast
- __precipitation__ Forecasted precipitation in mm for the next 9 hours same as the main forecast. If there is no precipitation cloudiness, humidity, or pressuire is displayed instead.
- __pressure__ Forecasted pressure in hectopascals for the next 9 hours same as the main forecast.
The probability of each type of message showing up is set by a weight. The probability of a message type showing up is its weight / sum of all weights.
Setting all weights to 0 and having extras enabled causes an error.
Example:
The sum of all the weights is 100. Jokes have 1/100 chance of showing up. Moon phase messages have a 15/100 chance of showing up."extra":{
...
"probabilities":{
"joke": 1,
"tutorial": 9,
"lunar": 15,
"season": 5,
"sunrise": 15,
"beaufort": 10,
"records": 0,
"cloudiness": 10,
"humidity": 10,
"precipitation": 15,
"pressure": 10
}
}Extras can be disabled with:
"extra":{
"disabled": true,
...
}#### Retweets
`config.twitter.localStationHandle` can be set to a local weather station's twitter handle to retweet all their tweets every hour on the 30 minute mark.
Example:"twitter": {
...
"localStationHandle": "NWSStLouis"
}