我有一个API的初学者代码,它允许我搜索一个术语,比如Apple,并将JSON对象的列表打印到控制台。
var params = {
q: "Apple",
tbm: "isch",
ijn: "0"
};
var callback = function(data) {
console.log(data["images_results"]);
};
src.json(params, callback);
我希望将数据“images_results”项保存到变量中,而不是打印到控制台。到目前为止,我已经尝试在回调函数中将var设置为数据“images_results”(不过,var是在函数之外初始化的),在另一种情况下,我将其设置为src.json(params,回调)。但是当我试图访问变量时,它显示为未定义的。如何使用这个API访问数据“images_results”而不是将结果打印到控制台?
var a;
var params = {
q: "Apple",
tbm: "isch",
ijn: "0"
};
var callback = function(data) {
a = data["images_results"];
};
src.json(params, callback);
console.log(a);
更新的
const params = {
engine: "google",
google_domain: "google.com",
hl: "en",
gl: "us",
device: "desktop",
tbm: "isch",
};
const getJson = async () => {
return new Promise((resolve) => {
src.json(params, resolve);
});
};
const getFirstImages = async () => {
const imres = [];
for (item in items) {
params.q = item['sku'];
const json = await getJson();
imres.push(json.images_results[0]["original"]);
}
return imres;
};
getFirstImages().then(imres => {
console.log(imres);
images = imres;
myCache.set('total_images', images);
})
发布于 2022-08-01 01:00:22
您无法以这种方式保存SerpApi的结果,因为.json
方法是异步的,并且在控制台中打印a
之后运行callback
函数。您只需要在某些函数中处理结果,因为不能在全局范围内使用类似于await
的东西。如果你能更多地告诉我你下一步想做些什么,我可以帮你更好。但现在你可以做这样的事:
var params = {
q: "Apple",
tbm: "isch",
ijn: "0"
};
var callback = function(data) {
var a = data["images_results"];
// do what you want to do next in this function
};
src.json(params, callback);
或者您可以使用.then
链接:
const params = {
q: "Apple",
tbm: "isch",
ijn: "0"
};
const getJson = () => {
return new Promise((resolve) => {
src.json(params, resolve);
});
};
getJson().then(({images_results}) => {
var a = images_results
// do what you want to do next in this function
});
更新:
如果我理解得对,您需要做(签入在线IDE)这样的事情:
const SerpApi = require("google-search-results-nodejs");
const src = new SerpApi.GoogleSearch(process.env.API_KEY); //your api key from serpapi.com
const params = {
engine: "google",
google_domain: "google.com",
hl: "en",
gl: "us",
device: "desktop",
tbm: "isch",
};
const searchQueries = ["apple", "cherry", "banana"];
const getJson = async () => {
return new Promise((resolve) => {
src.json(params, resolve);
});
};
const getFirstImages = async () => {
const images = [];
for (query in searchQueries) {
params.q = query;
const json = await getJson();
images.push(json.images_results[0]);
}
return images;
};
getFirstImages().then(images => {
console.log(images)
// or do what you want to do next
})
请注意,我们在异步函数getFirstImages
中用图像填充数组,等待(await
)接收带有结果的对象(json
)。另外,您不能使用数组方法(例如forEach
)在searchQueries
上迭代,因为await
不能工作。
输出:
[
{
"position":1,
"thumbnail":"https://serpapi.com/searches/62e7affb9bddf73501bfde87/images/d6db51527c0e83ba92158999bf4cd1063f03d4fcbdfbcca0bb5f77b191b27a53.png",
"source":"en.wiktionary.org",
"title":"0 - Wiktionary",
"link":"https://en.wiktionary.org/wiki/0",
"original":"https://upload.wikimedia.org/wikipedia/commons/thumb/6/6e/Z%C3%A9ro.svg/1200px-Z%C3%A9ro.svg.png",
"is_product":false
},
{
"position":1,
"thumbnail":"https://serpapi.com/searches/62e7affed737d7249d50f729/images/920c4e458460303dc0bb77ec3f448f9ad3946e5412eb72ca3cbb8751a8cee7c6.png",
"source":"en.wiktionary.org",
"title":"1 - Wiktionary",
"link":"https://en.wiktionary.org/wiki/1",
"original":"https://upload.wikimedia.org/wikipedia/commons/thumb/0/08/Un1.svg/1200px-Un1.svg.png",
"is_product":false
},
{
"position":1,
"thumbnail":"https://serpapi.com/searches/62e7b0064055aa23fb85ce10/images/4036a5ed1a2cf55b31ca73fd5c660dc71431f02052cf7ee6f4796043060b475c.png",
"source":"en.wiktionary.org",
"title":"2 - Wiktionary",
"link":"https://en.wiktionary.org/wiki/2",
"original":"https://upload.wikimedia.org/wikipedia/commons/thumb/3/3b/Deux.svg/1200px-Deux.svg.png",
"is_product":false
}
]
https://stackoverflow.com/questions/73186142
复制相似问题