6 changed files with 165 additions and 117 deletions
@ -0,0 +1,12 @@ |
|||
[[source]] |
|||
url = "https://pypi.python.org/simple" |
|||
verify_ssl = true |
|||
name = "pypi" |
|||
|
|||
[packages] |
|||
pyowm = "*" |
|||
|
|||
[dev-packages] |
|||
|
|||
[requires] |
|||
python_version = "3.7" |
@ -0,0 +1,75 @@ |
|||
{ |
|||
"_meta": { |
|||
"hash": { |
|||
"sha256": "90ab82af397550e8743df5673adc3a1ad7f261129395971bee308376aaff8fd9" |
|||
}, |
|||
"pipfile-spec": 6, |
|||
"requires": { |
|||
"python_version": "3.7" |
|||
}, |
|||
"sources": [ |
|||
{ |
|||
"name": "pypi", |
|||
"url": "https://pypi.python.org/simple", |
|||
"verify_ssl": true |
|||
} |
|||
] |
|||
}, |
|||
"default": { |
|||
"certifi": { |
|||
"hashes": [ |
|||
"sha256:046832c04d4e752f37383b628bc601a7ea7211496b4638f6514d0e5b9acc4939", |
|||
"sha256:945e3ba63a0b9f577b1395204e13c3a231f9bc0223888be653286534e5873695" |
|||
], |
|||
"version": "==2019.6.16" |
|||
}, |
|||
"chardet": { |
|||
"hashes": [ |
|||
"sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", |
|||
"sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" |
|||
], |
|||
"version": "==3.0.4" |
|||
}, |
|||
"geojson": { |
|||
"hashes": [ |
|||
"sha256:6e4bb7ace4226a45d9c8c8b1348b3fc43540658359f93c3f7e03efa9f15f658a", |
|||
"sha256:ccbd13368dd728f4e4f13ffe6aaf725b6e802c692ba0dde628be475040c534ba" |
|||
], |
|||
"version": "==2.5.0" |
|||
}, |
|||
"idna": { |
|||
"hashes": [ |
|||
"sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407", |
|||
"sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c" |
|||
], |
|||
"version": "==2.8" |
|||
}, |
|||
"pyowm": { |
|||
"hashes": [ |
|||
"sha256:1c51334a9bcd697993d4c68e5437d5f420d33dd7f5d872b2ad93c3c47b7a9649", |
|||
"sha256:2ac88777565518b9e9aa3fc172c543ada4cbfc667d83775cd17c0e52ea6ccc86", |
|||
"sha256:43d49901493a883335855d8dbd16f8aa0d2e26e0183b6b6fe8a5471904c0e37a", |
|||
"sha256:805bd2f42e15770c0d2822b77add7770685cb94cfbeae8633328d0d522332fd7", |
|||
"sha256:8fd41a18536f4d6c432bc6d9ea69994efb1ea9b43688cf19523659b6f4d86cf7", |
|||
"sha256:b3294065a08417b4b0367fc424a77a0caafa24df8fd842ba9b08f1b5542c092e" |
|||
], |
|||
"index": "pypi", |
|||
"version": "==2.10.0" |
|||
}, |
|||
"requests": { |
|||
"hashes": [ |
|||
"sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4", |
|||
"sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31" |
|||
], |
|||
"version": "==2.22.0" |
|||
}, |
|||
"urllib3": { |
|||
"hashes": [ |
|||
"sha256:b246607a25ac80bedac05c6f282e3cdaf3afb65420fd024ac94435cabe6e18d1", |
|||
"sha256:dbe59173209418ae49d485b87d1681aefa36252ee85884c31346debd19463232" |
|||
], |
|||
"version": "==1.25.3" |
|||
} |
|||
}, |
|||
"develop": {} |
|||
} |
@ -1,3 +1,5 @@ |
|||
# weather_to_freemobile |
|||
# weather\_to\_freemobile |
|||
|
|||
A simple script that sends OpenWeatherMap forecasts to a FreeMobile phone |
|||
A simple script that sends [OpenWeatherMap](https://openweathermap.org/) forecasts to a [FreeMobile](http://mobile.free.fr/) phone. |
|||
|
|||
To run the script you need to fill in `config.sample.json` and to rename it to `config.json`. |
@ -0,0 +1,7 @@ |
|||
{ |
|||
"freemobile_user":"", |
|||
"freemobile_apikey":"", |
|||
"openweathermap_city":"Paris,FR", |
|||
"openweathermap_apikey":"", |
|||
"openweathermap_language":"fr" |
|||
} |
@ -0,0 +1,64 @@ |
|||
#!/usr/bin/python3 |
|||
""" |
|||
A simple script that sends the daily weather to a FreeMobile phone |
|||
""" |
|||
import json |
|||
import logging |
|||
import pyowm |
|||
import requests |
|||
|
|||
class WeatherToFreemobile(): |
|||
def __init__(self, config_file='config.json'): |
|||
logging.info('Load configuration from config.json file') |
|||
with open('config.json') as config_file: |
|||
self.config = json.load(config_file) |
|||
|
|||
def send_sms_to_freemobile(self, message): |
|||
""" |
|||
Sends a SMS using the FreeMobile API |
|||
https://mobile.free.fr/moncompte/index.php?page=options |
|||
""" |
|||
data = { |
|||
'user':self.config['freemobile_user'], |
|||
'pass':self.config['freemobile_apikey'], |
|||
'msg':bytes(message,'utf-8').decode('iso-8859-1') |
|||
} |
|||
logging.debug(data) |
|||
|
|||
logging.info('Contacting FreeMobile API') |
|||
r = requests.post('https://smsapi.free-mobile.fr/sendmsg', json = data) |
|||
if r.status_code == 200: |
|||
logging.info('SMS sent') |
|||
else: |
|||
logging.warning('SMS *not* sent. Status code %s', r.status_code) |
|||
|
|||
def get_weather(self): |
|||
""" |
|||
Gets the current weather from OpenWeatherMap |
|||
""" |
|||
city = self.config['openweathermap_city'] |
|||
apikey = self.config['openweathermap_apikey'] |
|||
apilanguage = self.config['openweathermap_apikey'] |
|||
|
|||
logging.info('Opening OpenWeatherMap API') |
|||
owm = pyowm.OWM(apikey,language=apilanguage) |
|||
|
|||
fc = owm.daily_forecast(city,limit=1) |
|||
f = fc.get_forecast() |
|||
return_message="" |
|||
for weather in f: |
|||
temp = weather.get_temperature(unit='celsius') |
|||
return_message += '{} : {} (min {}ºC, max {}ºC, rain:{}mm)'.format( |
|||
weather.get_reference_time('date').strftime('%x'), |
|||
weather.get_detailed_status(), |
|||
temp['min'], |
|||
temp['max'], |
|||
weather.get_rain() |
|||
) |
|||
logging.info("Got the following weather: {}".format(return_message)) |
|||
return return_message |
|||
|
|||
if __name__ == "__main__": |
|||
logging.basicConfig(level=logging.DEBUG, format=' %(asctime)s - %(levelname)s - %(message)s') |
|||
wtf = WeatherToFreemobile() |
|||
wtf.send_sms_to_freemobile(wtf.get_weather()) |
Loading…
Reference in new issue