mirror of
				https://github.com/strapi/strapi.git
				synced 2025-11-03 19:36:20 +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();
 | 
						|
  },
 | 
						|
};
 | 
						|
```
 |