2023-03-18 16:55:08 +01:00
|
|
|
import 'dart:convert';
|
|
|
|
|
2023-03-16 14:57:15 +01:00
|
|
|
import 'package:dio/dio.dart';
|
2023-03-18 16:55:08 +01:00
|
|
|
import 'package:voyagehandbook/api/classes.dart';
|
2023-03-16 14:57:15 +01:00
|
|
|
|
2023-03-28 18:08:26 +02:00
|
|
|
/*
|
|
|
|
Voyage Handbook - The open-source WikiVoyage reader
|
|
|
|
Copyright (C) 2023 Matyáš Caras
|
|
|
|
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
the Free Software Foundation, either version 3 of the License.
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
2023-03-18 16:55:08 +01:00
|
|
|
class WikiApi {
|
|
|
|
static final _dio = Dio(
|
|
|
|
BaseOptions(baseUrl: "https://api.wikimedia.org/core/v1/wikivoyage/en/"));
|
2023-03-16 14:57:15 +01:00
|
|
|
|
2023-03-18 16:55:08 +01:00
|
|
|
static Future<Response> _getRequest(String endpoint) async {
|
2023-03-24 23:48:55 +01:00
|
|
|
return await _dio.get(
|
|
|
|
endpoint,
|
|
|
|
options: Options(
|
|
|
|
headers: {"User-Agent": "VoyageHandbook/1.0.0"},
|
|
|
|
validateStatus: (_) => true,
|
|
|
|
responseType: ResponseType.plain),
|
|
|
|
);
|
2023-03-18 16:55:08 +01:00
|
|
|
}
|
2023-03-16 14:57:15 +01:00
|
|
|
|
2023-03-18 16:55:08 +01:00
|
|
|
/// Searches for pages using the WikiMedia API
|
|
|
|
static Future<List<SearchResponse>> search(String q, {int limit = 5}) async {
|
|
|
|
var r = await _getRequest("search/page?q=$q&limit=$limit");
|
|
|
|
if (r.statusCode! > 399) return Future.error("API error ${r.statusCode}");
|
|
|
|
var json = jsonDecode(r.data)["pages"];
|
|
|
|
return List<SearchResponse>.generate(
|
|
|
|
json.length, (index) => SearchResponse.fromJson(json[index]));
|
|
|
|
}
|
2023-03-24 23:48:55 +01:00
|
|
|
|
|
|
|
static Future<RawPage> getRawPage(String key) async {
|
|
|
|
var r = await _getRequest("page/$key/with_html");
|
|
|
|
if (r.statusCode! > 399) return Future.error("API error ${r.statusCode}");
|
|
|
|
return RawPage.fromJson(jsonDecode(r.data));
|
|
|
|
}
|
2023-03-16 14:57:15 +01:00
|
|
|
}
|