Comments (5)
Hm. How are you running the code? It looks like it's in a browser, that could be why (although I would expect that to work).
Could you please provide the details of the environment you are running this within and full sample code that reproduces the problem?
Thanks
from kijiji-scraper.
Hello,
Thanks for your help, indeed I tried to execute this code front side.
I tried in a NextJS app (version 10.0.6) and into a create-react-app boilerplate, I just generated a new app with npx create-react-app my-app
and in both cases I had the error above
from kijiji-scraper.
I was able to reproduce the issue in a simple project generated with create-react-app
. Using Firefox, I received a slightly more informative error:
TypeError: 'fetch' called on an object that does not implement interface Window.
It turns out that the library I'm using for network communication (node-fetch) does not work on the client side. It is self-described as "minimal code for a window.fetch
compatible API on Node.js runtime" (i.e., not browsers).
There are other libraries, such as cross-fetch which do environment detection at runtime and use either window.fetch
or node-fetch
as appropriate. This allows using the same API regardless of where the code is running. However, even if I change libraries, there is still a problem:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://mingle.kijiji.ca/api/ads/1553070389. (Reason: CORS request did not succeed).
(1553070389 is just an arbitrary ad I chose).
The problem is that Kijiji does not set the Access-Control-Allow-Origin
CORS HTTP header which means that even when the proper library is used, scripts running in browsers will not be able to successfully complete the request due to the same-origin policy.
So in order to get around this, I suggest that you move your Kijiji scraping logic to the server side (Node.js), since it is not bound by the same-origin policy. You can create a server endpoint in your app that acts as a proxy. The client can send it an ad URL as input and the endpoint handler can use the scraper to retrieve the information from Kijiji and send it back to the client.
from kijiji-scraper.
Thanks for your explanation, this is exactly what I’ve done and it works perfectly
from kijiji-scraper.
Perfect, glad to hear it! I'm going to close this then. All the best.
from kijiji-scraper.
Related Issues (20)
- Random Error:Invalid Kijiji HTML on search results page HOT 5
- Issues with search for services? HOT 7
- Scraper fails to return search results (Kijiji scraper detection + blocking) HOT 23
- Search() with URL HOT 1
- "npm install" fails HOT 9
- MinResults and MaxResults in Search() function implemented improperly, Doesn't allow for getting every listing available. HOT 9
- kijiji.search() Randomly Returns an Amount of Ads Under Specified Amount via minResults HOT 4
- Consideration for expanding repo to Kijiji API HOT 1
- Kijiji.Ad.Get() Doesn't return to callback HOT 1
- Scraper fails to properly scrape some numeric attributes (real numbers) HOT 6
- Missing very new ads when using the Mobile API HOT 15
- Ad #... does not exist HOT 2
- Incorrect Size Attribute For Shoe Category HOT 6
- Category Attributes HOT 5
- Create helper types for enums, and expose expected response attributes
- Package broken: Kijiji-scraper returns no results HOT 5
- Not working HOT 5
- Kijiji Mingle API Issue HOT 11
- How long is a temporary block? I haven't been able to get results since yesterday. HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from kijiji-scraper.