duck-duck-scrape
Version:
Search from DuckDuckGo and use it's spice APIs.
126 lines (125 loc) • 4.08 kB
TypeScript
import { NeedleOptions } from 'needle';
export declare type ForecastIcon = 'partly-cloudy-day' | 'partly-cloudy-night' | 'cloudy' | 'rain' | 'clear-day' | 'snow' | 'fog' | 'clear-night' | 'clear-day';
export declare type ForecastPrecipType = 'rain' | 'snow';
export declare type ForecastAlertSeverity = 'advisory';
export interface ForecastMinutelyData {
/** The timestamp of the data point. */
time: number;
precipIntensity: number;
precipProbability: number;
}
export interface ForecastHourlyData extends ForecastMinutelyData {
summary: string;
icon: ForecastIcon;
precipType?: ForecastPrecipType;
temperature: number;
apparentTemperature: number;
dewPoint: number;
humidity: number;
pressure: number;
windSpeed: number;
windGust: number;
windBearing: number;
cloudCover: number;
uvIndex: number;
visibility: number;
ozone: number;
solar?: {
azimuth: number;
altitude: number;
dni: number;
ghi: number;
dhi: number;
etr: number;
};
}
export interface ForecastDailyData extends Omit<ForecastHourlyData, 'apparentTemperature' | 'solar'> {
sunriseTime: number;
sunsetTime: number;
moonPhase: number;
precipIntensityMax: number;
precipIntensityMaxTime: number;
temperatureHigh: number;
temperatureHighTime: number;
temperatureLow: number;
temperatureLowTime: number;
apparentTemperatureHigh: number;
apparentTemperatureHighTime: number;
apparentTemperatureLow: number;
apparentTemperatureLowTime: number;
windGustTime: number;
uvIndexTime: number;
temperatureMin: number;
temperatureMinTime: number;
temperatureMax: number;
temperatureMaxTime: number;
apparentTemperatureMin: number;
apparentTemperatureMinTime: number;
apparentTemperatureMax: number;
apparentTemperatureMaxTime: number;
}
export interface ForecastAlert {
/** The title of the alert. */
title: string;
/** The regions where this alert applies to. */
regions: string[];
/** The severity of the alert. */
severity: ForecastAlertSeverity;
/** The time of the alert. */
time: 1618790400;
/** The time when the alert expires. */
expires: 1618826400;
/** The description of the alert. */
description: string;
/** The URL of the alert. (i.e. https://alerts.weather.gov/cap/wwacapget.php?x=WY12619ACC3C34.SpecialWeatherStatement.12619AD9E960WY.RIWSPSRIW.9e2be4e2b73121e0cb1c2b66684b32b4) */
uri: string;
}
/**
* The result from the forecast spice.
*/
export interface ForecastResult {
latitude: number;
longitude: number;
timezone: string;
currently: Omit<ForecastHourlyData, 'precipType'> & {
nearestStormDistance: number;
nearestStormBearing: number;
precipIntensity: number;
precipProbability: number;
};
minutely: {
summary: string;
icon: ForecastIcon;
data: ForecastMinutelyData[];
};
hourly: {
summary: string;
icon: ForecastIcon;
data: ForecastHourlyData[];
};
daily: {
summary: string;
icon: ForecastIcon;
data: ForecastDailyData[];
};
alerts: ForecastAlert[];
flags: {
sources: string[];
'nearest-station': number;
units: string;
'darksky-unavailable'?: string;
'ddg-location': string;
};
offset: number;
}
/**
* Get the forecast of a location. Returns `null` if there are no results.
* Data provided by Dark Sky and other sources.
* @category Spice
* @see https://darksky.net/
* @param query The query to search with
* @param locale The locale to give the summaries in
* @param needleOptions The options for the HTTP request
* @returns The forecast result
*/
export declare function forecast(query: string, locale?: string, needleOptions?: NeedleOptions): Promise<ForecastResult | null>;