import urllib.parse import arrow import requests from arrow.parser import ParserError from provider import get_logger, Provider, Status, ProviderException logger = get_logger('pioupiou') class Pioupiou(Provider): provider_code = 'pioupiou' provider_name = 'pioupiou.fr' provider_url = 'http://pioupiou.fr' def get_status(self, station_id, status, location_date, location_status): if status == 'on': if location_date: if (arrow.utcnow().timestamp - location_date.timestamp) < 3600 * 24 * 15: up_to_date = True else: logger.warn("'{0}': last known location date is {1}".format(station_id, location_date.humanize())) up_to_date = False else: logger.warn("'{0}': no last known location".format(station_id)) return Status.RED if location_status and up_to_date: return Status.GREEN else:
import argparse import arrow from pymongo import uri_parser, MongoClient from provider import get_logger from settings import * logger = get_logger('delete_stations') parser = argparse.ArgumentParser(description='Delete stations not seen since DAYS') parser.add_argument('--days', type=int, default=60, help="Specify the number of days since 'last seen' " "before deleting the station [default: %(default)s]") args = vars(parser.parse_args()) uri = uri_parser.parse_uri(MONGODB_URL) client = MongoClient(uri['nodelist'][0][0], uri['nodelist'][0][1]) mongo_db = client[uri['database']] logger.info("Deleting all stations not seen since {days} days...".format(days=str(args['days']))) now = arrow.now().timestamp for station in mongo_db.stations.find({'seen': {'$lt': now - args['days'] * 3600 * 24}}): seen = arrow.Arrow.fromtimestamp(station['seen']) logger.info("Deleting {id} ['{name}'], last seen at {seen}".format(id=station['_id'], name=station['short'], seen=seen.format('YYYY-MM-DD HH:mm:ssZZ'))) mongo_db[station['_id']].drop() mongo_db.stations.remove({'_id': station['_id']})
import io import json from os import path import arrow import requests from provider import get_logger, Provider, Status, ProviderException logger = get_logger('meteoswiss') class MeteoSwiss(Provider): provider_code = 'meteoswiss' provider_name = 'meteoswiss.ch' provider_url = 'http://www.meteoswiss.ch' def process_data(self): try: logger.info("Processing MeteoSwiss data...") with open(path.join(path.dirname(__file__), 'meteoswiss/vqha69.json')) as in_file: descriptions = json.load(in_file) data_file = io.StringIO(requests.get("http://data.geo.admin.ch/ch.meteoschweiz.swissmetnet/VQHA69.csv", headers={'Accept': '*/*', 'User-Agent': 'winds.mobi'}, timeout=(self.connect_timeout, self.read_timeout)).text) lines = data_file.readlines() keys = lines[2].strip().split('|') for line in lines[3:]:
from datetime import datetime, timedelta from urllib.parse import urlparse import MySQLdb import arrow from cachetools import hashkey, cached import wgs84 from provider import get_logger, Provider, ProviderException, Status from settings import * logger = get_logger('windline') class NoMeasure(Exception): pass class Windline(Provider): provider_code = 'windline' provider_name = 'windline.ch' provider_url = 'http://www.windline.ch' # status_property_id = get_property_id('status') status_property_id = 13 # altitude_property_id = get_property_id('altitude') altitude_property_id = 9 # longitude_property_id = get_property_id('longitude') longitude_property_id = 16 # latitude_property_id = get_property_id('latitude') latitude_property_id = 17
import urllib.parse import arrow import arrow.parser import requests from arrow import Arrow from provider import get_logger, Provider, ProviderException logger = get_logger('windspots') class Windspots(Provider): provider_code = 'windspots' provider_name = 'windspots.com' provider_url = 'http://www.windspots.com' def process_data(self): try: logger.info("Processing WindsSpots data...") result = requests.get("http://api.windspots.com/windmobile/stationinfos?allStation=true", timeout=(self.connect_timeout, self.read_timeout)) for windspots_station in result.json()['stationInfo']: station_id = None try: windspots_id = windspots_station['@id'][10:] station_id = self.get_station_id(windspots_id) station = self.save_station( station_id, windspots_station['@shortName'],
import re import urllib.parse from datetime import datetime, timedelta import pytz import requests import xmltodict from provider import get_logger, Provider, Status, to_float, ProviderException logger = get_logger('holfuy') class Holfuy(Provider): provider_code = 'holfuy' provider_name = 'holfuy.hu' provider_url = 'http://holfuy.hu' def process_data(self): try: logger.info("Processing Holfuy data...") result = requests.get("http://holfuy.hu/en/mkrs.php", timeout=(self.connect_timeout, self.read_timeout)) result.encoding = 'utf-8' xml_files = re.split('<\?xml version=\"1.0\" encoding=\"UTF-8\"\?>', result.text) for markers_xml in xml_files[1:]: markers_json = xmltodict.parse(markers_xml)['markers']['marker'] for holfuy_station in markers_json: station_id = None try:
import urllib.parse import requests from provider import get_logger, Provider, ProviderException, Status logger = get_logger('jdc') class Jdc(Provider): provider_code = 'jdc' provider_name = 'jdc.ch' provider_url = 'http://meteo.jdc.ch' # Jdc status: offline, maintenance, test or online def get_status(self, status): if status == 'offline': return Status.HIDDEN elif status == 'maintenance': return Status.RED elif status == 'test': return Status.ORANGE elif status == 'online': return Status.GREEN else: return Status.HIDDEN def process_data(self): try: logger.info("Processing JDC data...") result = requests.get("http://meteo.jdc.ch/API/?Action=StationView&flags=all",