dev: begin implementing driver for newsdata.io

This commit is contained in:
KernelDeimos
2025-04-24 16:49:39 -04:00
parent 89b8c8de1d
commit 78ae6f6bf2
2 changed files with 62 additions and 0 deletions

View File

@@ -9,6 +9,10 @@ class ExternalExtrasModule extends AdvancedBase {
const { IPGeoService } = require('./IPGeoService');
services.registerService('ipgeo', IPGeoService);
}
if ( !! config?.services?.newsdata ) {
const { NewsDataService } = require('./NewsDataService');
services.registerService('newsdata', NewsDataService);
}
}
}

View File

@@ -0,0 +1,58 @@
const APIError = require("../../api/APIError");
const BaseService = require("../../services/BaseService");
class NewsDataService extends BaseService {
async ['__on_driver.register.interfaces'] () {
const svc_registry = this.services.get('registry');
const col_interfaces = svc_registry.get('interfaces');
col_interfaces.set('newsdata', {
description: 'NewsData.io',
methods: {
newsdata: {
description: 'Report geolocation information',
parameters: {
'*': {
type: 'json',
},
},
result: {
type: 'json'
},
},
}
});
}
static IMPLEMENTS = {
newsdata: {
async newsdata (parameters) {
// doing this makes vscode recognize what's being required
const require = this.require;
const axios = require('axios');
const querystring = require('querystring');
const qstr = querystring.stringify({
...parameters,
// Yep, API key reall does go in the query string.
// This is what the docs say to do.
apikey: this.config.apiKey,
size: 10,
});
const resp = await axios.request({
method: 'GET',
url: 'https://newsdata.io/api/1/latest?' + qstr,
});
return resp.data;
}
}
}
}
module.exports = {
NewsDataService,
};