TelegramBot + Instagram

Scriam in postul anterior ca am facut un mic script inutil, for fun, pentru ca se poate. Scriptul ma anunta cati followeri am pe Instagram si cati am in plus sau in minus fata de ultima data cand a fost rulat scriptul.

Pe scurt: Instagram iti pune la dispozitie un API, dar nu prea. API-ul e pentru ceva aplicatii facute prin Facebook, trebuie sa te faci Facebook developer, etc, etc, n-am prea inteles bine si nici nu mi-am batut capul. Am gasit in schimb o solutie prin care Instagram iti varsa un json pe care poti sa-l parsezi: curl 'https://www.instagram.com/{ig_username}/?__a=1'

Abuse it wisely. Bineinteles, trebuie setat un cookie in request-ul cURL si eu am lasat si UserAgent-ul. Nu cred ca e nevoie de UA, dar nu costa nimic sa fie acolo.

Json-ul respectiv poate fi parsat prin jq si numarul de followeri salvat intr-o variabila. Ceva de genul: followers=$(curl {URL} | jq .graphql.user.edge_followed_by.count).

Ce faceti pe urma cu informatia e treaba voastra, eu am ales sa compar ziua de ieri cu ziua de azi si sa trimit informatia catre Telegram. Logica din spatele if-urilor probabil nu e cea mai buna, but it works.

#!/bin/bash

follow_db=$(cat /tmp/followdb)
TOKEN=aivreatu
CHID=nope
CURL=$(curl 'https://www.instagram.com/{username}/?__a=1' -X 'GET' -H 'Cookie: haha' -H 'User-Agent: ceva' -s | jq .graphql.user.edge_followed_by.count)

if [[ $CURL == '' ]]; then
    curl -s "https://api.telegram.org/$TOKEN/sendMessage?chat_id=$CHID&text=Eroare in cURL Instagram"
    exit 1
fi

cur_followers=$CURL
yest_followers=$follow_db
amount=$(echo $(($cur_followers-$yest_followers)))


if [[ $yest_followers < $cur_followers ]]; then
    curl -s "https://api.telegram.org/$TOKEN/sendMessage?chat_id=$CHID&text=Instagram report 👀:%0AYou have gained $amount new followers, you now have a total of $cur_followers"
elif [[ $yest_followers > $cur_followers ]]; then
    curl -s "https://api.telegram.org/$TOKEN/sendMessage?chat_id=$CHID&text=Instagram report 👀:%0AYou have lost $amount followers, you now have a total of $cur_followers"
elif [[ $yest_followers == $cur_followers ]]; then
    curl -s "https://api.telegram.org/$TOKEN/sendMessage?chat_id=$CHID&text=Instagram report 👀:%0ANo followers change, you still have $cur_followers"
fi

echo $cur_followers > /tmp/followdb

exit 0

Probabil scriptul putea fi scris mai frumos, probabil nu. Probabil putea fi scris mai eficient, probabil nu. Probabil putea sa fie un oneliner, probabil… nu. La mine atat s-a putut. If it looks stupid but it works, then it’s not stupid. Pentru cei care au citit “codul” si au vazut ceva dubios acolo, puteti sa-mi ziceti in comentarii.
PS: %0A inseamna newline(enter) pentru TelegramBot, am aflat asta cand am facut scriptul.

Ne vedem in postul urmator.