-
-
Notifications
You must be signed in to change notification settings - Fork 198
/
baidu.js
81 lines (63 loc) · 1.91 KB
/
baidu.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import {validateUrl} from 'utils/app';
import {findNode, isMobile, runOnce} from 'utils/common';
import {
initSearch,
prepareImageForUpload,
setFileInputData,
sendReceipt
} from 'utils/engines';
const engine = 'baidu';
async function search({session, search, image, storageIds}) {
const mobile = await isMobile();
image = await prepareImageForUpload({
image,
engine,
target: mobile ? 'api' : 'ui'
});
if (mobile) {
const data = new FormData();
data.append('tn', 'pc');
data.append('from', 'pc');
data.append('range', '{"page_from": "searchIndex"}');
if (search.assetType === 'image') {
data.append('image', image.imageBlob, image.imageFilename);
data.append('image_source', 'PC_UPLOAD_SEARCH_FILE');
} else {
data.append('image', image.imageUrl);
data.append('image_source', 'PC_UPLOAD_SEARCH_URL');
}
const rsp = await fetch('https://graph.baidu.com/upload', {
mode: 'cors',
method: 'POST',
body: data
});
if (rsp.status !== 200) {
throw new Error(`API response: ${rsp.status}, ${await rsp.text()}`);
}
const tabUrl = (await rsp.json()).data.url;
await sendReceipt(storageIds);
if (validateUrl(tabUrl)) {
window.location.replace(tabUrl);
}
} else {
(await findNode('.soutu-btn', {timeout: 120000})).click();
if (search.assetType === 'image') {
const inputSelector = 'input.upload-pic';
const input = await findNode(inputSelector);
await setFileInputData(inputSelector, input, image);
await sendReceipt(storageIds);
input.dispatchEvent(new Event('change'));
} else {
const input = await findNode('input#soutu-url-kw');
input.value = image.imageUrl;
await sendReceipt(storageIds);
(await findNode('.soutu-url-btn')).click();
}
}
}
function init() {
initSearch(search, engine, taskId);
}
if (runOnce('search')) {
init();
}