mirror of
				https://github.com/strapi/strapi.git
				synced 2025-10-29 17:04:13 +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();
 | |
|   },
 | |
| };
 | |
| ```
 | 
