### LESSON 0: line starting with "#" is comment
"""
This is also (multiline)comments
"""
### LESSON 1: QUICK LEARN RUBY SYNTAX
# import from relative folder location (.rb file)
require_relative '../apify-ruby-sdk/lib/apify_sdk'
require_relative 'stackexchange'
# import from installed library, eg: gem install json
require 'json'
require 'awesome_print'
# multiline print
puts "if you love PHP, JavaScript and Python", "then you'll love Ruby more!"
# when variable first letter is UPPERCASE, its automatically become constant (really ?)
GREEN = "🟩"
# spread assignment
RED, YELLOW = "🟥", "🟧"
# illegal, this is supposed to be constants! (nevermind, assign it anyway, will just show ugly warnings ...)
YELLOW = "🟨"
# string formatting
TRAFFIC_LIGHTS = "#{GREEN}#{RED}#{YELLOW}"
# lambda
def pretty(node) = JSON.pretty_generate(node)
def echo(title, *args) = puts "#{TRAFFIC_LIGHTS} #{title}", *args
### LESSON 2: USING SDK
def on_abort data
puts "ON_aborting".red, data
end
def on_persistState data
puts "ON_persistState".red, data
end
def on_systemInfo data
puts "ON_systemInfo".red, data
end
def on_dummy data
## testing if event manager catch the errors
p undefined_variable
end
def main(actor)
### get_env()
#echo "ENV :", pretty(actor.get_env)
### get_config() awesome_print
echo "CONFIG :"
ap actor.config.to_h
### get_input()
input = actor.get_input
echo "INPUT :", pretty(input)
### create_proxy_configuration()
proxy_input = input['proxy_input']
if proxy_input
proxy_config = actor.create_proxy_configuration proxy_input
new_proxy = proxy_config.new_url
echo "PROXYURL :", new_proxy
end
### scraping ...
echo "Scraping data ..."
data = stackexchange(page: 1)["items"]
### push_data()
if data
actor.push_data data
echo "PUSHDATA : #{data.length} rows."
end
### open_dataset()
dataset = actor.open_dataset
info = dataset.get_info
echo "DATASET :", pretty(info)
### get_data()
data = dataset.get_data
# print 2 items start from index 5
echo "DATA :", pretty(data.items[5,2])
# on()
echo "Listening platform events ... (try aborting gracefully)"
actor.on "aborting", method(:on_abort)
actor.on "persistState", method(:on_persistState)
actor.on "systemInfo", method(:on_systemInfo)
actor.on "systemInfo", method(:on_dummy)
echo "sleeping 10 seconds ..."
sleep 10
actor.set_status_message "Another successful mission !!", is_terminal: true
end
### enable logger
logger = Apify::Log
logger.level = Logger::DEBUG
logger.formatter = Apify::ActorLogFormatter.new
### do the thing!
# Apify::Actor.main( method(:main) )
Async do
with Apify::Actor do |actor|
main actor
end
end