Как использовать пользовательский поиск по сайту с ограниченным JSON API, используя node.js? - PullRequest
0 голосов
/ 22 марта 2019

Я использовал поисковую систему bing Api, чтобы узнать количество сотрудников на вопрос моей компании. Я сделал функцию, в которой я выбираю URL компании из файла data.Csv, а затем выполняю поиск по Bing, используя Bing Api, получаю общее количество сотрудников из этого сотрудника и затем записываю каждый результат в мой CSV-файл с именем out.csv. Это прекрасно работает, но теперь я хочу сделать то же самое с Google. Вот мой код с Bing API

«использовать строгое»;

const csvReader = require('csv-parser');
const csvW = require('csv-writer');
const fs = require('fs');
var request = require('sync-request');


// Replace the subscriptionKey string value with your valid subscription 
key.
let subscriptionKey = '6804bc5f804e47edaa4d8466928bd8de';
let host = 'https://api.cognitive.microsoft.com';
let path = '/bing/v7.0/search';

let outputData = [];
fs.createReadStream('data.csv')
.pipe(csvReader())
.on('data', (row) => {
// console.log(row.url);
bing_web_search(row.url);
})
.on('end', () => {
 console.log('CSV file successfully processed');
 csvWriter
  .writeRecords(outputData)
  .then(() => console.log('The CSV file was written successfully', 
 outputData));

 });

let bing_web_search = function (url) {
let search = url + ' see all employees on LinkedIn ->';
console.log('Searching the Web for: ' + search);

let body = '';
let snippet = '';
let fullPath = host + path + '?q=' + encodeURIComponent(search);
var res = request('GET', fullPath, {
headers: {
  'Ocp-Apim-Subscription-Key': subscriptionKey,
},
});
body += res.getBody('utf8');
let v = JSON.parse(body);
if (v && v.webPages && v.webPages.value.length > 0) {
snippet = v.webPages.value[0].snippet;
console.log(v.webPages.value);
}

const r = new RegExp(`(0|[1-9][0-9]{0,2}(?:(,[0-9]{3})*|[0-9]*))(\.[0-9]+) 
{0,1}`);
const results = r.exec(snippet);
let employees = 0;
if (results && results.length > 0) {
 employees = results[0];
} else {
employees = "NOT_FOUND";
}
console.log('employees =', employees);

const data = { 'url': url, 'employees': employees };
outputData.push(data);
}

const createCsvWriter = csvW.createObjectCsvWriter;
const csvWriter = createCsvWriter({
path: 'out.csv',
header: [
{ id: 'url', title: 'Url' },
{ id: 'employees', title: 'Employees' },
]
});

Вот мой data.csv формат

https://www.linkedin.com/company/130323
https://www.linkedin.com/company/3686999
https://www.linkedin.com/company/1384

Но теперь я пытаюсь сделать то же самое с Custom Search Site Restricted JSON API, и вот код, который я попробовал

«использовать строгое»;

const csvReader = require('csv-parser');
const csvW = require('csv-writer');
const fs = require('fs');
var request = require('sync-request');


let subscriptionKey = 'My-Key';

let cx = 'My-Cx-Key';

let path = `https://www.googleapis.com/customsearch/v1/siterestrict? 
key=${subscriptionKey}&cx=${cx}&q=`;



let outputData = [];
fs.createReadStream('data.csv')
.pipe(csvReader())
.on('data', (row) => {
bing_web_search(row.url);
})
.on('end', () => {
console.log('CSV file successfully processed');
csvWriter
  .writeRecords(outputData)
  .then(() => console.log('The CSV file was written successfully', 
outputData));

});

 let bing_web_search = function (url) {
 let search = url + ' see all employees on LinkedIn ->';
 console.log('Searching the Web for: ' + search);

 let body = '';
 let snippet = '';

 let fullPath = path + encodeURIComponent(search);
 var res = request('GET', fullPath);
 body += res.getBody('utf8');
 let v = JSON.parse(body);
 console.log(v);

  }

Но это дает мне такую ​​ошибку

{
 "error": {
 "errors": [
   {
    "domain": "usageLimits",
    "reason": "keyInvalid",
    "message": "Bad Request"
   }
  ],
"code": 400,
"message": "Bad Request"
}

}

Как я могу это исправить, я не знаю, что это за проблема?

Примечание: все секретные ключи я заменил на строку для публикации здесь из соображений безопасности

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...