mirror of
https://github.com/netzbegruenung/green-spider-api.git
synced 2024-05-02 00:34:52 +02:00
Merge pull request #1 from netzbegruenung/add-site-details-endpoint
Add details endpoint
This commit is contained in:
commit
19afd53fa4
10
README.md
10
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
|
# green-spider-api
|
||||||
|
|
||||||
Web service API für Green Spider
|
Web service API für Green Spider
|
||||||
|
|
||||||
## API Dokumentation
|
## 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/`
|
### `GET /api/v1/spider-results/last-updated/`
|
||||||
|
|
||||||
Gibt den Zeitpunkt der letzten Aktualisierung der Spider-Ergebnisse zurück.
|
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
|
## Konfiguration
|
||||||
|
|
||||||
Umgebungsvariablen:
|
Umgebungsvariablen:
|
||||||
|
|
33
main.py
33
main.py
|
@ -12,11 +12,12 @@ from google.cloud import datastore
|
||||||
credentials_path = getenv('GCLOUD_DATASTORE_CREDENTIALS_PATH')
|
credentials_path = getenv('GCLOUD_DATASTORE_CREDENTIALS_PATH')
|
||||||
datastore_client = datastore.Client.from_service_account_json(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):
|
def get_compact_results(client):
|
||||||
query = client.query(kind=entity_kind,
|
query = client.query(kind=spider_results_kind,
|
||||||
order=['-created'],
|
order=['-created'],
|
||||||
#projection=['created', 'meta', 'score'],
|
#projection=['created', 'meta', 'score'],
|
||||||
)
|
)
|
||||||
|
@ -50,7 +51,7 @@ class LastUpdated(object):
|
||||||
"""
|
"""
|
||||||
Informs about the most recent update to the spider results data
|
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'],
|
order=['-created'],
|
||||||
projection=['created'])
|
projection=['created'])
|
||||||
items = list(query.fetch(limit=1, eventual=True))
|
items = list(query.fetch(limit=1, eventual=True))
|
||||||
|
@ -77,6 +78,31 @@ class CompactResults(object):
|
||||||
resp.media = out
|
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({
|
handlers = media.Handlers({
|
||||||
'application/json': jsonhandler.JSONHandler(),
|
'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/last-updated/', LastUpdated())
|
||||||
app.add_route('/api/v1/spider-results/compact/', CompactResults())
|
app.add_route('/api/v1/spider-results/compact/', CompactResults())
|
||||||
|
app.add_route('/api/v1/spider-results/site', SiteDetails())
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
httpd = simple_server.make_server('127.0.0.1', 5000, app)
|
httpd = simple_server.make_server('127.0.0.1', 5000, app)
|
||||||
|
|
Loading…
Reference in a new issue