From 1041cb3c0bb69e9034696624e03433be28e83ac6 Mon Sep 17 00:00:00 2001 From: towfiqi Date: Tue, 6 Feb 2024 13:32:24 +0600 Subject: [PATCH] feat: Adds ValueSerp Integration. closes #105, #106 --- README.md | 1 + components/settings/ScraperSettings.tsx | 2 +- scrapers/index.ts | 2 ++ scrapers/services/valueserp.ts | 41 +++++++++++++++++++++++++ 4 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 scrapers/services/valueserp.ts diff --git a/README.md b/README.md index 1a16b38..04f199a 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,7 @@ The App uses third party website scrapers like ScrapingAnt, ScrapingRobot, Searc | serpapi.com | From $50/mo** | From 5,000/mo** | Yes | | spaceserp.com | $59/lifetime | 15,000/mo | Yes | | SearchApi.io | From $40/mo | From 10,000/mo | Yes | +| valueserp.com | Pay As You Go | $2.50/1000 req | No | (*) Free upto a limit. If you are using ScrapingAnt you can lookup 10,000 times per month for free. (**) Free up to 100 per month. Paid from 5,000 to 10,000,000+ per month. diff --git a/components/settings/ScraperSettings.tsx b/components/settings/ScraperSettings.tsx index 4a242dd..9152aa1 100644 --- a/components/settings/ScraperSettings.tsx +++ b/components/settings/ScraperSettings.tsx @@ -55,7 +55,7 @@ const ScraperSettings = ({ settings, settingsError, updateSettings }:ScraperSett minWidth={270} /> - {['scrapingant', 'scrapingrobot', 'serply', 'serpapi', 'spaceSerp', 'searchapi'].includes(settings.scraper_type) && ( + {settings.scraper_type !== 'none' && settings.scraper_type !== 'proxy' && ( { + const country = keyword.country || 'US'; + const countryName = countries[country][0]; + const location = keyword.city ? `&location=${encodeURI(`${keyword.city},${countryName}`)}` : ''; + const device = keyword.device === 'mobile' ? '&device=mobile' : ''; + const lang = countryData[country][2]; + console.log(`https://api.valueserp.com/search?api_key=${settings.scaping_api}&q=${encodeURI(keyword.keyword)}&gl=${country}&hl=${lang}${device}${location}&num=100&output=json&include_answer_box=false&include_advertiser_info=false`); + return `https://api.valueserp.com/search?api_key=${settings.scaping_api}&q=${encodeURI(keyword.keyword)}&gl=${country}&hl=${lang}${device}${location}&num=100&output=json&include_answer_box=false&include_advertiser_info=false`; + }, + resultObjectKey: 'organic_results', + serpExtractor: (content) => { + const extractedResult = []; + const results: ValueSerpResult[] = (typeof content === 'string') ? JSON.parse(content) : content as ValueSerpResult[]; + for (const result of results) { + if (result.title && result.link) { + extractedResult.push({ + title: result.title, + url: result.link, + position: result.position, + }); + } + } + return extractedResult; + }, +}; + +export default valueSerp;