mirror of
https://github.com/strapi/strapi.git
synced 2025-07-23 17:10:08 +00:00
97 lines
2.2 KiB
Markdown
97 lines
2.2 KiB
Markdown
# Fetching external data
|
|
|
|
This guide explains how to fetch data from an external service to use it in your app.
|
|
|
|
In this example we will see how to daily fetch Docker pull count to store the result in your database.
|
|
|
|
## Content Type settings
|
|
|
|
First, we need to create a Content Type, in this example we will call it `hit` with a `date` and `count` attribute.
|
|
|
|
Your Content Type should look like this:
|
|
|
|
**Path —** `./api/hit/models/Hit.settings.json`
|
|
|
|
```json
|
|
{
|
|
"connection": "default",
|
|
"collectionName": "hits",
|
|
"info": {
|
|
"name": "hit",
|
|
"description": ""
|
|
},
|
|
"options": {
|
|
"increments": true,
|
|
"timestamps": true,
|
|
"comment": ""
|
|
},
|
|
"attributes": {
|
|
"count": {
|
|
"type": "integer"
|
|
},
|
|
"date": {
|
|
"type": "date"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## Fetch the data
|
|
|
|
Now we will create a function that will be usable everywhere in your strapi application.
|
|
|
|
**Path —** `./config/functions/docker.js`
|
|
|
|
```js
|
|
const axios = require('axios');
|
|
|
|
module.exports = async () => {
|
|
const { data } = await axios.get(
|
|
'https://hub.docker.com/v2/repositories/strapi/strapi/'
|
|
);
|
|
|
|
console.log(data);
|
|
};
|
|
```
|
|
|
|
`data` contains all the data received from the Docker Hub API. What we want here is to add the `pull_count` value in your database.
|
|
|
|
## Create a `hit` entry
|
|
|
|
let's programmatically create the entry.
|
|
|
|
**Path —** `./config/functions/docker.js`
|
|
|
|
```js
|
|
const axios = require('axios');
|
|
|
|
module.exports = async () => {
|
|
const { data } = await axios.get(
|
|
'https://hub.docker.com/v2/repositories/strapi/strapi/'
|
|
);
|
|
|
|
await strapi.query('hit').create({
|
|
date: new Date(),
|
|
count: data.pull_count,
|
|
});
|
|
};
|
|
```
|
|
|
|
With this code, everytime this function is called it will fetch the docker repo's data and insert the current `pull_count` with the corresponding date in your Strapi database.
|
|
|
|
## Call the function
|
|
|
|
Here is how to call the function in your application `strapi.config.functions.docker()`
|
|
|
|
So let's execute this function everyday at 2am. For this we will use a [CRON tasks](../concepts/configurations.md#cron-tasks).
|
|
|
|
**Path —** `./config/functions/cron.js`
|
|
|
|
```js
|
|
module.exports = {
|
|
'0 2 * * *': () => {
|
|
strapi.config.functions.docker();
|
|
},
|
|
};
|
|
```
|