Skip to content

Commit a4eff92

Browse files
fix alchemy vision
1 parent bf2e89d commit a4eff92

File tree

1 file changed

+22
-78
lines changed
  • services/alchemy_vision

1 file changed

+22
-78
lines changed

services/alchemy_vision/v1.js

Lines changed: 22 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ var requestFactory = require('../../lib/requestwrapper');
2121
var endpoints = require('../../lib/alchemy_endpoints.json');
2222
var helper = require('../../lib/helper');
2323
var isStream = require('isstream');
24-
var pick = require('object.pick');
2524
var omit = require('object.omit');
2625
var fs = require('fs');
2726

@@ -54,18 +53,33 @@ function createRequest(method) {
5453
' needs to be specified'));
5554
return;
5655
}
56+
// always return json
57+
params.outputMode = 'json';
5758

5859
var parameters = {
5960
options: {
6061
url: endpoints[method][format],
61-
method: 'POST',
62-
json: true,
63-
qs: extend({outputMode: 'json'}, params) // change default output to json
62+
method: 'POST'
6463
},
6564
defaultOptions: this._options
6665
};
6766

68-
return requestFactory(parameters, errorFormatter(callback));
67+
if (!params.image || !isStream(params.image)) {
68+
// url or base64 images are considered 'not-raw'
69+
params.imagePostMode = 'not-raw';
70+
// send the parameters as form url-encoded
71+
parameters.options.form = params;
72+
return requestFactory(parameters, errorFormatter(callback));
73+
} else {
74+
params.imagePostMode = 'raw';
75+
// send the parameters as query parameters
76+
parameters.options.qs = omit(params,['image']);
77+
// add the content-length to the headers
78+
parameters.options.headers = {
79+
'Content-Length': fs.statSync(params.image.path).size
80+
};
81+
return params.image.pipe(requestFactory(parameters, errorFormatter(callback)));
82+
}
6983
};
7084
}
7185

@@ -81,86 +95,16 @@ function AlchemyVision(options) {
8195
/**
8296
* Extracts images from a URL or html
8397
*/
84-
AlchemyVision.prototype.getImageLinks = function(_params, callback ) {
85-
var params = _params || {};
86-
var accepted_formats = Object.keys(endpoints['image_link']);
87-
var format = helper.getFormat(params, accepted_formats);
88-
89-
if (format === null) {
90-
callback(new Error('Missing required parameters: ' + accepted_formats.join(', ') + ' needs to be specified'));
91-
return;
92-
}
93-
94-
var parameters = {
95-
options: {
96-
url: endpoints['image_link'][format],
97-
method: 'POST',
98-
json: true,
99-
qs: extend({}, params,{outputMode: 'json'}) // change default output to json
100-
},
101-
defaultOptions: this._options
102-
};
103-
104-
return requestFactory(parameters, errorFormatter(callback));
105-
};
98+
AlchemyVision.prototype.getImageLinks = createRequest('image_link');
10699

107100
/**
108101
* Tags image with keywords
109102
*/
110-
AlchemyVision.prototype.getImageKeywords = function(_params, callback) {
111-
var params = extend({}, _params);
112-
var accepted_formats = Object.keys(endpoints['image_keywords']);
113-
var format = helper.getFormat(params, accepted_formats);
114-
115-
if (format === null) {
116-
callback(new Error('Missing required parameters: ' + accepted_formats.join(', ') + ' needs to be specified'));
117-
return;
118-
}
119-
120-
var parameters = {
121-
options: {
122-
url: endpoints['image_keywords'][format],
123-
method: 'POST',
124-
json: true,
125-
qs: {outputMode: 'json'} // change default output to json
126-
},
127-
defaultOptions: this._options
128-
};
129-
130-
if (typeof(params.image) !== 'undefined') {
131-
132-
// check if image is stream or string
133-
if ((typeof(params.image) !== 'string') && !isStream(params.image)) {
134-
callback(new Error('Invalid arguments: image needs to be a stream or base64'));
135-
return;
136-
}
137-
138-
if (isStream(params.image)) {
139-
params.imagePostMode = 'raw';
140-
// handle raw images
141-
parameters.options.body = params.image;
142-
143-
} else {
144-
params.imagePostMode = 'not-raw';
145-
parameters.options.formData = params;
146-
}
147-
} else {
148-
parameters.options.formData = params;
149-
}
150-
151-
return requestFactory(parameters, errorFormatter(callback));
152-
};
103+
AlchemyVision.prototype.getImageKeywords = createRequest('image_keywords');
153104

154105
/**
155106
* Face detection and Recognition
156107
*/
157-
AlchemyVision.prototype.recognizeFaces = function(_params, callback) {
158-
var params = _params || {};
159-
160-
if (params.image && typeof(params.image) !== 'string')
161-
params.imagePostMode = 'raw';
162-
163-
return createRequest('image_recognition').call(this, params, callback);
164-
};
108+
AlchemyVision.prototype.recognizeFaces = createRequest('image_recognition');
165109

166110
module.exports = AlchemyVision;

0 commit comments

Comments
 (0)