Telegram Bot으로 ArchiveBox에 URL을 등록해보자
개인 NAS의 도커 목록을 클량에 올렸는데, ArchiveBox에 관심이 많으셔서 텔레그램 봇을 통해 ArchiveBox에 URL을 등록하는 쉘 스크립트를 공유한다.
https://github.com/pirate/ArchiveBox
pirate/ArchiveBox
🗃 The open source self-hosted web archive. Takes browser history/bookmarks/Pocket/Pinboard/etc., saves HTML, JS, PDFs, media, and more... - pirate/ArchiveBox
github.com
먼저 텔레그램 봇을 생성하여 토큰을 발급받는다.
텔레그램 봇 생성은 많은 블로그에서 검색할 수 있으니 패스~
jq를 설치한다.
텔레그램으로부터 받은 JSON 메시지를 파싱하기 위해 필요한 Command Line JSON 파서이다.
아래 URL에서 본인 OS에 맞는 방법으로 설치하면 된다.
https://stedolan.github.io/jq/download/
Download jq
Download jq jq is written in C and has no runtime dependencies, so it should be possible to build it for nearly any platform. Prebuilt binaries are available for Linux, OS X and Windows. The binaries should just run, but on OS X and Linux you may need to m
stedolan.github.io
쉘 스크립트
아래 스크립트를 디렉토리에 맞게 수정한다.
#!/bin/bash
USER_HOME=/home/kyo
TOKEN={텔레그램 봇 토큰}
URL="https://api.telegram.org/bot$TOKEN/getUpdates"
# 기존 수신 URL 체크를 위한 메시지 ID 저장 파일 경로
CHECK_FILE=$USER_HOME/script/data/checked-msgid.txt
RESULT_UPDATE=`curl -s $URL`
OK=`echo $RESULT_UPDATE | jq '.ok'`
if [ "true" = "$OK" ]; then
MSG_LEN=`echo $RESULT_UPDATE | jq '.result | length'`
for (( i=0; i<$MSG_LEN; i++ ))
do
# 메시지의 ID, TEXT를 가져온다.
ELEM_MSG_ID=".result | .[$i].message.message_id"
ELEM_MSG_TEXT=".result | .[$i].message.text"
MSG_ID=`echo $RESULT_UPDATE | jq "$ELEM_MSG_ID"`
MSG_TEXT=`echo $RESULT_UPDATE | jq "$ELEM_MSG_TEXT"`
ARCHIVE_URL=""
# 메시지가 http로 시작하는 URL인지 체크한다.
if [[ "$MSG_TEXT" == "\"http"* ]]; then
echo "URL"
ARCHIVE_URL=`echo $MSG_TEXT | xargs`
else
echo "TEXT"
fi
# 기존 메시지 ID 체크하는 파일을 생성한다.
if [ ! -f "$CHECK_FILE" ]; then
echo "file create $CHECK_FILE"
touch $CHECK_FILE
fi
CHECK_MSG_ID="MSG_$MSG_ID"
CHECKED=`find $CHECK_FILE -type f -print | xargs grep "$CHECK_MSG_ID"`
CHECKED_LEN=${#CHECKED}
if [ ! $CHECKED_LEN -gt 0 ]; then
echo "msg_id not found!"
echo $CHECK_MSG_ID >> $CHECK_FILE
ARCHIVE_URL_LEN=${#ARCHIVE_URL}
# URL이 있는 경우 docker-compose를 통해 ArchiveBox의 /bin/archive를 실행한다.
if [ $ARCHIVE_URL_LEN -gt 0 ]; then
# ArchiveBox의 docker-compose 경로를 수정한다.
echo $ARCHIVE_URL | docker-compose -f $USER_HOME/docker/archive/ArchiveBox/docker-compose.yml exec -T archivebox /bin/archive
fi
fi
done
fi
실행할 수 있는 권한을 준다.
chmod +x readTelegram.sh
크론 등록
주기적으로 호출하도록 crontab에 등록해준다. (예제는 10분 주기)
0,10,20,30,40,50 * * * * ~/script/readChat.sh