UNPKG

7.17 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _regenerator = require('babel-runtime/regenerator');
8
9var _regenerator2 = _interopRequireDefault(_regenerator);
10
11var _extends2 = require('babel-runtime/helpers/extends');
12
13var _extends3 = _interopRequireDefault(_extends2);
14
15var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
16
17var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
18
19/**
20 * Take a string containing a query and outputs records from the ISTEX API.
21 *
22 * @example
23 * from([{ query: 'this is a test' }])
24 * .pipe(ezs('ISTEXScroll', {
25 * maxPage: 2,
26 * size: 1,
27 * sid: 'test',
28 * }))
29 * @name ISTEXScroll
30 * @param {string} [query=input] ISTEX query
31 * @param {string} [sid="ezs-istex"] User-agent identifier
32 * @param {number} maxPage Maximum number of pages to get
33 * @param {number} [size=2000] size of each page of results
34 * @param {string} [duration="5m"] maximum duration between two requests
35 * @param {Array<string>} [field=["doi"]] fields to get
36 * @returns {Array<Object>}
37 */
38var ISTEXScrollMerge = function () {
39 var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(data, feed) {
40 var query, sid, maxPage, size, scroll, field, fields, output, location, parameters, urlObj, urlStr, response, json, nbPages, prevScrollId, i, _json, nextScrollURI, scrollId, res;
41
42 return _regenerator2.default.wrap(function _callee$(_context) {
43 while (1) {
44 switch (_context.prev = _context.next) {
45 case 0:
46 if (!this.isLast()) {
47 _context.next = 2;
48 break;
49 }
50
51 return _context.abrupt('return', feed.close());
52
53 case 2:
54 query = this.getParam('query') || data.query || '';
55 sid = this.getParam('sid', 'ezs-istex');
56 maxPage = Number(this.getParam('maxPage'));
57 size = Number(this.getParam('size', 2000));
58 scroll = this.getParam('duration', '5m');
59 field = this.getParam('field', ['doi']);
60 fields = Array.isArray(field) ? field : [field];
61 output = 'arkIstex,' + fields.map(function (e) {
62 return (/\w+/.exec(e)[0]
63 );
64 }).join();
65 location = {
66 protocol: 'https:',
67 host: 'api.istex.fr',
68 pathname: '/document/'
69 };
70 parameters = {
71 q: query,
72 scroll: scroll,
73 output: output,
74 size: size,
75 sid: sid
76 };
77 urlObj = (0, _extends3.default)({}, location, {
78 search: _qs2.default.stringify(parameters)
79 });
80 urlStr = _url2.default.format(urlObj);
81 _context.next = 16;
82 return (0, _fetchWithProxy2.default)(urlStr);
83
84 case 16:
85 response = _context.sent;
86 _context.next = 19;
87 return response.json();
88
89 case 19:
90 json = _context.sent;
91
92 if (!(json.total === 0)) {
93 _context.next = 22;
94 break;
95 }
96
97 return _context.abrupt('return', feed.send(new Error('No result.')));
98
99 case 22:
100 if (!json._error) {
101 _context.next = 24;
102 break;
103 }
104
105 return _context.abrupt('return', feed.send(new Error(json._error)));
106
107 case 24:
108 if (!(json.total === undefined)) {
109 _context.next = 26;
110 break;
111 }
112
113 return _context.abrupt('return', feed.send(new Error('Unexpected response.')));
114
115 case 26:
116 nbPages = Math.ceil(json.total / size);
117
118 if (nbPages > maxPage) {
119 nbPages = maxPage;
120 }
121 if (json.noMoreScrollResults) {
122 nbPages = 1;
123 }
124 prevScrollId = '';
125 i = 0;
126
127 case 31:
128 if (!(i < nbPages)) {
129 _context.next = 47;
130 break;
131 }
132
133 _json = json, nextScrollURI = _json.nextScrollURI, scrollId = _json.scrollId;
134
135 if (process.env.DEBUG) {
136 // eslint-disable-next-line no-console
137 console.assert(prevScrollId === scrollId, 'New ScrollId: ' + scrollId);
138 prevScrollId = scrollId;
139 }
140 json = (0, _extends3.default)({}, json, data);
141 feed.write(json);
142
143 if (!json.noMoreScrollResults) {
144 _context.next = 38;
145 break;
146 }
147
148 return _context.abrupt('break', 47);
149
150 case 38:
151 _context.next = 40;
152 return (0, _fetchWithProxy2.default)(nextScrollURI);
153
154 case 40:
155 res = _context.sent;
156 _context.next = 43;
157 return res.json();
158
159 case 43:
160 json = _context.sent;
161
162 case 44:
163 i += 1;
164 _context.next = 31;
165 break;
166
167 case 47:
168
169 feed.end();
170
171 case 48:
172 case 'end':
173 return _context.stop();
174 }
175 }
176 }, _callee, this);
177 }));
178
179 return function ISTEXScrollMerge(_x, _x2) {
180 return _ref.apply(this, arguments);
181 };
182}(); /* eslint-disable no-await-in-loop */
183
184
185var _url = require('url');
186
187var _url2 = _interopRequireDefault(_url);
188
189var _qs = require('qs');
190
191var _qs2 = _interopRequireDefault(_qs);
192
193var _fetchWithProxy = require('fetch-with-proxy');
194
195var _fetchWithProxy2 = _interopRequireDefault(_fetchWithProxy);
196
197function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
198
199exports.default = {
200 ISTEXScrollMerge: ISTEXScrollMerge
201};
\No newline at end of file