@@ -3,19 +3,17 @@ var wget = require('wget');
33var path = require ( 'path' ) ;
44var fs = require ( 'fs' ) ;
55var ensureDir = require ( 'ensureDir' ) ;
6- var ghost_base = require ( './ghost_base.js ' ) ;
6+ var inquirer = require ( 'inquirer ' ) ;
77
88var imgMatchRegex = / ( ! \[ .* ?\] \( ) ( .+ ?) ( \) ) / g;
9- var markdownPath = path . join ( '.' , 'markdown' ) ;
10- var tagPath = path . join ( '.' , 'tag' ) ;
119
12- function saveFile ( url , imgUrl ) {
10+ var saveFile = function ( url , imgUrl ) {
1311 if ( imgUrl == null ) return ;
1412
1513 url = url . replace ( 'https' , 'http' ) ; // I don't know why
1614 var src = url + imgUrl ;
1715 var folderPath = path . join ( '.' , imgUrl . replace ( path . basename ( imgUrl ) , '' ) ) ;
18-
16+
1917 request . get ( src ) . end ( function ( iErr , iRes ) {
2018 if ( iErr ) {
2119 console . log ( "ERROR" ) ;
@@ -28,12 +26,12 @@ function saveFile(url, imgUrl) {
2826 console . log ( "ERROR with folder" ) ;
2927 } else {
3028 var download = wget . download ( src , path . join ( '.' , imgUrl ) , { } ) ;
31- download . on ( 'error' , function ( err ) {
32- console . log ( err ) ;
33- } ) ;
34- download . on ( 'end' , function ( output ) {
35- console . log ( output ) ;
36- } ) ;
29+ // download.on('error', function(err) {
30+ // console.log(err);
31+ // });
32+ // download.on('end', function(output) {
33+ // console.log(output);
34+ // });
3735 }
3836 } ) ;
3937
@@ -42,77 +40,128 @@ function saveFile(url, imgUrl) {
4240 }
4341 }
4442 } ) ;
45- }
46-
47- function getPosts ( data ) {
48- var authors = { "1" : "geo" , "2" : "rox" } ;
49-
50- for ( var d in data ) {
51- var date = data [ d ] . published_at ;
43+ } ;
5244
53- if ( date == null || date . length == 0 ) continue ;
45+ var processor = {
46+ Post : function ( url , token , mainPath ) {
47+ request . get ( url + '/ghost/api/v0.1/posts?limit=all' )
48+ . set ( 'Authorization' , 'bearer ' + token )
49+ . end ( function ( dErr , dRes ) {
50+ if ( dErr ) {
51+ console . log ( 'ERROR' ) ;
52+ console . log ( dErr ) ;
53+ } else {
54+ var data = dRes . body . posts ;
55+ var authors = { "1" : "geo" , "2" : "rox" } ;
5456
55- var title = date . substring ( 0 , 10 ) + '-' + data [ d ] . slug + '.md' ;
56- var content = '---\r\nlayout: post\r\ntitle: "' + data [ d ] . title + '"\r\ntags: ' +
57- ( data [ d ] . tags ? data [ d ] . tags . map ( function ( el ) {
58- return '- ' + el ;
59- } ) . join ( "\r\n" ) : '' ) + '\r\nauthor: ' + authors [ data [ d ] . created_by ] +
60- '\r\nimage: ' + data [ d ] . image + '\r\n---\r\n' +
61- data [ d ] . markdown . replace ( / \r ? \n / g, "\r\n" ) ;
57+ for ( var d in data ) {
58+ var date = data [ d ] . published_at ;
6259
63- // Save Markdown
64- fs . writeFile ( path . join ( markdownPath , title ) , content , { encoding : 'utf8' } , function ( fileErr ) {
65- if ( fileErr ) console . log ( fileErr ) ;
66- } ) ;
60+ if ( date == null || date . length == 0 ) continue ;
6761
68- //// SEO image
69- //var imgUrl = data[d].image;
70- //saveFile(url, imgUrl);
62+ var title = date . substring ( 0 , 10 ) + '-' + data [ d ] . slug + '.md' ;
63+ var content = '---\r\nlayout: post\r\ntitle: "' + data [ d ] . title + '"\r\ntags: ' +
64+ ( data [ d ] . tags ? data [ d ] . tags . map ( function ( el ) {
65+ return '- ' + el ;
66+ } ) . join ( "\r\n" ) : '' ) + '\r\nauthor: ' + authors [ data [ d ] . created_by ] +
67+ '\r\nimage: ' + data [ d ] . image + '\r\n---\r\n' +
68+ data [ d ] . markdown . replace ( / \r ? \n / g, "\r\n" ) ;
7169
72- //// Discover all images in post, saving only from the same server
73- //var match;
74- //while (match = imgMatchRegex.exec(data[d].markdown)) {
75- // if (match[2][0] == '/') saveFile(url, match[2]);
76- //}
77- }
78- }
70+ // Save Markdown
71+ fs . writeFile ( path . join ( mainPath , title ) , content , { encoding : 'utf8' } , function ( fileErr ) {
72+ if ( fileErr ) console . log ( fileErr ) ;
73+ } ) ;
74+ }
75+ }
76+ } ) ;
77+ } ,
78+ Images : function ( url , token , mainPath ) {
79+ request . get ( url + '/ghost/api/v0.1/posts?limit=all' )
80+ . set ( 'Authorization' , 'bearer ' + token )
81+ . end ( function ( dErr , dRes ) {
82+ if ( dErr ) {
83+ console . log ( 'ERROR' ) ;
84+ console . log ( dErr ) ;
85+ } else {
86+ var data = dRes . body . posts ;
7987
80- function processPosts ( url , token ) {
81- request . get ( url + '/ghost/api/v0.1/posts?limit=all' )
82- . set ( 'Authorization' , 'bearer ' + token )
83- . end ( function ( dErr , dRes ) {
84- if ( dErr ) {
85- console . log ( 'ERROR' ) ;
86- console . log ( dErr ) ;
87- } else {
88- getPosts ( dRes . body . posts ) ;
89- }
90- } ) ;
91- }
88+ for ( var d in data ) {
89+ // SEO image
90+ var imgUrl = data [ d ] . image ;
91+ saveFile ( url , imgUrl ) ;
9292
93- function processTags ( url , token ) {
94- request . get ( url + '/ghost/api/v0.1/tags?limit=all' )
95- . set ( 'Authorization' , 'bearer ' + token )
96- . end ( function ( dErr , dRes ) {
97- if ( dErr ) {
98- console . log ( 'ERROR' ) ;
99- console . log ( dErr ) ;
100- } else {
101- var data = dRes . body . tags ;
102- for ( var d in data ) {
103- fs . mkdirSync ( path . join ( tagPath , data [ d ] . slug ) ) ;
104- var content = '---\r\nlayout: tagpage\r\ntag: ' + data [ d ] . slug +
105- '\r\ntitle: ' + data [ d ] . name +
106- '\r\image: ' + data [ d ] . image +
107- '\r\description: ' + data [ d ] . description + '\r\n' +
108- '---' ;
93+ // Discover all images in post, saving only from the same server
94+ var match ;
95+ while ( match = imgMatchRegex . exec ( data [ d ] . markdown ) ) {
96+ if ( match [ 2 ] [ 0 ] == '/' ) saveFile ( url , match [ 2 ] ) ;
97+ }
98+ }
99+ }
100+ } ) ;
101+ } ,
102+ Tags : function ( url , token , mainPath ) {
103+ request . get ( url + '/ghost/api/v0.1/tags?limit=all' )
104+ . set ( 'Authorization' , 'bearer ' + token )
105+ . end ( function ( dErr , dRes ) {
106+ if ( dErr ) {
107+ console . log ( 'ERROR' ) ;
108+ console . log ( dErr ) ;
109+ } else {
110+ var data = dRes . body . tags ;
111+ for ( var d in data ) {
112+ fs . mkdirSync ( path . join ( mainPath , data [ d ] . slug ) ) ;
113+ var content = '---\r\nlayout: tagpage\r\ntag: ' + data [ d ] . slug +
114+ '\r\ntitle: ' + data [ d ] . name +
115+ '\r\image: ' + data [ d ] . image +
116+ '\r\description: ' + data [ d ] . description + '\r\n' +
117+ '---' ;
109118
110- fs . writeFile ( path . join ( 'tag' , data [ d ] . slug , "index.html" ) , content , { encoding : 'utf8' } , function ( fileErr ) {
111- if ( fileErr ) console . log ( fileErr ) ;
112- } ) ;
119+ fs . writeFile ( path . join ( mainPath , data [ d ] . slug , "index.html" ) , content , { encoding : 'utf8' } , function ( fileErr ) {
120+ if ( fileErr ) console . log ( fileErr ) ;
121+ } ) ;
122+ }
113123 }
114- }
115- } ) ;
116- }
124+ } ) ;
125+ }
126+ } ;
117127
118- ghost_base . process ( tagPath , processTags ) ;
128+ inquirer . prompt ( {
129+ type : 'checkbox' ,
130+ name : 'options' ,
131+ choices : [ 'Post' , 'Images' , 'Tags' ] ,
132+ message : 'What do you want to backup?'
133+ } , function ( data ) {
134+ if ( data . options . length == 0 ) return ;
135+ var questions = [ {
136+ type : 'input' ,
137+ name : 'url' ,
138+ message : 'Blog URL'
139+ } , {
140+ type : 'input' ,
141+ name : 'email' ,
142+ message : 'Email'
143+ } , {
144+ type : 'password' ,
145+ name : 'password' ,
146+ message : 'Password'
147+ } ] ;
148+ if ( process . argv . length >= 2 ) questions [ 0 ] . default = process . argv [ 2 ] ;
149+ if ( process . argv . length >= 3 ) questions [ 1 ] . default = process . argv [ 3 ] ;
150+
151+ inquirer . prompt ( questions , function ( answers ) {
152+ request . post ( answers . url + '/ghost/api/v0.1/authentication/token/' )
153+ . send ( { grant_type : 'password' , username : answers . email , password : answers . password , client_id : 'ghost-admin' } )
154+ . end ( function ( err , res ) {
155+ if ( err ) {
156+ console . log ( "ERROR" ) ;
157+ console . log ( err ) ;
158+ } else {
159+ for ( var d in data . options ) {
160+ var key = data . options [ d ] ;
161+ fs . mkdirSync ( path . join ( '.' , key ) ) ;
162+ processor [ key ] ( answers . url , res . body . access_token , path . join ( '.' , key ) ) ;
163+ }
164+ }
165+ } ) ;
166+ } ) ;
167+ } ) ;
0 commit comments