mirror of
https://github.com/strapi/strapi.git
synced 2025-07-23 17:10:08 +00:00
93 lines
2.1 KiB
Markdown
93 lines
2.1 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();
|
||
|
},
|
||
|
};
|
||
|
```
|