· 7 years ago · Sep 28, 2018, 08:10 AM
1// About
2// This script exports all stories as XML in a specific folder
3// -------
4// How to install?
5// 1. Create a folder for the project and inside a "data" folder
6// 2. $ npm init
7// 3. $ npm install storyblok-js-client --save
8// 4. Exchange SPACE_ID and YOUR_OAUTH2_TOKEN and optionally startWith to export only one specific folder
9// 5. $ node xml-export.js
10
11const StoryblokClient = require('storyblok-js-client')
12const fs = require('fs')
13const startWith = ''
14const spaceId = 'SPACE_ID'
15const oAuthToken = 'YOUR_OAUTH2_TOKEN'
16
17let Storyblok = new StoryblokClient({
18 oauthToken: oAuthToken
19})
20
21var StoryblokExporter = {
22 getAll(page) {
23 return Storyblok.get('spaces/' + spaceId + '/stories', {
24 per_page: 25,
25 search: startWith,
26 page: page
27 })
28 },
29 export(id) {
30 return Storyblok.get('spaces/' + spaceId + '/stories/' + id + '/export.xml')
31 }
32}
33
34async function getAllStories(){
35 var page = 1
36 var res = await StoryblokExporter.getAll(page)
37 var all = res.data.stories
38 var total = res.total
39 var lastPage = Math.ceil((res.total / 25))
40
41 while (page < lastPage){
42 page++
43 res = await StoryblokExporter.getAll(page)
44 res.data.stories.forEach((story) => {
45 all.push(story)
46 })
47 }
48
49 for (var i = 0; i < all.length; i++) {
50 exportResult = await StoryblokExporter.export(all[i].id)
51 console.log('Saving ' + all[i].id)
52 fs.writeFile('./data/' + all[i].id + '.xml', exportResult.data, (err) => {
53 if (err) throw err
54 })
55 }
56
57 return all
58}
59
60getAllStories().then((result) => {
61 console.log('Finished')
62})