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