diff --git a/README.md b/README.md index de5a16a..e9f9666 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,13 @@ +[![Docker Repository on Quay](https://quay.io/repository/netzbegruenung/green-spider-api/status "Docker Repository on Quay")](https://quay.io/repository/netzbegruenung/green-spider-api) + # green-spider-api Web service API für Green Spider ## API Dokumentation +Hinweis: Die API ist in einer frühen Entwicklungsphase. Änderungen (breaking changes) ohne vorherige Ankündigung sind zu erwarten. + ### `GET /api/v1/spider-results/last-updated/` Gibt den Zeitpunkt der letzten Aktualisierung der Spider-Ergebnisse zurück. @@ -36,6 +40,12 @@ Gibt die kompakte Liste aller Sites aus. Diese enthält nur die Details, die fü ] ``` +### `GET /api/v1/spider-results/site?url={site_url}` + +Gibt sämtliche Inhalte zu einer Site aus. + +Ein Beispiel würde hier den Rahmen sprengen. + ## Konfiguration Umgebungsvariablen: diff --git a/main.py b/main.py index 26ebe89..6dfb014 100644 --- a/main.py +++ b/main.py @@ -12,11 +12,12 @@ from google.cloud import datastore credentials_path = getenv('GCLOUD_DATASTORE_CREDENTIALS_PATH') datastore_client = datastore.Client.from_service_account_json(credentials_path) -entity_kind = 'spider-results' +spider_results_kind = 'spider-results' +webscreenshots_kind = 'webscreenshots' def get_compact_results(client): - query = client.query(kind=entity_kind, + query = client.query(kind=spider_results_kind, order=['-created'], #projection=['created', 'meta', 'score'], ) @@ -50,7 +51,7 @@ class LastUpdated(object): """ Informs about the most recent update to the spider results data """ - query = datastore_client.query(kind=entity_kind, + query = datastore_client.query(kind=spider_results_kind, order=['-created'], projection=['created']) items = list(query.fetch(limit=1, eventual=True)) @@ -77,6 +78,31 @@ class CompactResults(object): resp.media = out +class SiteDetails(object): + + def on_get(self, req, resp): + """ + Returns details for one URL + """ + + url = req.get_param('url') + if url is None or url == '': + raise falcon.HTTPError(falcon.HTTP_400, + 'Bad request', + 'The parameter url must not be empty') + + key = datastore_client.key(spider_results_kind, req.get_param('url')) + entity = datastore_client.get(key) + if entity is None: + raise falcon.HTTPError(falcon.HTTP_404, + 'Not found', + 'A site with this URL does not exist') + + maxage = 24 * 60 * 60 # 24 hours in seconds + resp.cache_control = ["max_age=%d" % maxage] + resp.media = dict(entity) + + handlers = media.Handlers({ 'application/json': jsonhandler.JSONHandler(), }) @@ -88,6 +114,7 @@ app.resp_options.media_handlers = handlers app.add_route('/api/v1/spider-results/last-updated/', LastUpdated()) app.add_route('/api/v1/spider-results/compact/', CompactResults()) +app.add_route('/api/v1/spider-results/site', SiteDetails()) if __name__ == '__main__': httpd = simple_server.make_server('127.0.0.1', 5000, app)