Example #1
0
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:
Example #2
0
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']})
Example #3
0
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:]:
Example #4
0
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
Example #5
0
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'],
Example #6
0
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:
Example #7
0
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",