0.0.2 • Published 6 years ago

event_scraper v0.0.2

Weekly downloads
-
License
MIT
Repository
bitbucket
Last release
6 years ago

Event Scraper

Asynchronous scraping as fast as possible!

Installing:

npm install event_scraper

Starting example:

import { Event, EventListener, EventHandler, IContext } from 'event_scraper';

class AsyncScrapeEvent extends Event {
  context: IContext = {
    callerEvent: this,
    proxied: false,
    numberOfTry: 1
  }

  public async event(proxy?: string) {
    // do something asynchronous...
    return result;
  }
}

const event = new AsyncScrapeEvent();

class MyEventListener extends EventListener {
  eventToListenTo = AsyncScrapeEvent.name;

  onSuccess(context: IContext, result: any): void {
    // do something with result
    
    // start new events as:
    EventHandler.scheduleEvent(newEvent);
  }
}
const eventListener = new MyEventListener();

// set up everything:
const eventHandler = new EventHandler(5);


const proxies = []; /** if you have proxies... */
eventHandler.setEventListener(eventListener);
eventHandler.setProxies(proxies);
eventHandler.startEvent(event);

Description

This module operates with a basic EventEmitter under the hood. The goal of the project is to create events, all of which can do anything asynchronous while the relationship between them are leveraged by the event-listeners we set. The addition which makes it more than just a regular event-emitter, is that you can feed in a given set of proxies, and every time an event requires a proxy, it will automatically assign one to it completely randomly. There are always as many proxied asynchronous events as many proxies you feed in.

The other extra is that you can set how many retries it should do. This way if any event fails, it'll automatically reschedule it.


Documentation

Event class

Every time you create a new event, you should extend the Event class. You'll be required to create a context parameter. There are three parameters required here. These are:

Parameter nameTypeDescription
callerEventEventYou should just bind this for this parameter. It is used to re-schedule the same event
proxiedbooleanIndicates whether the event should get a proxy or not
numberOfTrynumberYou should always set this to 1

You should also define the asynchronous event function, which can get an optional parameter, the proxy as a string if you set the proxied context parameter as true.

If you get a proxy it'll be a string in the following format:

http://proxy.ipAddress:proxy.port // http:/141.12.16.59:4400

You can put anything in the context parameter as you'd like, these can be used later at the event listeners, since the functions you can override there will all get you extended context. Therefore if you'd like to transfer data from the event to the appropriate event listener, you should put it into the context.

EventListener class

Every event listener you'd like to set up has to extend from the EventListener class. Here you have six methods to override. These are:

Function nameParameter typesReturn typesDescription
onSuccesscontext: IContext, result: anyvoidThis function is going to get executed when the appropriate event was successful. It'll also get the event's context and the result of the event
onFailurecontext: IContext, result: anyvoidThis function gets executed when the appropriate event was unsuccessful. The result will contain the error, therefore the reason of failure.
onReschedulecontext: IContext, result: anyvoidThis function gets executed on rescheduling the event. The result contains the error, therefore the reason of the reschedule
logSuccesscontext: IContextstringThe return string is going to be logged on the console on successful execution in green.
logFailurecontext: IContextstringThe return string is going to be logged on the console on unsuccessful execution in red.
logReschedulecontext: IContextstringThe return string is going to be logged on the console on rescheduling of the event.

When setting up the EventListener class, you have to define a string property called eventToListenTo. This value of this should be the name property of the Event class to listen to. See example above.

If the logger functions don't get overridden, nothing will be logged.

EventHandler class

This is the interface through which you can set up the listeners, events and proxies as well. Also it gives you a handy function to schedule new events into the pool as well. When instantiated the parameter that it needs will be the total number of times it will try to do each event in case of failures.

Function nameParameter typesReturn typesDescription
setEventListenereventListener: EventListenervoidUse this function to set up an event listener.
setEventListenerseventListeners: EventListener[]voidUse this function to set up multiple event listener at once.
startEventevent: EventvoidThis function schedules one single event instantly. Use this to start the whole event-chain.
startEventsevents: Event[]voidThis function schedules an array of events instantly. Use this to start the whole event-chain if there are multiple starter events
setProxiesproxies: IProxies[]voidUse this function to set up available proxies for the events.

And there is an abstract method defined as well:

Function nameParameter typesReturn typesDescription
scheduleEventevent: EventvoidUse this function to schedule new events while the script is already running (like at the onSuccess method of a listener)

IContext

This is the interface of an event's context. If you'd like to add anything to the context, you should extend this interface and after that everywhere where it requires the type IContext, you should just use your extended context.

TODO: Get rid of the numberOfTry... Testing, testing, testing...


License

MIT

0.0.2

6 years ago

0.0.1

6 years ago