Skip to content

This service cleverly transforms weather web pages into a usable (and free!) rest API

License

Notifications You must be signed in to change notification settings

victrme/racle-meteo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

96 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Racle météo

This service cleverly transforms weather web pages into a usable (and free!) rest API. It uses accuweather and/or foreca under the hood.

  • Sturdy: Uses other providers as fallback to guarentee a response if a provider becomes invalid
  • Flexible: Easy to update with strong typing and htmlparser2 as basic parser
  • Compatible: Pure typescript using deno and small dependencies means you can install it almost anywhere

Install

Deploy a Cloudflare Worker to start using your own racle-meteo. You do not need any API key. Migrating to another cloud provider or your own server will remove the automatic location.

Using Node

npm install
# added 21 packages, and audited 22 packages in 2s

npm run dev
# ⎔ Starting local server...
# [wrangler:inf] Ready on http://127.0.0.1:8787

npm run deploy
# Total Upload: 179.64 KiB / gzip: 60.84 KiB
# Uploaded racle-meteo (25.80 sec)

Using Deno

Wrangler is not yet fully compatible with Deno and requires some npm. Need to come back here when Wrangler supports Deno. Uses npx for now.

deno install
# ...

deno task dev
# Task dev npx wrangler dev
# ⎔ Starting local server...
# [wrangler:inf] Ready on http://localhost:8787

deno task deploy
# Task deploy npx wrangler deploy
# Total Upload: 179.64 KiB / gzip: 60.84 KiB
# Uploaded racle-meteo (25.80 sec)

deno task test
# ok | 4 passed | 0 failed (3s)

Use

Define a weather provider to start using the API.

Parameters

Parameter Type Required Description
provider accuweather, foreca, weathercom, auto required Choose the weather provider. "Auto" returns "simple" data, specific providers returns all, see "data".
geo any optional Geo returns a list of found locations.
query, q string optional Matches a location based on your query. Best to use as "City,CountryCode". Adding "query" overrides "lat" & "lon" parameters.
lat string optional Location latitude.
lon string optional Location longitude.
lang string optional English by default. Some languages are only available on accuweather, see language list below. Incorrect lang fallback to english.
unit C, F optional Useful for accuweather or when using "simple" data. Foreca always returns celsius and farenheit.
data all, simple optional Select "all" to retrieve all the data from the provider's webpage. "simple" returns only data available for all providers. "all" by default.
debug nodes, content optional Debugging "nodes" returns a list of found html tags. "content" shows strings collected before being manipulated.

Response example

Query

provider lang unit data
foreca fr C simple

Response

{
  "meta": {
    "url": "https://www.foreca.com/en/102988507/Paris",
    "lang": "en",
    "provider": "foreca"
  },
  "geo": {
    "lat": 48.853,
    "lon": 2.348,
    "city": "Paris",
    "country": "FR"
  },
  "now": {
    "icon": "rain",
    "description": "Overcast and rain",
    "temp": 13,
    "feels": 13
  },
  "sun": {
    "rise": [8, 7],
    "set": [19, 5]
  },
  "daily": [
    { "time": "2024-10-12T11:00:00.000Z", "high": 16, "low": 13 },
    { "time": "2024-10-13T11:00:00.000Z", "high": 14, "low": 10 }
    // ...
  ]
}

Simple icon equivalences

As a union:

clearsky | fewclouds | brokenclouds | overcastclouds | sunnyrain | lightrain | rain | thunderstorm | snow | mist

Equivalence between other providers:

{
  "clearsky": {
    "accuweather": "1, 2, 33, 34",
    "foreca": "d000, d100, n000, n100"
  },
  "fewclouds": {
    "accuweather": "3, 4, 5, 35, 36, 37",
    "foreca": "d200, d500, n200, n500"
  },
  "brokenclouds": {
    "accuweather": "6, 7, 38",
    "foreca": "d300, n300"
  },
  "overcastclouds": {
    "accuweather": "8",
    "foreca": "d400, n400"
  },
  "sunnyrain": {
    "accuweather": "14, 17",
    "foreca": "d210, n210"
  },
  "lightrain": {
    "accuweather": "12, 13, 39",
    "foreca": "d310, d410, d240, n310, n410, n240"
  },
  "rain": {
    "accuweather": "18, 19, 29, 40",
    "foreca": "d320, d420, d430, n320, n420, n430"
  },
  "thunderstorm": {
    "accuweather": "15, 16, 41, 42",
    "foreca": "d340, d440, n340, n440"
  },
  "snow": {
    "accuweather": "20, 21, 22, 23, 24, 25, 26, 43, 44",
    "foreca": "d221, d311, d411, d221, d321, d431, d212, d312, d412, d222, d322, d422, d432, n221, n311, n411, n221, n321, n431, n212, n312, n412, n222, n322, n422, n432"
  },
  "mist": {
    "accuweather": "11",
    "foreca": "d600, n600"
  }
}

Languages available

Language codes are following the ISO-639 standard. A wrong language throws an error. Sanitized so that:

  • lang is case insensitive
  • - or _ works
  • pt resolves to pt-pt
  • localization (-XX) is removed with foreca
code name foreca accuweather
en English true true
es Español true true
fr Français true true
da Dansk true true
pt-pt Português true
nl Nederlands true true
no Norsk true
it Italiano true true
de Deutsch true true
sv Svenska true true
fi Suomi true
zh-hk 中文 (HK) true
zh-cn 中文 (SIM) true
zh-tw 中文 (Taiwan) true
es-ar Español (Argentina) true
es-mx Español (Latin America) true
sk Slovenčinu true true
ro Romana true true
cs Čeština true true
hu Magyar true true
pl Polski true true
ca Català true
pt-br Português (Brazil) true
hi हिन्दी true
ru русский true true
ar عربي true
el Ελληνικά true true
en-gb English (UK) true
ja 日本語 true
ko 한국어 true
tr TÜRKÇE true
fr-ca Français (Canada) true
he עברית true
sl Slovenski true
uk Українське true true
id Bahasa Indonesia true
bg български true true
et Eesti keeles true true
hr Hrvatski true true
kk Қазақша true
lt Lietuvių true
lv Latviski true true
mk Македонски true
ms Bahasa Melayu true
tl Tagalog true
sr Srpski true
th ไทย true
vi Tiếng Việt true
fa فارسی true
bn বাংলা true
bs bosanski true
is íslenska true
sw Kiswahili true
ur اُردُو true
sr-me Crnogorski true
uz Oʻzbekcha true
az Azərbaycanca true
ta தமிழ் true
gu ગુજરાતી true
kn ಕನ್ನಡ true
te తెలుగు true
mr मराठी true
pa ਪੰਜਾਬੀ true
my မြန်မာဘာသာ true

About

This service cleverly transforms weather web pages into a usable (and free!) rest API

Topics

Resources

License

Stars

Watchers

Forks