DEV Community

Cover image for I build my own Shopee discount alert on Slack channel!
Amzar
Amzar

Posted on

I build my own Shopee discount alert on Slack channel!

I love discounts and I bet you are too. My fav online shopping platform is Shopee MY. But, how come I can always 24/7 checking on the App to get notified when the seller promotes the products with DISCOUNT? It is not works for me.

So, I build my own Shopee alert.

How to get the information?

The first thing is I need to get the information from the Shopee. But, do I have the Shopee API? No. I don't. My next option is web scraping. By using requests and BeautifulSoup, it is possible to do so with a few tricks.

... headers = { "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:73.0) Gecko/20100101 Firefox/73.0", "X-Requested-With": "XMLHttpRequest", "Referer": link, } page = requests.get(URL, headers=headers) if page.status_code == 200: soup = BeautifulSoup(page.content, "html.parser") ... 
Enter fullscreen mode Exit fullscreen mode

Where do I store the information?

Next, I must store the data to compare the price/discount before sending the alert. Why do we always need the alert when the price is not the lowest?

I build for my own use; I just need a simple database. Below is the database in my list:

  • Google Sheet
  • Baserow ✅
  • Excel and store in AWS S3

After few consideration, I choose to use Baserow. But why?

  • open-source with API capability
  • backend using Postgres
  • better admin panel
... res = requests.get( url=f"{base_url}database/rows/table/{table_id}/?user_field_names=true", headers=headers, ) if res.status_code == 200: data = res.json() res_data = data["results"] df = pd.DataFrame(res_data) ... 
Enter fullscreen mode Exit fullscreen mode

Notification or alert

If the price is the lowest (compared with the historical data), it should alert me.

For this project, I am using Slack channel to get the alert. Slack is one of the easiest alert integration compared to Telegram or Discord.

... def sendToSlack(itemRes, no_data=False): if no_data: payload = getPayloadEmpty() else: payload = getPayload(itemRes) slack_webhook = os.environ.get("SLACK_URL") requests.post(slack_webhook, json=payload) ... 
Enter fullscreen mode Exit fullscreen mode

Now, let's see how the alert looks like

Slack alert

It's contain the discount and link to the product.

Deploy the script

I am using cron job running in the AWS Lightsail instance. Schedule to run the bash script every 3rd hour from 1 AM to 11 PM.

export PYTHONPATH=/home/amzar/Documents/python_env/shopee-tracker/bin/python3 /home/amzar/Documents/python_env/shopee-tracker/bin/python3 /home/amzar/Documents/shopee-tracker/app.py 
Enter fullscreen mode Exit fullscreen mode

Cron expression 0 1-23/3 * * * /home/amzar/scripts/run_shopee_tracker.sh

Full Code

Github follow the installation step in README.md

Top comments (0)